前端性能优化,关于web端的优化
分类:面向对象

前端性能优化完全是一个技术话题,但是对于项目的用户体验有非常大的影响,如果你的网站打开要等待三五秒或者等到浏览器提示无法连接,那网站哪来的流量,哪来的品牌影响和用户忠诚度,挣钱就算了。

Web前端优化最佳实践及工具集锦
发表于2013-09-23 19:47| 34107次阅读| 来源Googe & Yahoo| 124 条评论| 作者王果 编译
Web优化
Google
雅虎
PageSpeed
YSlow
摘要:前端的性能对于Web应用的用户体验来说非常重要。不要以为你的Web应用的性能已经足够好了,其实还会有很多可以提升的地方。本文将介绍Google和雅虎关于前端优化的最佳实践以及工具,你可以逐一检验你的Web应用。
前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快、对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升。下图显示了页面加载速度对于用户体验的影响。

前端性能优化——桌面浏览器前端优化策略

2018/01/14 · 基础技术 · 浏览器

原文出处: ouven   

  通过性能测速和分析,我们基本可以获取收集到页面上大部分的具体性能数据,如何根据这些数据采取适当的方法和手段对当前的页面进行优化呢?目前来看,前端优化的策略很多,如YSlow(YSlow是Yahoo发布的一款Firefox插件,可以对网站的页面性能进行分析,提出对该页面性能优化的建议)原则等,总结起来主要包括网络加载类、页面渲染类、CSS优化类、JavaScript执行类、缓存类、图片类、架构协议类等几类,下面逐一介绍。

3s,作为判断一个用户忍受你网站速度的限度,如果超过3s,用户已经对这个网站产生了负面的抵触心理。
前端性能优化和web标准有什么关系,接着第一篇 悟道web标准——统一思想,遵循标准 ,这是对你遵循web标准的一个补偿或者是对标准的一个认可。

你的Web页面的速度是否已经足够快了?其实可能还有很多可以提升的地方。Google和雅虎也提出了一些Web应用的前端优化建议,并发布了一些工具,你可以逐一检验你的Web应用,以便达到更高的性能。
这些优化不仅仅可以给用户提供更好的体验,从开发者角度来说,进行优化还可以减少页面的请求数、降低请求所占的带宽、减少资源的浪费。
下面来看看Google和雅虎提供的Web页面优化最佳实践。
一、Google的Web优化最佳实践

一、 网络加载类

1.减少HTTP资源请求次数

在前端页面中,通常建议尽可能合并静态资源图片、JavaScript或CSS代码,减少页面请求数和资源请求消耗,这样可以缩短页面首次访问的用户等待时间。通过构建工具合并雪碧图、CSS、JavaScript文件等都是为了减少HTTP资源请求次数。另外也要尽量避免重复的资源,防止增加多余请求。

2.减小HTTP请求大小

除了减少HTTP资源请求次数,也要尽量减小每个HTTP请求的大小。如减少没必要的图片、JavaScript、CSS及HTML代码,对文件进行压缩优化,或者使用gzip压缩传输内容等都可以用来减小文件大小,缩短网络传输等待时延。前面我们使用构建工具来压缩静态图片资源以及移除代码中的注释并压缩,目的都是为了减小HTTP请求的大小。

3.将CSS或JavaScript放到外部文件中,避免使用标签直接引入

在HTML文件中引用外部资源可以有效利用浏览器的静态资源缓存,但有时候在移动端页面CSS或JavaScript比较简单的情况下为了减少请求,也会将CSS或JavaScript直接写到HTML里面,具体要根据CSS或JavaScript文件的大小和业务的场景来分析。如果CSS或JavaScript文件内容较多,业务逻辑较复杂,建议放到外部文件引入。

JavaScript

<link rel="stylesheet" href="//cdn.domain.com/path/main.css"> <script src="//cdn.domain.com/path/main.js"></script>

