web加载优化
更新日期:
如何提高页面加载性能?
网页性能分析工具
如何提高网页加载性能
网页主要在处理文本字符串
- Minify Your Code 压缩清理空格等减小文本体积
- Compress Text Resources (Gzip)
- 减少库的使用
图片资源处理
- 移除不必要的图片 (是否真正的需要图片?)
- 选择合适的图片类型
- 清除图片 元数据(拍着日期,地点,设备等)
- 如有必要,调整图片尺寸
- 压缩
合并文本资源(从 http 请求角度考虑,暂不考虑 http2)
- 合并 css 文件(css 是什么?层叠样式表,所以合并注意层叠覆盖现象)
- 合并 js 文件(js 作用域问题,存在和 css 同样的问题)
- 内联 js 和 css 文件
- 调整资源加载优先级
1 | <!-- 预加载 (提高资源请求优先级)--> |
http2 为什么特殊,资源为啥不用捆绑打包?
- 复用请求连接
- 服务器主动推送资源到浏览器
在 HTTP/1 中:
浏览器请求 HTML 文件。
服务器返回 HTML 文件,然后浏览器开始解析。
浏览器遇到 标记,启动对样式表的新请求。
浏览器接收样式表。
http 缓存
Cache-control & Expires
网页构建绘制
协调好 html css javascript 三者依赖关系
webpack 优化加载速度
1.减小生产环境资源文件大小
从两个方面处理:
- 减小打包文件 bundle 大小
启用 mode 为 production 即可,也可通过 optimization 增加自定义配置
webpack3 需要 UglifyJsPlugin - 从 loader 加载器着手处理
比如:
1 | /* comments.css */ |
构建压缩后:
1 | // 这里为什么没有压缩呢? |
1 | // webpack.config.js |
2.声明构建环境 Evn 变量
第三方库文件会依赖此条件判断
1 | process.env.NODE_ENV = production; |
3. 启用 ES modules
压缩的时候会清除 没有使用的 代码
1 | const render = () => { |
4. images 优化
url-loader 内联 base64
5. 优化依赖库
webpack 相关优化插件文档
比如:lodash.js Moment.js
1 | babel - plugin - lodash; |
6. 选择启用 externals 选项
启用 externals,从 cdn 加载
7. webpack mode
1 | // webpack.production.config.js |
8. 利用资源缓存
1 | # Server header |
1 | // 解决 runtime 运行时 和依赖块,防止源文件更改导致 第三方依赖的hash也会发生改变 |
部分 js 文件 可 内嵌到 html 文件里
懒加载
9. 监控 和 分析应用程序
- webpack-dashboard
- bundlesize
- webpack-bundle-analyzer
10. webpack 部分总结
- 清理不必要的代码(压缩,tree shaking, 按需加载依赖)
- 路由懒加载
- 跟踪分析 app