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