1
2
<link rel="stylesheet" href="//cdn.domain.com/path/main.css">
<script src="//cdn.domain.com/path/main.js"></script>

4.避免页面中空的href和src

标签的href属性为空,或&lt;script&gt;、<img>、&lt;iframe&gt;标签的src属性为空时,浏览器在渲染的过程中仍会将href属性或src属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程,而且最终加载到的内容是无效的,因此要尽量避免。

JavaScript

<!-- 不推荐 --> <img src="" alt="photo"> <a href="">点击链接</a>

1
2
3
<!-- 不推荐 -->
<img src="" alt="photo">
<a href="">点击链接</a>

5.为HTML指定Cache-Control或Expires

为HTML内容设置Cache-Control 或Expires可以将HTML内容缓存起来,避免频繁向服务器端发送请求。前面讲到,在页面Cache-Control或Expires头部有效时,浏览器将直接从缓存中读取内容,不向服务器端发送请求。

<meta http-equiv="Cache-Control" content="max-age=7200"/> <meta http-equiv="Expires" content="Mon, 20 Jul 2016 23:00:00 GMT"/>

1
2
<meta http-equiv="Cache-Control" content="max-age=7200"/>
<meta http-equiv="Expires" content="Mon, 20 Jul 2016 23:00:00 GMT"/>

6.合理设置Etag和Last-Modified

合理设置Etag和Last-Modified使用浏览器缓存,对于未修改的文件,静态资源服务器会向浏览器端返回304,让浏览器从缓存中读取文件,减少Web资源下载的带宽消耗并降低服务器负载。

<meta http-equiv="last-modified" content="Mon, 03 Oct 2016 17:45:57 GMT"/>

1
<meta http-equiv="last-modified" content="Mon, 03 Oct 2016 17:45:57 GMT"/>

7. 减少页面重定向

页面每次重定向都会延长页面内容返回的等待延时,一次重定向大约需要600毫秒的时间开销,为了保证用户尽快看到页面内容,要尽量避免页面重定向。

8.使用静态资源分域存放来增加下载并行数

浏览器在同一时刻向同一个域名请求文件的并行下载数是有限的,因此可以利用多个域名的主机来存放不同的静态资源,增大页面加载时资源的并行下载数,缩短页面资源加载的时间。通常根据多个域名来分别存储JavaScript、CSS和图片文件。

<link rel="stylesheet" href="//cdn1.domain.com/path/main.css"/> <script src="//cdn2.domain.com/path/main.js"/>

1
2
<link rel="stylesheet" href="//cdn1.domain.com/path/main.css"/>
<script src="//cdn2.domain.com/path/main.js"/>

9.使用静态资源CDN来存储文件

如果条件允许,可以利用CDN网络加快同一个地理区域内重复静态资源文件的响应下载速度,缩短资源请求时间。

10.使用CDN Combo下载传输内容

CDN Combo是在CDN服务器端将多个文件请求打包成一个文件的形式来返回的技术,这样可以实现HTTP连接传输的一次性复用,减少浏览器的HTTP请求数,加快资源下载速度。例如同一个域名CDN服务器上的a.js,b.js,c.js就可以按如下方式在一个请求中下载。

<script src="//cdn.domain.com/path/a.js,b.js,c.js"/>

1
<script src="//cdn.domain.com/path/a.js,b.js,c.js"/>

11.使用可缓存的AJAX

对于返回内容相同的请求,没必要每次都直接从服务端拉取,合理使用AJAX缓存能加快AJAX响应速度并减轻服务器压力。

$.ajax({ url: url, type: 'get', cache: true, // 推荐使用缓存 data: {} success(){ // ... }, error(){ // ... } });

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    url: url,
    type: 'get',
    cache: true,    // 推荐使用缓存
    data: {}
    success(){
        // ...
    },
    error(){
        // ...
    }
});
 

12.使用GET来完成AJAX请求

