前端性能优化方法总结

Posted hursing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端性能优化方法总结相关的知识,希望对你有一定的参考价值。

0.前言

现今“前端”这个词涵盖的技术已经远不只html/CSS/JS了。我们先来看看数据的最长链路:

  1. 起点是浏览器地址栏输入框
  2. 浏览器缓存
  3. 浏览器网络请求
  4. 各级路由器和CDN
  5. nginx或F5
  6. 网关缓存
  7. Node.js
  8. Node层缓存
  9. 静态文件读取/数据库读取/服务器渲染
  10. 返回响应通过各级路由器
  11. 浏览器发起预连接、预加载、子资源请求等
  12. 浏览器渲染
  13. JS执行引起更多网络请求和渲染

所以,每一个节点都是有优化空间的。

本文不会解释各个技术名词,请自行百度,同时也略过服务器硬件的优化。

1.地址栏的优化

  • 开启HSTS:如果全站都是HTTPS,使用HSTS不仅更安全,也减少一次HTTP 301跳转。
  • URL尽可能地短,包括域名。如果要做到SEO的keyword in url,那就只放重要的keyword即可。

2.网络层优化

  • 非安全性敏感页面和资源,使用HTTP协议即可,减少加解密过程的消耗。
  • 对静态资源设置HTTP缓存并使Max-Age尽可能长,减少浏览器发起的请求数。子资源如CSS、JS等可在文件名或query中加入版本号/时间戳/hash值,然后把缓存期限设到最大。
  • 开启Etag
  • 使用ServiceWorker的Cache API提前缓存资源
  • 使用dns-prefetch、preconnect、prefetch提示浏览器做预处理
  • 开启压缩,并覆盖尽可能多的mime type。Brotli优于Gzip。
  • 启用CDN。条件许可的话可自行预热或保持热度,减少CDN的回源。
  • 使用开源代码的免费CDN时,选择高速的。如果要做SEO,那选百度的为佳。
  • 启用HTTP2,在中高速网络下,单个连接完成数据传输的效率更高。
  • 减少内网的中间节点
  • 公网出口的Http Server用最高速的实现。软件是Nginx,硬件是F5等。
  • 使用服务质量高的DNS服务商,降低DNS过程的延时和错误率。
  • DNS设置较长的TTL
  • 各级服务器内存缓存设置足够大

3.Nginx配置优化

  • 足够多的进程
  • 足够大的内存缓存设置
  • 负载均衡
  • API请求,不同域名时,服务器直接支持跨域优于Nginx反向代理。
  • 关闭冗余的header信息

4.HTML/CSS/JS优化

  • 减少DOM数量和层级。确保语义清晰的前提下使用尽可能少的标签。
  • 资源懒加载、延时加载
  • 去掉log,debugger
  • 去掉埋点或使用beacon等高级方法来做埋点
  • 1KB以下的图片使用base64做内联
  • 图片预压缩,然后nginx关闭对图片做压缩。不关闭可能会更慢。
  • 图片做好不同分辨率的副本(包括缩略图),按需要选择显示。
  • 缓存后端数据。MPA可使用cookie、local/session storage等方式,SPA可利用框架缓存在内存。
  • 内联CSS、JS小文件
  • JS、CSS最小化
  • 合并CSS、JS文件,减少网络请求。
  • CSS Sprite。合并多个小图到一张大图里,通过定位显示指定图片,减少网络请求
  • 在<head></head>标签内的外部JS加上async属性
  • 在靠近</body>的地方加载外部JS。这些JS不应该引起渲染更新
  • 所有文件的命名里禁止使用广告拦截插件的黑名单关键字,例如ad、adv、advertise等
  • JS使用高效的API,例如字典的遍历操作使用for...of最快。
  • 少使用第三方库,能用原生实现就用原生,或只用必须依赖的库的API
  • 自己精简第三方库,去掉用不着的部分
  • 使用CSS3动画代替JS Timer类动画
  • 无限的瀑布流,回收利用DOM节点,或只置空远离屏幕外的img src。
  • 信息流做分页加载
  • canvas:离屏渲染、缓存。
  • 合理设计DOM层次,会被JS频繁操作的地方不要引起大范围的重排版。
  • 跨整站使用的代码,抽出来单独加载。
  • 单页面应用SPA,开启分包
  • 减少资源的链式依赖
  • webp的使用
  • 合理选择浏览器的兼容范围。这会影响到js的polyfill和css的verdor prefix。

5.Node.js优化

  • 开启足够多的进程。
  • 根据UA做好浏览器判断,可在渲染结果中减少一些为了兼容性而存在的代码。记得在响应header中加上vary。
  • Java或php后端做的优化,用Node.js实现时也可以做。比如SQL优化,Redis、MQ的使用等。
  • 模板缓存
  • 减少、合并cookie数据
  • 静态文件直接用nginx托管

 

以上是关于前端性能优化方法总结的主要内容,如果未能解决你的问题,请参考以下文章

前端性能的优化总结

常见前端性能优化的35种方法总结

常见前端性能优化的35种方法总结

前端性能优化方法总结

前端优化总结

前端性能优化总结