发布自
Kindem的博客,欢迎大家转载,但是要注意注明出处
提高前端性能的方法
宏观上看
CDN加速
- 什么是CDN(内容分发网络)
- 由于 CDN 位于用户网络的第一跳,将大多数静态文件启用 CDN 加速可以大大提高效率,很多框架用的很多的静态文件都启用了 CDN 加速
反向代理
- 什么是反向代理 ? 正常的代理服务器是位于浏览器一端,代理用户发送 http 请求给 Web 服务器,但是反向代理服务器则是位于 Web 服务器一端,代理 Web 服务器接受请求,然后再将请求处理转发,这样可以提高效率,用过 Nginx 的同学可能就有印象, Nginx 就可以做反向代理
减少 http 请求,合理设置 http 缓存
- 将多个文件合并成一个文件,将多个请求合并成一个请求
- 能够进行缓存的情况下缓存越多越好,越久越好
使用浏览器缓存
- 某些静态文件长期不变化,可以使用 http 头中的 cache-control 和 expires设置浏览器缓存
压缩文件
- 很常见,html、css、js 等文件压缩后的效果很好,很多框架支持构建 min 文件,即是这么一种办法
CSS Sprites
- 即使用该技术将很多零散的图片合成一张大图,比较适合图标之类的使用,可以参照很多游戏制作中的 Sprites 贴图,效果类似,这种办法能够大大减少 http 请求量
LazyLoad Images
- 懒加载,比如旋转木马,可以先加载第一张图片,如果用户不继续翻阅,后面的图片也没有加载的必要了
CSS 放在页面最上部,javascript 放在页面最下面
- 这与页面的渲染顺序有关,CSS尽早加载可以使得页面尽早开始渲染,而js是会阻塞页面的,js的加载需要等到 DOM 完成形成之后才会开始生效,所以js最好放到最下面
减少 cookie 传输
- cookie 是会包含在每一次 http 请求中的(如果启用 cookie),所以太大的 cookie 是会影响到性能的
微观(代码层面)上看
虚拟 DOM
- 什么是虚拟 DOM ? 大体上来说就是使用 js 模拟了 DOM,对虚拟 DOM 的操作会影响到真正的 DOM,这样的方式提高了性能,很多前端框架都采用了虚拟 DOM,比如 Vue、React 等等
- 详细了说有点麻烦,看这里吧:虚拟DOM介绍
慎用eval
- 这玩意真的慢
js 链式作用域需要注意的地方
- js 的链式作用域:用到一个变量的时候,现在当前作用域下的局部变量查询,查不到了再往上一级作用域查询
- 因为这样的作用域,当使用到全局变量的时候,最好先将全局变量缓存到本地
变量/常量访问开销
- 常量最快
- 局部变量次之
- 链式作用域找到的变量再次之
- 对象和数组的操作涉及到寻址,很慢
字符串拼接
- 想想都慢
- 可以使用模板字符串或者尽量避免
css 选择器优化
- 选择器实际上是从右往左选,所以 div#hello 会比 #hello div 效率高很多
参考资料
侵删