使用XMLHttpRequest时,浏览器中的POST方法发送请求首先发送文件头,然后发送HTTP正文数据。而使用GET时只发送头部,所以在拉取服务端数据时使用GET请求效率更高。

$.ajax({ url: url, type: 'get', // 推荐使用get完成请求 data: {} success(){ // ... }, error(){ // ... } });

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
    url: url,
    type: 'get',   // 推荐使用get完成请求
    data: {}
    success(){
        // ...
    },
    error(){
        // ...
    }
});
 

13.减少Cookie的大小并进行Cookie隔离

HTTP请求通常默认带上浏览器端的Cookie一起发送给服务器,所以在非必要的情况下,要尽量减少Cookie来减小HTTP请求的大小。对于静态资源,尽量使用不同的域名来存放,因为Cookie默认是不能跨域的,这样就做到了不同域名下静态资源请求的Cookie隔离。

14.缩小favicon.ico并缓存

有利于favicon.ico的重复加载,因为一般一个Web应用的favicon.ico是很少改变的。

15.推荐使用异步JavaScript资源

异步的JavaScript资源不会阻塞文档解析,所以允许在浏览器中优先渲染页面,延后加载脚本执行。例如JavaScript的引用可以如下设置,也可以使用模块化加载机制来实现。

<script src="main.js" defer="defer"/> <script src="main.js" async=""/>

1
2
<script src="main.js" defer="defer"/>
<script src="main.js" async=""/>

使用async时,加载和渲染后续文档元素的过程和main.js的加载与执行是并行的。使用defer时,加载后续文档元素的过程和main.js的加载是并行的,但是main.js的执行要在页面所有元素解析完成之后才开始执行。

16.消除阻塞渲染的CSS及JavaScript

对于页面中加载时间过长的CSS或JavaScript文件,需要进行合理拆分或延后加载,保证关键路径的资源能快速加载完成。

17.避免使用CSS import引用加载CSS

CSS中的@import可以从另一个样式文件中引入样式,但应该避免这种用法,因为这样会增加CSS资源加载的关键路径长度,带有@import的CSS样式需要在CSS文件串行解析到@import时才会加载另外的CSS文件,大大延后CSS渲染完成的时间。

JavaScript

<!-- 不推荐 --> <style> @import "path/main.css"; </style> <!-- 推荐 --> <link rel="stylesheet" href="//cdn1.domain.com/path/main.css">

1
2
3
4
5
6
7
<!-- 不推荐 -->
<style>
@import "path/main.css";
</style>
 
<!-- 推荐 -->
<link rel="stylesheet" href="//cdn1.domain.com/path/main.css">

引用:

  1. 避免坏请求
    有时页面中的HTML或CSS会向服务器请求一个不存在的资源,比如图片或HTML文件,这会造成浏览器与服务器之间过多的往返请求,类似于:

二、 页面渲染类

1.把CSS资源引用放到HTML文件顶部

一般推荐将所有CSS资源尽早指定在HTML文档``中,这样浏览器可以优先下载CSS并尽早完成页面渲染。

2.JavaScript资源引用放到HTML文件底部

JavaScript资源放到HTML文档底部可以防止JavaScript的加载和解析执行对页面渲染造成阻塞。由于JavaScript资源默认是解析阻塞的,除非被标记为异步或者通过其他的异步方式加载,否则会阻塞HTML DOM解析和CSS渲染的过程。

3.不要在HTML中直接缩放图片

在HTML中直接缩放图片会导致页面内容的重排重绘,此时可能会使页面中的其他操作产生卡顿,因此要尽量减少在页面中直接进行图片缩放。

4.减少DOM元素数量和深度

HTML中标签元素越多,标签的层级越深,浏览器解析DOM并绘制到浏览器中所花的时间就越长,所以应尽可能保持DOM元素简洁和层级较少。

JavaScript

