美文网首页
浅谈前端优化

浅谈前端优化

作者: Amy_39de | 来源:发表于2018-09-12 16:09 被阅读0次

雅虎军规

首先,我们先来看看“雅虎军规”的35条:

尽量减少 HTTP 请求个数——须权衡

使用CDN(内容分发网络)

为文件头指定 Expires 或 Cache-Control ,使内容具有缓存性。

避免空的 src 和 href

使用 gzip 压缩内容

把 CSS 放到顶部

把 JS 放到底部

避免使用 CSS 表达式

将 CSS 和 JS 放到外部文件中

减少 DNS 查找次数

精简 CSS 和 JS

避免跳转

剔除重复的 JS 和 CSS

配置 ETags

使 AJAX 可缓存

尽早刷新输出缓冲

使用 GET 来完成 AJAX 请求

延迟加载

预加载

减少 DOM 元素个数

根据域名划分页面内容

尽量减少 iframe 的个数

避免 404

减少 Cookie 的大小

使用无 cookie 的域

减少 DOM 访问

开发智能事件处理程序

用 代替 @import

避免使用滤镜

优化图像

优化 CSS Spirite

不要在 HTML 中缩放图像

favicon.ico要小而且可缓存

保持单个内容小于25K

打包组件成复合文本

一.webpack-bundle-analyzer 

webpack-bundle-analyzer —— Webpack 插件和 CLI 实用程序,她可以将内容束展示为方便交互的直观树状图,让你明白你所构建包中真正引入的内容;我们可以借助她,发现它大体有哪些模块组成,找到不合时宜的存在,然后优化它。我们可以在 项目的 package.json 文件中注入如下命令,以方便运行她(npm run analyz),默认会打开 http://127.0.0.1:8888 作为展示。

“analyz”: “NODE_ENV=production npm_config_report=true npm run build”

二. webpack externals

使用ES6, 由于浏览器兼容问题,需要使用 babel 转换。而这 babel-polyfill 也得引入以确保兼容;还比如项目开发中常用到的 moment, lodash等,都是挺大的存在,如果必须引入的话,即考虑外部引入之,再借助 externals 予以指定, webpack可以处理使之不参与打包,而依旧可以在代码中通过CMD、AMD或者window/global全局的方式访问。

// webpack 中予以指定

externals: {

  'babel-polyfill': 'window'

}

需要补充的是 externals 中:key 是 require 的包名,value 是全局的变量。

三. 引即用

1.像 jQuery ,用原生写几行代码就可以解决的事儿,就不引用。

2. 不用的类库不引用

3.按需引入

import { debounce } from 'lodash'

import { throttle } from 'lodash'

// 改成如下写法

import debounce from 'lodash/debounce'

import throttle from 'lodash/throttle'

// 引入组件,自动转换

import _ from 'lodash'

_.debounce()

_.throttle()

额外补充的是,即便采用如上写法,还是不够快捷,每个用到的文件,都写一遍 import,实在多有不便。更可取的是,将项目所需的方法,统一引入,按需添加,组建出本地 lodash 类库,然后 export 全局使用;

// helper 文件夹下 lodash,统一引入你需要的方法

import _ from 'lodash'

export default {

  cloneDeep: _.cloneDeep,

  debounce: _.debounce,

  throttle: _.throttle,

  size: _.size,

  pick: _.pick,

  isEmpty: _.isEmpty

}

// 注入到全局

import _ from '@helper/lodash.js'

_.debounce()

4.尽可能引入更合适的包

 momentjs: SpaceTime: A lightweight way to manipulate, traverse, compare, and format dates and times across planet Earth。 具有与 monent 相似 api 的新类库,其体积又相对小很多(当然,据观察其灵活度略逊一筹);date-fns:现代JavaScript日期实用程序库( Modern JavaScript date utility library ),如 lodash 一样,可支持模块化

5.按需异步加载模块

关于前端开发优化,重要的一条是,尽可能合并请求及资源,如常用的请求数据合并,压缩合并 js,构造雪碧图诸此等等(当然得适当,注意体积,过大不宜);但,同时也当因需制宜,根据需要去异步加载,避免无端就引入早成的浪费。webpack 也是内置对这方面的支持; 假如,你使用的是 Vue,将一个组件(以及其所有依赖)改为异步加载,所需要的只是把:

import Foo from './Foo.vue'

改为如下写法:

const Foo = () => import('./Foo.vue')

如此分割之时,该组件所依赖的其他组件或其他模块,都会自动被分割进对应的 chunk 里,实现异步加载,当然也支持把组件按组分块,将同组中组件,打包在同个异步 chunk 中。如此能够非常有效的抑制 Javascript 包过大,同时也使得资源的利用更加合理化。

6.生产环境,压缩混淆并移除console

现代化中等规模以上的开发中,区分开发环境、测试环境和生产环境,并根据需要予以区别对待,已然成为行业共识;可能的话,还会有预发布环境。对待生产环境,压缩混淆可以很有效的减小包的体积;同时,如果能够移除使用比较频繁的 console,而不是简单的替换为空方法,也是精彩的一笔小优化。如果使用 UglifyJsPlugin 插件来压缩代码,加入如下配置,即可移除掉代码中的 console:

new webpack.optimize.UglifyJsPlugin({

  compress: {

    warnings: false,

    drop_console: true,

    pure_funcs: ['console.log']

  },

  sourceMap: false

})

7.Webpack3 新功能: Scope Hoisting

截止目前(17-08-06), Webpack 最新版本是 3.4.1;Webpack在 3.0 版本,提供了一个新的功能:Scope Hoisting,又译作“作用域提升”。只需在配置文件中添加一个新的插件,就可以让 Webpack 打包出来的代码文件更小、运行的更快:

module.exports = {

  plugins: [

    new webpack.optimize.ModuleConcatenationPlugin()

  ]

}

8.百度统计和GA

根据页面的访问数据进行对页面的优化。

相关文章

  • 浅谈前端优化

    雅虎军规 首先,我们先来看看“雅虎军规”的35条: 尽量减少 HTTP 请求个数——须权衡 使用CDN(内容分发网...

  • 浏览器缓存

    参考文章链接 : 前端优化:浏览器缓存技术介绍 - 掘金 浅谈http中的Cache-Control_小小郭-...

  • 浅谈前端性能优化

    前端的性能优化无非是让浏览器渲染不卡顿,让浏览器像服务器一样实现负载均衡。 基本的性能优化: 代码的数量:css尽...

  • 浅谈前端性能优化

    写在前面 前端性能优化是一门很深的学问,作为前端工程师往往会为了优化项目加载的几十毫秒而绞尽脑汁,当然这也是前端面...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • 前端性能优化(上)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 为什么要进行前端性能...

  • 浅谈前端优化的几个思路

    浅谈前端优化的几个思路 雪碧图 页面中如果有很多图片、icon(小图标),这样会有很多HTTP请求,一个图就是一个...

  • 前端性能优化-开篇

    前端性能优化问题是每个前端需要掌握的技术。这篇文章从渲染优化、代码优化、资源优化、构建优化、传输加载优化、更多流行...

  • 浅谈前端性能优化(PC版)

    前端的性能优化是一个很宽泛的概念,最终目的都是为了提升用户体验,改善页面性能。面试的时候经常会遇到问谈谈性能优化的...

网友评论

      本文标题:浅谈前端优化

      本文链接:https://www.haomeiwen.com/subject/qjiovftx.html