《高性能网站建设指南》精缩
本书成书于08年,是十几年前的事情,所以难免会有一些理论跟不上时代,但是很多原理性的问题,仍然值得我们去学习。
笔者用几小时的时间,通读了本书,并进行了内容的精缩,希望能够帮助到大家~
一、减少http请求
图片地图、雪碧图、合并js/css文件、内联图片
二、使用CDN
没什么好说的~
三、添加Expires头
主要目的是进行http缓存,更好的方案是使用cache-control
Expires与cache-control的区别:
当服务器与客户端的时区差距很大时,Expires设置的过期日期会产生很大的误差;设置Expires过期日期的资源到期之后,服务器需要额外的逻辑来设置新的过期日期;cache-control只有http1.1才支持。
四、压缩资源
主要是使用 Accept-Encodeing: gzip 来对请求资源进行压缩
某些情况需要使用Vary字段
五、将css放在顶部
涉及到浏览器解析html的原理,css文件会阻塞DOM渲染和js执行,所以应该放在顶部
六、将js放在底部
涉及到浏览器解析html的原理,js文件会阻塞DOM树解析,所以应该放在底部
七、避免css表达式
书中提到的表达式多为IE专属,而今IE已不是浏览器的主流,所以这部分可以忽略
八、使用外部js和css
为了使得浏览器能够缓存这些js、css
九、减少DNS查找
通过使用keep-alive和较少的域名来减少DNS查找
十、对js源代码进行精简
本质就是压缩混淆js文件,都9102年了,这已经是前端工程化的必备部分,所以可以忽略
十一、避免重定向
重定向显而易见会增加加载时间
十二、移除重复脚本
前端工程化可以避免这一点
十三、配置ETag
ETag的问题在于,当客户端请求的内容来自于一个服务器集群的时候,尽管文件内容是相同的,不同的服务器仍然会产生不同的ETag标识,这就会导致协商缓存失效。而且,If-None-Match 比 If-modified-Since 优先级更高,所以ETag还会影响其他协商缓存的命中。
十四、使Ajax可缓存
为Ajax请求设置http缓存。主要手段是添加一个长期的Expires头。