减少dns查询,将要加载的东西,例如css、js等尽量放在一个域名下,减少dns查询次数
TCP连接复用keep-alived
http 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;http 1.1中默认启用Keep-Alive,如果加入"Connection: close ",才关闭。目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。
http2.0有多路复用。
HTTP请求
减少cookie体积,不滥用cookie。
ETag等缓存减少下载资源,但仍会发送请求,文件没有被改动过,则返回304。
ETag通过生成一段字符串(MD5等)验证请求资源是否改变。
Last-Modified客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头,询问该时间之后文件是否有被修改过:如果服务器端的资源没有变化,则自动返回 HTTP 304(Not Changed.)状态码,内容为空,这样就节省了传输数据量。
使用cache-control,时间未到期不会发送请求(设置max-control)'setHeader('Cache-Control','max-age=xx')。
浏览器会同时发送多个请求,每个域名请求有数量限制(增请求加域名数量,与dns矛盾)。当文件很少时减少域名,当文件很多时,适当增加域名。
使用gzip压缩 请求端加上content-encoding:gzip(消耗用户cpu,文件越大越需要gzip)。
<!DOCTYPE html>一定要写,不能写错。
尽量减少标签。
动态dns 转到相应的CDN(内容分布网络)。
css放head js放</body>前
css下载完后才会开始渲染,放在后面也会阻塞渲染,放在上面早一些加载css。
一般js不会影响完整的页面,放在后面尽早显示页面,减少空白页面的时间。放在后面可以获取之前的节点。