天天看点

前端性能优化(performance)

1. 减少 HTTP请求数

减少 HTTP请求数的主要途径包括:

(1). 从设计实现层面简化页面

(2). 合理设置 HTTP缓存

怎样才算合理设置 ?原则很简单,能缓存越多越好,能缓存越久越好。

(3). 资源合并与压缩

尽可能的将外部的脚本、样式进行合并,多个合为一个。另外, CSS、 Javascript、Image 都可以用相应的工具进行压缩,压缩后往往能省下不少空间。

(4). CSS Sprites

合并 CSS图片,减少请求数的又一个好办法。

(5). Inline Images

使用 data: URL scheme的方式将图片嵌入到页面或 CSS中,如果不考虑资源管理上的问题的话,不失为一个好办法。如果是嵌入页面的话换来的是增大了页面的体积,而且无法利用浏览器缓存。使用在 CSS中的图片则更为理想一些。

(6). Lazy Load Images(懒加载)

在图片或其他资源还没有用到时候不要放在第一次请求。当执行了某些方法时候再去请求,比如页面滑动底部。这样至少可以让用户在第一次打开网站达到秒开的效果

2. 将外部脚本置底

浏览器是可以并发请求的,这一特点使得其能够更快的加载资源,然而外链脚本在加载时却会阻塞其他资源,例如在脚本加载完成之前,它后面的图片、样式以及其他脚本都处于阻塞状态,直到脚本加载完成后才会开始加载。如果将脚本放在比较靠前的位置,则会影响整个页面的加载速度从而影响用户体验。解决这一问题的方法有很多,而最简单可依赖的方法就是将脚本尽可能的往后挪,减少对并发下载的影响。

3. 异步执行 inline脚本

inline脚本对性能的影响与外部脚本相比,是有过之而无不及。首页,与外部脚本一样, inline脚本在执行的时候一样会阻塞并发请求,除此之外,由于浏览器在页面处理方面是单线程的,当 inline脚本在页面渲染之前执行时,页面的渲染工作则会被推迟。简而言之, inline脚本在执行的时候,页面处于空白状态。鉴于以上两点原因,建议将执行时间较长的 inline脚本异步执行,异步的方式有很多种,例如使用 script元素的defer 属性(存在兼容性问题和其他一些问题,例如不能使用 document.write)、使用setTimeout ,此外,在HTML5中引入了 Web Workers的机制,恰恰可以解决此类问题。

4. 将 CSS放在 HEAD中

如果将 CSS放在其他地方比如 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕。除此之外,有些浏览器会在 CSS下载完成后才开始渲染页面,如果 CSS放在靠下的位置则会导致浏览器将渲染时间推迟。

5. 减少不必要的 HTTP跳转

对于以目录形式访问的 HTTP链接,很多人都会忽略链接最后是否带 ’/’,假如你的服务器对此是区别对待的话,那么你也需要注意,这其中很可能隐藏了 301跳转,增加了多余请求。具体参见下图,其中第一个链接是以无 ’/'结尾的方式访问的,于是服务器有了一次跳转。

6. 避免重复的资源请求

这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中请求了同样的资源时,会导致资源的重复请求

7.执行性能(代码习惯)

1.不用的东西删除

2.尽量不用全局变量,耗资源、冲突

3.能用系统的就不要自己写了

4.尽量使用正则去操作字符串

DOM操作是昂贵的,最耗性能,尽量减少操作

DOM操作:oDiv.style.left=oDiv.offsetLeft+10+‘px’;

不需要的定时器,及时清除。

变量:

全局:耗性能

局部:几乎不耗

局部变量>全局变量

属性:window.a=12;

全局变量<属性<局部变量

*属性越多,性能越低

继续阅读