<!-- 不推荐 --> <div> <span> <a href="javascript: void(0);"> <img src="./path/photo.jpg" alt="图片"> </a> </span> </div> <!-- 推荐 --> <img src="./path/photo.jpg" alt="图片">

1
2
3
4
5
6
7
8
9
10
11
<!-- 不推荐 -->
<div>
    <span>
        <a href="javascript: void(0);">
            <img src="./path/photo.jpg" alt="图片">
        </a>
    </span>
</div>
 
<!-- 推荐 -->
<img src="./path/photo.jpg" alt="图片">

5.尽量避免使用<table>``、<iframe>等慢元素
内容的渲染是将table的DOM渲染树全部生成完并一次性绘制到页面上的,所以在长表格渲染时很耗性能,应该尽量避免使用它,可以考虑使用列表元素代替。尽量使用异步的方式动态添加iframe,因为iframe内资源的下载进程会阻塞父页面静态资源的下载与CSS及HTML DOM的解析。

6.避免运行耗时的JavaScript

长时间运行的JavaScript会阻塞浏览器构建DOM树、DOM渲染树、渲染页面。所以,任何与页面初次渲染无关的逻辑功能都应该延迟加载执行,这和JavaScript资源的异步加载思路是一致的。

7.避免使用CSS表达式或CSS滤镜

CSS表达式或CSS滤镜的解析渲染速度是比较慢的,在有其他解决方案的情况下应该尽量避免使用。``

JavaScript

// 不推荐 .opacity{ filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50); }

1
2
3
4
// 不推荐
.opacity{
    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
}

 

1 赞 收藏 评论

图片 1

前端性能优化了解yahoo性能优化N条的同学应该不会陌生,安装一个YSlow评分并对照着优化就可以了,但是有没有想过为什么要这么做就可以提升速度,这些与Web标准有没有某种关联或者因果呢。

浏览器:“我需要这个图像。”
服务器:“我没有这个图像。”
浏览器:“你确定吗?这个文档说你有。”
服务器:“真的没有。”

我把这些个条目分成三类,服务端运算优化,传输优化,客户端运算优化:

如此一来,会降低页面的加载速度。因此,检查页面中的坏链接非常有必要,你可以通过 Google的PageSpeed工具 来检测,找到问题后,补充相应的资源文件或者修改资源的链接地址即可。

第一类,服务器端优化

  1. 避免CSS @import
    使用 @import方法引用CSS文件可以能会带来一些影响页面加载速度的问题,比如导致文件按顺序加载(一个加载完后才会加载另一个),而无法并行加载。
    你可以使用 CSS delivery工具 来检测页面代码中是否存在@import方法。比如,如果检测结果中存在

服务器端就是对你的网站的动态语言的执行(asp,php),数据库查询,存储等速度,总的来说就是输入/输出的运算。这些跟前端没关系,但是影响 着前端。YSlow里面没有,鬼知道你网站的服务器性能如何,看不出来,就自行优化服务器性能,数据库性能,多买点服务器扩容。
yslow有一条尽早刷新 Buffer (Flush the Buffer Early),貌似是不等html完成生成就传输。
提高域名的DNS解析速度。减少DNS的解析个数。这个不好归类,暂时放到这里吧。

[css] view plaincopy

第二类,传输优化

@import url("style.css")

这类是大头,很烦,首先是字节,字节越小越好,怎么能小下来,最有效的方式就是google的方案,把首页做的极其精简,图片,html,静态文件都很小,再就是缓存,把文件放到本地缓存区读取。还有http请求数,减少文件传输中的排队等待。

则建议你使用下面的代码来替代。

字节优化

[html] view plaincopy

  1. 减少冗余html,结构化,语义化的html来实现,行为,表现,结构分离,独立的html文件将变得很小。
  2. 压缩文本文件,css,html,js去掉注释、空格、换行等。
  3. 降低图片字节,选择合适的图片类型,png-8是一个好东西,再用工具将图片进行压缩去掉,比如png-8的压缩工具。用合适的图片尺寸,不要把大图控制一下宽高就用上了。
  4. gzip压缩一下,减小服务器端传输到客户端时候的字节。
  5. flash文件和flash+xml的动态flash也减小字节

