打算现在开始在博客里写点东西,也能为自己看过的书学过的知识做一个归纳总结。
这几日拜读了Steve Souders的《高性能网站建设指南这本书》,虽然这本书可能已经有些老了,但薄薄的一个小册子里提出的网站性能优化的准则还是非常有价值的。这些规则都有个共同点,就是用很小的工作就能获得很明显的性能提升,性价比极高。废话不多说了,总结一下书里的几点性能优化规则。
首先有一点需要说明的是书中所写的性能黄金法则:只有10%~20%的响应时间花在了下载HTML文档上,其余的80%~90%时间花在了下载页面的所有组件上。
这也是后面这些性能规则由来的核心。
规则一:减少HTTP请求。这本书的规则顺序是按照其重要性来排名的,减少HTTP请求作为第一个规则,足见其重要性。根据黄金法则,减少组件数量从而减少HTTP请求是最有效的性能优化方式,其中有几项技术值得提一下:
CSS Sprites。应该前端人都比较熟悉了,把图片整合到一个大图里,利用background-position来定位。
data:URL。值得一说把图片变为内联的,减少了图片请求,webpack里图片小于8kb就会转为base64的data:URL。
合并脚本和CSS。
规则二:使用CDN。这个规则不用多说,分发内容使之更靠近终端用户,减少了请求时间。
规则三:添加Expires头。善用缓存,给长久不变的内容组件设置有效期较久的Expires头。
规则四:压缩组件。利用gzip等内容编码对文档或组件进行压缩,通常能将相应数据量减少70%左右。
规则五:将样式表放在顶部。页面在打开工程中逐步呈现,用户会觉得页面快一些,也让用户在等待过程中有一个良好的反馈。把CSS放在底部的话有可能出现白屏现象。
规则六:将脚本放在底部。页面下载脚本时会阻止其他内容下载与呈现,以防止浏览器的重绘重排。所以把脚本放在页面的底部不会阻止页面内容的呈现,而且页面一些可视化组件可以尽早下载而不被阻塞。
规则七:避免使用CSS表达式。CSS表达式会进行频繁的求值,导致了性能低下。
规则八:使用外部JavaScript和CSS。纯粹而言,内联更快一些,因为满足了规则一的减少HTTP请求,但是这个问题上,一定要考虑缓存带来的性能优化,外部文件很有可能被缓存下来,从而提升了性能。
规则九:减少DNS查找。善用DNS缓存,比如持久连接。
规则十:精简JavaScript。移除不必要的字符空格,我们常见的.min.js就是如此。
规则十一:避免重定向。3xx的响应状态码代表着一股重定向的响应。其中URL结尾缺少斜线造成的重定向需要特别注意,不要因为这一点失误损伤性能。
规则十二:删除重复脚本。
规则十三:配置ETag。说起这个不得不说条件请求If-Modified-Since和If-None-Match,都是用来进行缓存再验证。ETag的问题是服务器构造ETag时,尽管两个文件完全一样,但如果处于不同的服务器的话还是会有不同的ETag,增加了HTTP进行请求下载的次数,这对于后台是服务器集群的网站性能损伤很大。
规则十四:使Ajax可缓存。虽然Ajax是异步的,但也不能让等待响应的时间过长。优化准则的话参见上面的性能准则,其中善用缓存依然是我们重点关注的。
书最后用这些准则分析了美国十大网站,发现有效利用这些规则性能有很大的提升空间,我也看了一下自己实习时候项目,发现可优化的地方非常多。以后的开发过程中要谨记这些准则,让自己产品的用户获得更好的体验。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91549.html
摘要:本文将为大家介绍阿里云安全加速传输的基础概念解决方案技术优势和优化实践。和未来将标记为不安全的协议。阿里云提供安全加速方案,仅需开启安全加速模式后上传加速域名证书私钥,实现全网数据加密传输功能。 大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题。本文将为大家介绍阿里云CDN HTTPS安全加速...
摘要:本文将为大家介绍阿里云安全加速传输的基础概念解决方案技术优势和优化实践。和未来将标记为不安全的协议。阿里云提供安全加速方案,仅需开启安全加速模式后上传加速域名证书私钥,实现全网数据加密传输功能。 大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站的安全问题。本文将为大家介绍阿里云CDN HTTPS安全加速...
摘要:虽然如此,但是网站前端性能优化的思路基本没变。为什么前端性能如此重要数据显示只有的最终用户响应时间花在了下载文档上。前端性能优化一味奉行最佳实践有时候反而过而不及,所以针对项目的实际情况来优化才是明智的选择。 前端近几年变化很大,各种工具,库,框架并发。虽然如此,但是网站前端性能优化的思路基本没变。为什么前端性能如此重要?数据显示: 只有 10%~20% 的最终用户响应时间花在了下载...
摘要:为了更加高效的网络层,它需要不仅仅只是扮演套接字管理员的角色。用套接字池来组织套接字,以源来分组套接字,每个套接字池强制限制其连接数和安全约束。协商是一个为计算机网络提供通信安全的加密协议。 原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第十二章...
阅读 2312·2021-11-23 09:51
阅读 3749·2021-11-11 10:57
阅读 1394·2021-10-09 09:43
阅读 2483·2021-09-29 09:35
阅读 2016·2019-08-30 15:54
阅读 1789·2019-08-30 15:44
阅读 3182·2019-08-30 13:20
阅读 1690·2019-08-30 11:19