1 内容:
1.1 最小化http请求
最终用户的80%时间都花在前端,比如下载图片,js,css等。所需减少展示一个页面所需要的http请求是快速展示页面的关键。 一种方式是简化页面设计。在此基础上:
- 1)压缩文件:将所有的script文件压缩为一个单独文件,将所有的css文件压缩为一个单独文件。
- 2)CSS Sprites: 即css位移技术,把所有的背景图片合成一个单独的图片,用 CSS的 background-image 和 background-position 属性来展示需要的图片片段。
- 3)避免内联图片,如:<img src="data:image/gif;base64,**************"/>,这种方式会增大html页面的大小。应该用css或html加载图片,减少http返回本身的大小。
1.2 减少DNS查询
DNS服务一般会花费一定时间查询主机名对应的ip。
可以通过浏览器的DNS缓存减少DNS查询的次数。
一个网页打开的时候,要下载网页中所有的资源,如图片,css,js等。所以减少这些资源的主机名,就可以减少DNS缓存查询次数。但是减少主机名,也就减少了同时下载的资源个数。
最好是2-4个主机名。这个值,是在减少DNS缓存和允许高并发资源下载之间较好的一个折中。
1.3 后加载组件:
一些Javascript代码或者库,比如拖拽或者动画功能,还有一些隐藏内容,和被遮住的图片等,它们可以放到页面初始化完成后再加载。总之,不影响页面展示的资源,都放到页面初始化完之后加载。
1.4 预加载组件:
在一个页面加载完之后,加载一些下一个页面会使用的图片,css,js等,这样,当用户访问下一个页面时,会有很多资源已经在缓存里了。
1.5 减少DOM元素:
DOM元素的增多,影响页面的加载和节点的查找
1.6 将资源分为多个域访问:
浏览器在同一时间访问某个域下的资源数量是有限制的;将资源分为多个域访问,可以最大程度的并行下载资源。
为了防止DNS查找带来的延时,确保不多于4个域。
如动态内容可以放到www.example.org,静态资源可以分别放到static1.example.org和static2.example.org。
2 服务端:
2.1 使用CND:
使用CDN(Content Delivery Network,内容分发网络)分发静态资源,可以让访问者就近得到访问资源。
2.2 静态资源不过期
对于静态内容,如图片,css ,js 等,可以在nginx中设置而一个永不过期的Expires头信息; 如有资源有改变,则修改资源名称或版本号重新加载即可。
2.3 GZIP
开启压缩,使用压缩可以减少HTTP response大小,从而减少response时间。
2.4 在AJAX中使用GET:
使用XMLHttpRequest时,POST请求分两步实现:先发送头信息,然后发送数据。所以最好使用GET,它只发送一个TCP数据包。使用GET时,最大的URL长度在IE中只有2K。所以GET不支持发送超过2k的数据。
2.5 避免空的Image src:
下面的情况会导致浏览器向服务器另发一个请求:
<img src=””/> 或: var img = new Image(); img.src = “”;
3 CSS:
3.1 CSS文件页面顶部:
将css文件放在HEAD里,会使页面看起来加载更快。因为将css放在HEAD中可以让页面逐步呈现; 因为如果先加载了页面,而后又遇到css,页面会被重新绘制。
3.2 避免css表达式:
css表达式从ie5开始支持,到ie8不再推荐。 如: background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" ); 如这里所示,这个表达式接受了一个javascript表达式。 表达式只支持IE浏览器。 表达式的问题在于它计算的的频繁程度,不仅是在页面展示和大小变化的时候,也会在页面滑动时,甚至会在鼠标移过页面时计算。 如果需要,可以用js来设置页面效果,要避免使用css表达式。
3.3 使用LINK,不使用@import
在ie中使用@import,效果是和使用link放在页面底端是一样的。
4 javascript:
4.1 javascript放到页面底端:
页面下载资源时,会从每个页面同时下载2个(IE)或8个(firefox)资源。
如果这些资源属于不同的域,那么同时下载的资源会更多,页面展示也就会更快。
但是当一个javascript资源下载时,浏览器不会在开始下载其他的任何资源,即使是多个域。
4.2 从外部引入javascript或者css:
从外部引入javascript或者css要比写在页面里快。
因为外部文件会缓存,但是写在html文件里的会每次都下载。
4.3 缩小javascript和css文件的大小:
缩小代码中不必要字符可以缩小文件的大小,也就改善了下载时间。如移除注释,空白字符(空格,新行,制表符)。可以用一些工具进行压缩。
4.4 移出重复的javascript
不需要的js文件或代码,移除,较少页面的加载或执行时间。