<link rel="style.css" href="style.css" type="text/css">

缓存
服务器端配置一下,提高缓存的命中率和把不经常修改的文件缓存了。
Add Expires headers、Etags、ajax使用get方式便于缓存。
把能分离出来的css,js分离成外部文件便于缓存。
使flash和xml文件可缓存。
打通不同运营商的限制
CDN提高不同类型运营商的网络传输速度,电信,网通,铁通,教育网统统搞定。

  1. 避免使用document.write
    在JavaScript中,可以使用 document.write在网页上显示内容或调用外部资源,而通过此方法,浏览器必须采取一些多余的步骤——下载资源、读取资源、运行JavaScript来了解需要做什么,调用其他资源时需要重新再执行一次这个过程。由于浏览器之前不知道要显示什么,所以会降低页面加载的速度。
    要知道,任何能够被document.write调用的资源,都可以通过HTML来调用,这样速度会更快。检查你的页面代码,如果存在类似于下面的代码:

请求数
减少文件请求数,能合并到一起的合并一下,css,js,图片等,减小排队等待和服务器端开销。
分域提高同时加载数,优化排队等待。
避免404无效请求数。
避免重定向。

[js] view plaincopy

延迟加载和预载
把暂时不用的文件等主体页面加载完了再加载,把用户稍后要看浏览的内容预先加载进来,相册浏览就是很好的例子,先用小图片放大再把大图展示出来,看本张图片时把下一张预载进来等等。

document.write('<script src="another.js"></script>');

第三类:客户端优化

建议修改为:

  1. 讨厌的IE的滤镜和CSS expression_rs少用,小心把浏览器搞挂,CUP 100%死机。
  2. CSS放到前面,js能放到后面的放在代码后面。将页面尽早展示给用户。
  3. 减少iframe的使用,避免CPU扛不住。
  4. 减少DOM个数,减低浏览器解析压力。
  5. 使用 <link> 而不是@importChoose <link> over @import,在 IE 中 @import 指令等同于把 link 标记写在 HTML 的底部。而这与第一条相违背。
  6. 提高js的执行效率,话题太大不提了
  7. 缩小 Cookie,针对 Web 组件使用域名无关性的 Cookie (Use Cookie-free Domains for Components)
  8. 还有小图片的repeat背景会提高浏览器的CPU占用。
  9. 合理的DOM排序,把重要的内容代码前置,优先加载。

[html] view plaincopy

再就是些没对号入座的雅虎性能优化的条目。至此可以检验到页面工程师不是盖的,需要对代码、文件,http协议,缓存,服务器等精准的学习和控制,达到提供用户最最基本的体验——访问速度的体验。

<script src="another.js"></script>

Web标准的分离思想和结构化语义化html促成了以上很多条的实施,这是美工时代所不能比拟的。

  1. 合并多个外部CSS文件
    在网站中每使用一个CSS文件,都会让你的页面加载速度慢一点点。如果你有一个以上的CSS文件,你应该将它们合并为一个文件。
    你可以通过 CSS delivery工具 来检测页面代码中的CSS文件,然后通过复制粘贴的方式将它们合并为一个。合并后记得修改页面中的引用代码,并删除旧的引用代码。

  2. 合并多个外部JavaScript文件
    大部分情况下,网站往往会包含若干个 JavaScript文件,但并不需要将这些文件都独立出来,其中有些是可以合并为一个文件的。
    你可以通过 resource check工具 来检测页面中所引用的JavaScript文件数,然后可以通过复制粘贴的方式将多个文件合并为一个。

  3. 通过CSS sprites来整合图像
    如果页面中有6个小图像,那么浏览器在显示时会分别下载。你可以通过CSS sprites将这些图像合并成1个,可以减少页面加载所需的时间。
    CSS sprites需要有两个步骤:整合图像、定位图像。比如你可以通过下面的代码来分别定位下面图像中的上下两部分。

