网站的划分一般为二:前端和后台。我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,修改密码,为文章发表评论等等。而前端呢?其实应该是属于功能的表现。影响用户访问体验的绝大部分都来自前端页面,本文仅提供一个优化网页性能的大概思路,具体操作网上资料很多。
1.加载时优化
最好的优化是根本不下载资源。所以要尽量减少不必要的资源。
1. 评估所有依赖是否必要,权衡利弊。
2. 依赖的下载路径是否可靠,不可用时候是否会阻碍整个页面。
2.压缩所有可以压缩的资源
1. 代码,全部压缩。
2. 去掉不必要的图片。
3. 多使用css3来代替图片。
4. 使用压缩率更高的图片。特别是gif动图,一些视频格式(H.264或WebM)的体积比gif小很多。
5. 用艺术字字体,不要用图片。
6. 为使用更新浏览器的用户提供更现代的图片格式。
7. 多种分辨率的位图供不同页面大小使用。
8. 要给标签指明宽高,否则会导致reflow。
9. 使用HTTP/2。比如,精灵图是由很多小图片组成的一张大图片,可以减少http请求。但是却难以缓存,修改一个小图片,导致所有小图片缓存失效。HTTP/2,一个链接内可以发起多个请求,便无需使用精灵图。
3.缓存优化
浏览器缓存机制
1. 访问页面,请求各种资源,浏览器检查本地是否有缓存。
2. 如果有,检查资源是否过期。没过期,直接使用缓存。过期了,便向服务器发出请求。
3. 发出的请求中会带上etag和last-modified首部字段。
4. 服务器会通过Etag和last-modified来判断浏览器缓存的资源是否已经不可用。
5. 如果资源仍然有效,便返回304告知浏览器使用缓存。否则返回更新后的资源。
按照这一套逻辑,便可规划好网站的缓存。
如果资源提前过期,如何通知浏览器更新资源?
4.关键渲染路径
浏览器渲染一张网页通过以下步骤。
1. 处理 HTML 标记并构建 DOM 树。
2. 处理 CSS 标记并构建 CSSOM 树。
3. 将 DOM 与 CSSOM 合并成一个渲染树。
4. 根据渲染树来布局,以计算每个节点的几何信息。
5. 将各个节点绘制到屏幕上。
优化关键渲染路径,便是指优化这个渲染过程,让网页尽快呈现出来。
css
CSS文件会阻塞渲染。浏览器构建好DOM树后,必须等待CSSOM树构建完成。
在文档顶部防止外联CSS的标签,让浏览器尽快请求CSS文件。
避免在css文件中使用@import,因为只有包含import的文件被下载编译后,浏览器才会发现并下载import的css。
可以考虑使用内联CSS,无需额外请求,不会阻塞渲染。
js
在CSSOM构建完成前,js不会开始执行。
js也会阻止DOM树构建。除非在 标签上标记async。
5.减少cookie传输
一方面,cookie包含在每次请求和响应中,太大的cookie会严重影响数据传输,因此哪些数据需要写入cookie需要慎重考虑,尽量减少cookie中传输的数据量。另一方面,对于某些静态资源的访问,如CSS、script等,发送cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送cookie,减少cookie传输次数。
6.CDN加速
CDN(contentdistribute network,内容分发网络)的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据,即所谓网络访问第一跳。
由于CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力。
CDN缓存的一般是静态资源,如图片、文件、CSS、script脚本、静态网页等,但是这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。
作者:付晓波
获取更多干货,别忘了关注天成科技哟~
领取专属 10元无门槛券
私享最新 技术干货