参考自谷歌的教程
网站的加载性能能够从减小网络延迟、减小资源数量、减小资源体积和使用缓存 4 个方面来进行优化。css
访问一个网页时,所请求的资源必定要都是有用的,避免无用的资源请求,如:html
1. 多余的`js`文件,`css`文件 2. 多余的图片请求 3. 多余的字体请求
网站用到的资源主要有:前端
js
, css
和 html
;其次,对于 js
文件,html
文件,css
文件,要进行文件最小化处理,去除文字间的空格、换行,进行变量名的替换等等。
这些工做通常都是在前端工程打包时进行的, 如:web
HTMLMinifier
;Webpack
打包时,对 loader 配置minimize
;UglifyJsPlugin
插件;gzip
格式的文件,咱们要作的就是对服务端进行配置。png
图片比 jpge
图片能更好的表现摄影图像,可是对于不少图片来讲,png
格式的图片,转化为 jpeg
格式后,对于图片的清晰度并无特别大的影响,可是体积却能大大减小。\<img\>
标签或标签的背景即便用了大图,其在实际网页中的尺寸也很小,这时使用大图就是形成资源的浪费了。这是能够对图片尺寸进行重设, 好比将1200 x 600 像素的图片改成 600 x 300 像素。下降图片质量
在某些状况下,下降图片的质量并不会形成任何视觉上的差异,却能减小大量的体积。
有不少处理图片质量的软件,如:浏览器
更多参考这里。缓存
http://enviragallery.com/9-be...。服务器
严格来讲,这也算减小请求次数,可是实现方式是彻底不同的。
使用HTTP缓存,是设置适当的缓存策略,从而能够避免浏览器重复地向服务端请求资源。
HTTP缓存主要是服务端设置正确的响应头信息。
缓存分为两种:强缓存 和协商缓存。网络
强缓存是指浏览器直接使用存在本地的资源,而再也不向服务端进行请求。涉及到的响应头有两个: Expires
和 Cache-control
。Expires
是http 1.0
的内容,其内容是服务端设置的一个具体的时间点, 如Expires: Wed, 21 Oct 2015 07:28:00 GMT
, 无需过多了解。Cache-control
是http 1.1
新增的头部,其值为下列指令之一或组合:app
no-cache
:代表浏览器能够对内容进行缓存,可是必须先向服务器确认,资源未改变的状况下,能够直接使用浏览器的缓存。与 no-store
互斥;no-store
: 代表内容不容许缓存,包括浏览器以及中间设备,如代理服务器等,与no-cache
互斥;public
: 代表缓存能够存在于浏览器和中间设备,与 private
互斥;private
:代表缓存只能存在于客户的浏览器中;max-age
: 以秒为单位的时间范围,代表通过多长时间以后,缓存内容将过时。过时以后,浏览器必须从新下载资源。设置强缓存以后,浏览器每次请求就会使用本地缓存的内容或者根据返回的头部信息去浏览器验证。性能
当服务端对资源不设置强缓存时,可使用协商缓存。开启协商缓存的方式有两种:
Last-Modified
与 If-Modified-Since
;Etag
与 If-None-Match
;两组头部信息的名字,都很语义化,下降了理解的难度。
Last-Modified
与 If-Modified-Since
服务端设置 Last-Modified
响应头, 代表资源最后修改的时间,这个值是一个时间点。浏览器请求时,会带上一个头信息 If-Modified-Since
,其值为Last-Modified
的值。 服务器对比资源的上一次修改时间和 If-Modified-Since
所表示的时间,若是未曾改变,就返回304。
Etag
与 If-None-Match
服务端设置 Etag
响应头, 代表资源的的惟一标识字符串,只要资源被修改过,就会从新生成一个Etag
。浏览器请求时,会带上一个头信息 If-None-Match
,其值为Etag
的值。 服务器对比资源当前的Etag
和 If-None-Match
的值,若是一致,就返回304。