[css] view plaincopy

.megaphone {width:50px; height:50px; background:url(images/sprite.png) 0 0px;}
.smile {width:50px; height:50px; background:url(images/sprite.png) 0 -50px;}

  1. 延迟JavaScript的加载
    浏览器在执行JavaScript代码时会停止处理页面,当页面中有很多JavaScript文件或代码要加载时,将导致严重的延迟。尽管可以使用defer、异步或将JavaScript代码放到页面底部来延迟JavaScript的加载,但这些都不是一个好的解决方案。
    下面是Google的建议。

[js] view plaincopy

<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>

这段代码的意思是等待页面加载完成后,然后再加载外部的“defer.js”文件。下面是测试结果。

  1. 启用压缩/ GZIP
    使用gzip对HTML和CSS文件进行压缩,通常可以节省大约50%到70%的大小,这样加载页面只需要更少的带宽和更少的时间。
    你可以通过这个 Gzip压缩工具 来检测页面是否已经经过Gzip压缩。
  2. 启用Keep-Alive
    HTTP协议采用“请求-应答”模式,当使用普通模式(非KeepAlive模式)时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用 Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
    在HTTP 1.0中Keep-Alive默认是关闭的,需要在HTTP头中加入“Connection: Keep-Alive”,才能启用Keep-Alive;在 HTTP1.1中Keep-Alive默认启用,加入“Connection: close”可关闭。目前大部分浏览器都是用HTTP 1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看Web服务器的设置情况。
  3. 将小的CSS和JavaScript代码内嵌到HTML中
    如果你的CSS代码比较小,可以将这部分代码放到HTML文件中,而不是一个外部CSS文件,这样可以减少页面加载所需的文件数,从而加快页面的加载。同样,也可以将小的 JavaScript脚本代码内嵌到HTML文件中。

[html] view plaincopy

<style type="text/css">

</style>

<script type="text/javascript">

</script>

  1. 利用浏览器缓存
    在显示页面时,浏览器需要加载logo、CSS文件和其他一些资源。浏览器缓存所做的工作就是“记住”已经加载的资源,让页面的加载速度更快。
  2. 压缩CSS代码
    不管你在页面中如何使用CSS,CSS文件都是越小越好,这会帮助你提升网页的加载速度。你可以通过 Minify CSS工具 来压缩你的CSS代码。
    压缩前:

[css] view plaincopy

body
{
background-color:#d0e4fe;
}
h1
{
color:orange;
text-align:center;
}

压缩后:

[css] view plaincopy

