高性能建站指南
《高性能建站指南》上次读是六年前在大学的时候,昨天下午有空重新读了一遍,因此留下笔记,加上了一些自己的理解
1、减少http请求
图片地图,css sprites,内联图片,合并脚本和样式表
2、使用内容发布网络
cdn,缩短用户和服务器之间的接收距离,降低中央服务器的压力
3、添加expires头
能够在过期时间前运用缓存
expires 定义静态资源的过期日期,缺点是要保持用户的系统时间和服务器的时间一致,
max-age 优先级比expires高,定义还有多长时间过期,因此用户系统时间无不需要和服务器的时间一致
为组件添加长久的expries头
4、压缩组件(css、js)
客户端发送获取资源的request会带上 Accept-Encoding:gzip,deflate,请求的response返回 Content-Encoding:gzip,
主流浏览器都支持解压gzip压缩的文件,业界也主要使用gzip压缩文件,服务器压缩组件会增加服务器负载(细微得可以忽略?)
对应有些浏览器不支持gzip压缩,服务器会告知代理需要获取accept-encoding请求头来决定是否发送压缩的文件,Vary:Accept-Encoding
5、将样式表放在顶部
浏览器逐步呈现,因此尽早加载构建好css Tree能更快构建好RenderTree,减少浏览器白屏时间增强用户体验
@import引用的CSS会等到页面全部被下载完再被加载,不建议使用
使用Link标签将样式表放在head中
6、将脚本放在底部
同步(以script标签)加载脚本会阻塞后续资源加载,并且在浏览器解析js时候,会阻塞renderTree的构建
7、避免CSS表达式
CSS表达式容易导致页面性能开销大,因此要避免用
8、使用外部JavaScript和css
内联的JavaScript和css虽然减少了http请求开销,但是会导致JavaScript和css无法利用浏览器缓存
将JavaScript和css放到外部文件中
9、减少DNS查找
TTL(time-to-alive)告诉客户端对改记录保存多久,然而浏览器一般会忽略该值
开启keep-alive(个人觉得keep-alive主要是通过重用tcp/ip通道减少tcp握手时间,对DNS查找无多大相关影响)
通过使用keep-alive和较少域名来减少DNS查找
10、精简JavaScript(JavaScript、css)
对JavaScript源代码进行精简
11、避免重定向
寻找一种避免重定向方法
12、删除重复脚本
确保脚本只被包含一次
13、配置Etag
Etag即为文件的版本号,当文件超过了过期时间,浏览器会向服务器发起文件请求,若浏览器缓存文件的Etag和服务器一致,
服务器返回304,浏览器则会继续使用本地缓存文件,
不同的服务器对相同的文件的etag定义(inode-size-timestamp)是不同的,浏览器访问不同的服务器会导致相同的文件却无法通过Etag重用缓存
建议配置Etag,只包含大小和时间戳或只有时间戳,或者移除Etag(last-modified头可以提供等价信息),移除Etag可以减小http头大小
14、使用Ajax可缓存
确保ajax请求遵守性能指导,尤其应具有长久的Expires头