网页瀑布图
用chrome打开网页,按住option+command+i(windows是F12),打开开发者工具看network。造成加载很慢的原因很多,但是你只需要知道一些就可以了,下面是一些常见的问题以及识别方法。
1、后端的原因
第一个请求很长,明显比其他请求放到一起不和谐。一般网页第一个请求是动态请求的概率比较大,如果这个请求特别耗时,一般不是前端的责任,因为html都没加载完。建议优化php、优化数据库等等一切可以优化的东西。
2、请求太多
数一下瀑布图总共有多少行,onload之前如果有几百行,那么请求就太多了。css,js合并,设置精灵图标,使用字体图标,有些不重要的东西可以放到onload之后加载,网页发请求数当然是越少越好。
3、某个请求太大
某个请求比其他请求的时间大出一个数量级。这种情况一般是因为某一个资源太慢了,导致网页整体变慢。资源慢的原因,概率比较大的几个可能是:a)资源在第三方站点上,他们很慢;b)这个资源太大了;c)这个资源使用的域名有问题。
4、网络问题
仔细看一下一个单独的http请求,他们会分为好几段,分别是域名解析、建立连接、发送请求、等待响应和接收数据几个阶段。理论上域名解析和建立连接应该占用的时间很小才对,主要的时间应该用在后面几个阶段上。上图中,浅灰色和灰色分别代表域名解析和建立连接,可以看出这两个请求中花费在网络层上的时间太长了,超过总时间的一半还要多。网络层时间过长除了可能和底层网络有关之外,还可能和站点的服务端性能有关。当然,如果这种情况发生在向第三方站点发送的请求上(实际上也经常发生),建议取消或者更换某些站点功能从而避免这样的请求。
5、接收数据时间过长
上面说了,http请求的大部分时间应该花在后面几个阶段,比如等待响应和接收数据。但是,如果接收数据的时间太长了,长到数百毫秒甚至以秒计算的时候,那也是有问题的。这种情况一般是因为下载的内容太重了,例如大图片、大脚本等。这类问题可以使用GZIP压缩、图片压缩或者JS/CSS的minify等手段来解决。
6、js阻塞请求
图中两个连续的请求之间出现了一个很大的空隙,为啥会出现这个空隙呢?可能是因为js性能有问题,解析执行js花了很长时间,导致这段时间的资源加载都被阻塞住了。
7、如果以上都没有
可以一一翻看每个http请求,仔细研究每个请求头响应头,看看是不是没有设置缓存,图片优化的不够好之类的。