body {background-color:#d0e4fe;}
h1 {color:orange;text-align:center;}

  1. 尽量减少DNS查询次数
    当浏览器与Web服务器建立连接时,它需要进行DNS解析,将域名解析为IP地址。然而,一旦客户端需要执行DNS lookup时,等待时间将会取决于域名服务器的有效响应的速度。
    虽然所有的ISP的DNS服务器都能缓存域名和IP地址映射表,但如果缓存的DNS记录过期了而需要更新,则可能需要通过遍历多个DNS节点,有时候需要通过全球范围内来找到可信任的域名服务器。一旦域名服务器工作繁忙,请求解析时就需要排队,则进一步延迟等待时间。
    因此,减少DNS的查询次数非常重要,页面加载时就尽量避免额外耗时。为了减少DNS查询次数,最好的解决方法就是在页面中减少不同的域名请求的机会。
    你可以通过 request checker工具 来检测页面中存在多少请求,然后进行优化。
  2. 尽量减少重定向
    有时为了特定需求,需要在网页中使用重定向。重定向的意思是,用户的原始请求(例如请求A)被重定向到其他的请求(例如请求B)。
    但是这会造成网站性能和速度下降,因为浏览器访问网址是一连串的过程,如果访问到一半而跳到新地址,就会重复发起一连串的过程,这将浪费很多的时间。所以我们要尽量避免重定向,Google建议:

不要链接到一个包含重定向的页面
不要请求包含重定向的资源

  1. 优化样式表和脚本的顺序
    Style标签和样式表调用代码应该放置在JavaScript代码的前面,这样可以使页面的加载速度加快。

[html] view plaincopy

<head>
<meta name=description content="description"/>
<title>title</title>
<style>
page specific css code goes here
</style>
<script type="text/javascript">
javascript code goes here
</script>
</head>

  1. 避免JavaScripts阻塞渲染
    浏览器在遇到一个引入外部JS文件的<script>标签时,会停下所有工作来下载并解析执行它,在这个过程中,页面渲染和用户交互完全被阻塞了。这时页面加载就会停止。
    谷歌 建议 删除干扰页面中第一屏内容加载的JavaScript,第一屏是指用户在屏幕中最初看到的页面,无论是桌面浏览器、手机,还是平板电脑。

  2. 缩小原始图像
    如果无需在页面中显示较大的图像,那么就建议将图像的实际大小缩小为显示的大小,这样可以减少下载图像所需的时间。

  3. 指定图像尺寸
    当浏览器加载页面的HTML代码时,有时候需要在图片下载完成前就对页面布局进行定位。如果HTML里的图片没有指定尺寸(宽和高),或者代码描述的尺寸与实际图片的尺寸不符时,浏览器则要在图片下载完成后再“回溯”该图片并重新显示,这将消耗额外的时间)。
    所以,最好为页面中的每一张图片都指定尺寸,不管是在HTML里的<img>标签中,还是在CSS中。
    更多信息: https://developers.google.com/speed/docs/insights/rules
    二、雅虎的Web优化最佳实践

  4. 内容优化

尽量减少HTTP请求:常见方法包括合并多个CSS文件和JavaScript文件,利用CSS Sprites整合图像,Image map(图像中不同的区域设置不同的链接),内联图象(使用 data: URL scheme 在实际的页面嵌入图像数据)等。
减少DNS查找
避免重定向
使Ajax可缓存
延迟加载组件:考虑哪些内容是页面呈现时所必需首先加载的、哪些内容和结构可以稍后再加载,根据这个优先级进行设定。
预加载组件:预加载是在浏览器空闲时请求将来可能会用到的页面内容(如图像、样式表和脚本)。当用户要访问下一个页面时,页面中的内容大部分已经加载到缓存中了,因此可以大大改善访问速度。
减少DOM元素数量:页面中存在大量DOM 元素,会导致JavaScript遍历DOM的效率变慢。
根据域名划分页面内容:把页面内容划分成若干部分可以使你最大限度地实现平行下载。但要确保你使用的域名数量在2个到4个之间(否则与第2条冲突)。
最小化iframe的数量:iframes 提供了一个简单的方式把一个网站的内容嵌入到另一个网站中。但其创建速度比其他包括JavaScript和CSS的DOM元素的创建慢了1-2个数量级。
避免404:HTTP请求时间消耗是很大的,因此使用HTTP请求来获得一个没有用处的响应(例如404没有找到页面)是完全没有必要的,它只会降低用户体验而不会有一点好处。

  1. 服务器优化

使用内容分发网络(CDN):把你的网站内容分散到多个、处于不同地域位置的服务器上可以加快下载速度。
添加Expires或Cache-Control信息头:对于静态内容,可设置文件头过期时间Expires的值为“Never expire(永不过期)”;对于动态内容,可使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求。
Gzip压缩
设置ETag:ETags(Entity tags,实体标签)是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制。
提前刷新缓冲区:当用户请求一个页面时,服务器会花费200到500毫秒用于后台组织HTML文件。在这期间,浏览器会一直空闲等待数据返回。在PHP中,可以使用flush()方法,它允许你把已经编译的好的部分HTML响应文件先发送给浏览器,这时浏览器就会可以下载文件中的内容(脚本等)而后台同时处理剩余的HTML页面。
对Ajax请求使用GET方法:当使用XMLHttpRequest时,浏览器中的POST方法会首先发送文件头,然后才发送数据。因此使用GET最为恰当。
避免空的图像src

  1. Cookie优化

