前端优化知识点

CDN的缓存与回源策略

​ CDN是内容分发网络,指一组分布在各个地区的服务器,存储着数据的副本。CDN的核心功能有两个:一是缓存,二是回源。缓存是指,将静态资源copy一份,放在CDN服务器上。静态资源,比如说JS,CSS,图片等不需要业务服务器进行计算得资源。

​ 回源是指,当请求的资源在CDN上找不到时(一般是缓存的数据过期了),就会向根服务器去请求这个资源。根服务器本质上是业务服务器,用来生成动态页面或返回非静态页面,动态资源是指后端实时动态生成得资源,比如JSP或者依赖服务端渲染而得到的页面。非纯静态资源是指,需要服务器做额外计算的html页面,比如说页面的权限认证。

实际应用

​ 静态资源访问量大,访问频率高,所以加载速度是前端优化的重要指标。大型电商,都是将静态资源放到CDN中。如果CDN域名与网站域名不一致,还可以带来一个额外的好处就是,当用户访问CDN上的静态资源时,不会携带cookie,避免性能消耗

浏览器缓存

使用浏览器缓存

项目优化

http中优化有两个方向:减少请求次数、减少单次请求所花费的时间。这些可以通过webpck来实现资源的压缩与合并。

webpack优化方案:

  • Babel-loader使用exclude来避免转义某些文件,比如说node_modules,或者通过设置cacheDirectory开启缓存将转义结果缓存到文件系统。

  • 使用DllPlugin管理第三方库,将第三方库单独打包到一个文件中,这个文件就是一个依赖库,只有当依赖自身的版本发生更新时才会被重新打包。

    方法:在plugin中对DllPlugin进行配置

  • 使用happypack,将loader由单进程变为多进程,由于webpack是单进程的而我们的CPU是多核的,使用happypack充分利用CPU的优势。

    使用插件的形式引入,在rules和plugin中配置

  • 文件结构可视化:使用文件结构可视化,找出体积过大的原因

  • 利用tree-shaking:删除冗余代码,在编译过程中获取没有被使用的代码,打包的时候去除。

  • 按需加载:一次不加载所有的文件内容,只加载所需的部分。当需要更多内容的时候,再对用到的内容进行加载。

    方法:webpack中的path与路由进行配置,核心是路由中的require.ensure方法,异步方法,组件会被单独打包成一个文件,当路由跳转时,异步方法的回调才会生效。React-router4中的code-splitting实际上也是用require.ensure实现的。

http压缩和Gzip原理

http压缩是指为了缩小http内容,进行重新编码的过程。使用http压缩的话,数据中从服务器发送过来的时候就已经压缩好了,所以浏览器要声明自己所支持的格式,不支持压缩的浏览器将下载未经压缩的数据。常见的压缩有Gzip和Deflate。

Gzip实现压缩的方法很简单:在request headers加上accpt-encoding:gzip

Gzip是高效的,通常压缩后能减少70%的大小,它的原理是从一个文本文件中找到重复的字符串,然后临时替换,从而使文件变小。

一般来说,Gzip是服务器的事情,压缩是在服务器中进行的。我们通过服务器压缩的时间和CPU开销(指的是浏览器解析压缩文件的开销),来换取传输过程时间的减少

页面优化

从页面的加载三阶段(加载、交互、关闭)来看,页面优化也可分为三部分

加载阶段

主要是提高关键资源的加载速度,关键资源是指能够阻塞首次渲染的资源。可以从三个方面来考虑,减少关键资源个数,减少关键资源大小,减少RTT次数(从发送端发送请求到收到接收端的确认的时间),方法具体如下。

  • 减少关键资源个数:可以将js和css改为内联形式、js如果不操作dom,css的话,改为异步加载,async或defer。

  • 减少关键资源大小:压缩css和js,减少注释

  • 减少RTT次数:使用CDN

交互阶段

关键在于加速渲染进程中渲染帧的速度。交互阶段的渲染一般是由

图片优化

雪碧图和base64

雪碧图是指将许多小的图片(如logo),合成在一张图片上,然后利用css背景定位来显示部分图片。这样就可以减少请求次数了。

base64作为雪碧图的补充而存在,base64是一种编码方式,用于传输8bit字节码,用64个字符表示二进制数据。对图片进行base64编码,将结果直接写入html或css中,浏览器就会显示图片而不用进行网络请求。

可以用webpack的url-loader来实现,可以根据图片大小判断是否要进行base64编码。

base64缺点在于转换后的体积变大,所以只能用于小图。并且转换后图片不能合成雪碧图,适用与更新频率很低的图片。

关于图片格式

jpg:有损压缩,体积小,加载快,不支持透明。常用于显示大图,图片质量较好,体积不大

png:无损压缩,体积大,质量高,支持透明。主要用于呈现小logo、颜色简单对比强烈的图片。

svg:矢量图,体积小,不失真,兼容性好。常用于图标。

查看评论