减小cookie大小:去除不必要的coockie,并使coockie体积尽量小以减少对用户响应的影响
针对Web组件使用域名无关的Cookie:对静态组件的Cookie读取是一种浪费,使用另一个无Cookie的域名来存放静态组件是一个好方法,或者也可以在Cookie中只存放带www的域名。

  1. CSS优化

将CSS代码放在HTML页面的顶部
避免使用CSS表达式:CSS表达式在执行时候的运算量非常大,会对页面性能产生大的影响
使用<link>来代替@import
避免使用Filters:IE独有属性AlphaImageLoader用于修正IE 7以下版本中PNG图片的半透明效果,但它的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。

  1. JavaScript优化

将JavaScript脚本放在页面的底部
将JavaScript和CSS作为外部文件来引用:在实际应用中使用外部文件可以提高页面速度,因为JavaScript和CSS文件都能在浏览器中产生缓存。
缩小JavaScript和CSS
删除重复的脚本
最小化DOM的访问:使用JavaScript访问DOM元素比较慢
开发智能的事件处理程序

  1. 图像优化

优化图片大小
通过CSS Sprites优化图片
不要在HTML中使用缩放图片
favicon.ico要小而且可缓存

  1. 针对移动优化

保持组件大小在25KB以下:主要是因为iPhone不能缓存大于25K的文件(注意这里指的是解压缩后的大小)。
将组件打包成为一个复合文档:把页面内容打包成复合文本就如同带有多附件的Email,它能够使你在一个HTTP请求中获取多个组件。
更多信息:http://developer.yahoo.com/performance/rules.html(中文翻译)

三、一些工具

  1. Google PageSpeed
    Google提供了 PageSpeed工具,这是一个浏览器插件,可以很好地应用上文中Google所提到的Web优化实践——帮助你轻松对网站的性能瓶颈进行分析,并为你提供优化建议。

在线分析你的网站
安装浏览器插件( Chrome、 Firefox)
通过 Insights API在应用中嵌入PageSpeed功能

  1. 雅虎 YSlow
    YSlow是雅虎推出的一款浏览器插件,可以帮助你对网站的页面进行分析,并为你提供一些优化建议,以提高网站的性能。

Firefox插件
Chrome插件
YSlow for Mobile/Bookmarklet
源码

  1. 其他分析优化工具

蜘蛛模拟器:这个工具可以分析你的页面,并提供一些优化建议。
图像SEO工具:这个工具可以检查图片的alt标签,并提供一些优化建议。
请求检查器:找出页面中需要加载哪些资源和服务。
链接检查器:检查页面中内部、外部和无效链接。
HTTP头检查:显示网页或资源的HTTP响应头。
社交检查器:检查页面中的社交组件,比如Google+、Facebook、Twitter、Linkedin和Pinterest。
If modified检查器:检查页面是否接受 If-Modified-Since HTTP头。
Gzip检查器:检查页面是否经过了Gzip压缩。
CSS delivery工具:检查页面中所使用的CSS文件。
面包屑工具:可根据你输入的信息提供面包屑导航的代码。
CSS压缩工具:用于压缩CSS代码。

通过以上的优化建议和优化工具,可以轻松找到影响你的Web页面性能的瓶颈,轻松实现Web页面性能的提升。如果你也有Web优化方面的经验,欢迎分享。

本文由10bet手机官网发布于面向对象,转载请注明出处:前端性能优化,关于web端的优化

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文