`

深入探讨Web Page性能优化-web性能基础

阅读更多

 

深入探讨 Web Page 的性能提升

摘要 Web 性能在 Web 开发中占有非常重要的地位,一个快速的网页对于提升用户体验,提高用户黏性,具有非常重要的意义。要开发出高性能的 Web page, 需要深入了解 Web 端的原理 , 在本文中作者深入探讨了 Web Page 的性能优化技巧,本文不仅介绍了技巧,并深入了研究了使用这些技巧的原因以及机理,本文凝结互联网上众多高手的智慧和劳动 , 尤其是 Yahoo 团队在 Web page 端所做的理论分析 , 给作者以非常大的启示 , 本文有部分转载,其中也加入了大量本人的理解和实例,本文对于 Web 端性能提升具有非常重大的参考意义,是不可多得的好材料。本文可以广泛地推介给 Web 端开发人员,易于理解,并能够加强基础,一个快速如飞的网页,对开发人员来说,是非常有成就感的一件事情 , 本文首先简单介绍了 Web 基础,然后列举了多种方法进行 Web 性能优化的方法,最后列举实例,通过这些优化方法,很好地完成了 Innova Center 的性能优化。阅读完本文,并能够深刻理解,你会成为 Web 性能方面的专家。


 

【主要内容】

深入探讨Web Page 的性能提升 . 1

1 Web端性能基础 . 4

1.1 Web端性能的重要性 . 4

1.1.1 跟踪Web 页面的性能 . 4

1.1.2 Web Page的时间消耗分析 . 5

1.1.3 性能的黄金法则 . 5

1.2 HTTP基础 . 6

1.2.1 压缩 . 6

1.2.2 Keep-Alive 7

2 常用的Web Page 优化技巧以及原理 . 7

2.1 减少HTTP 请求 . 7

实例1: 在InnovaCenter 的主页采用CSS Sprites 进行图片合并 . 9

2 .2 添加Expires . 12

实例 2 INNOVACenter 添加 Expire 头的请求和没有添加 Expires 头请求的差别 . 13

2 .3 压缩组件 . 14

实例3 INNOVA Center 采用 GZIP 压缩完成对 HTML 文档, CSS JavaScript 的压缩 . 15

2.4 将CSS 放在顶部 . 16

2.5 将JS 文件放在Page 的底部 . 17

2.5.1 脚本带来的问题 . 17

2.5.2 并行下载 . 17

2.5.3 脚本阻塞下载 . 19

2.6 使用外部的JavaScript 和CSS 20

2.7 减少 DNS 查询 . 21

2.8 尽早 flush 缓冲区 . 22

2.9 在集群环境中避免使用 ETag 23

2.9.1 ETag是什么 . 23

2.9.2 Expires . 23

2.9.3条件Get 请求 . 24

2.9.4 服务如何检测缓存中的组件 . 24

2.9.5 ETag 带来的问题 . 25

2.10 使用 get 方法进行 AJAX 请求 . 25

2.11 延迟加载组件 . 26

2.12 预加载组件 . 26

2.13 减少 DOM 元素的数量 . 28

2.14 跨域分割组件 . 28

2.15 尽量减少 Iframe 的数量 . 29

2.16 在页面尽量避免组件 404 的响应 . 29

2.17 尽量减少 Cookie 的大小 . 30

2.18 尽量减少 DOM 的访问 . 30

3.    总结 . 30

 

1 Web 端性能基础

1.1 Web 端性能的重要性

Web 应用程序中,通常的后端优化包括 - 数据库优化设计,和内存管理。但实际上,只有 10%-20% 的最终用户响应时间是花在从 Web 服务器获取 HTML 文档并传达到浏览器中。如果希望能够有效地减少页面的响应时间,就必须关注剩余 80%-90% 的最终用户体验。

80%-90% 的时间花在哪里了?如何减少它?

1.1.1 跟踪 Web 页面的性能

为了知道能够改进哪些地方,我们需要了解用户的时间都花在等待哪些东西,以 公司首页 为例, IE 浏览器的 HTTPWatch 工具来查看,下载 INNOVA Center 首页时所产生的流量。每个横条都是一个 HTTP 请求 , 第一个横条 , 标有 HTML, 是对 HTML 文档的初始请求 . 浏览器解析 HTML 并开始下载页面中的组件。这里的页面中的组件,指的是页面的 img 元素, flash JavaScript 文件和 CSS 文件。由于第一次加载页面时,浏览器中的缓存是空的,因此所有的组件,都需要从 WEB 服务器中下载。 HTML 文档只占总响应的 5% 。用户需要花费其实的 95% 的时间中的大部分来等待组件的下载。还有一小部分时间花在解析 HTML 、脚本和 CSS 上面 :

1.1.2 Web Page 的时间消耗分析

如上图所示:整个 INNOVA Center 的主页耗时 605ms ,从发送请求到从服务器端响应,组装 HTML 到下载 HTML 文档的时间只有 61ms ,其余的时间都花在下载 js CSS 和图片上,还有少量的时间花在了 js 的解析上。

总的来说,一个页面从用户请求开始,到完整的页面呈现在用户面前,包含以下几个过程:

1.DNS 查找,寻址,找到目标服务器的 IP

2. 建立 HTTP 连接

3. 发送请求

4. 服务器响应,组装 HTML

5. 浏览器下载服务器端响应组装的 HTML 文档

6. 浏览器下载组件( js css flash 和图片等)

通过刚才举出的实例,可以看出大部分的时间都花在了第 6 步:下载 js ,图片,和 css 上面了。

1.1.3 性能的黄金法则

从一个页面请求发送给服务器到服务器响应组装 HTML ,到客户端下载 HTML 所花的时间大概占用所有时间的 10%-20% 的时间,这个现象不只是出现在 Yahoo !, Google 的主页上。而且这一统计数据适用于绝大多数网站。下面的列表得到的美国前十个网站,除了 AOL 之外,这些网站都名列美国的前十名。

Site

无缓存

完整缓存

AOL

6%

14%

Amazon

18%

14%

CNN

19%

8%

eBay

2%

8%

Google

14%

36%

MSN

3%

5%

MySpace

4%

14%

Wikipedia

20%

12%

Yahoo!

5%

12%

YouTube

3%

5%

 

所有的这些网站在获取 HTML 文档是,花费的时间都不到总响应时间的 20% 。在进行网站的性能优化时,关键是剖析当前的性能,找到哪里可以获得最大的改进。很明显,在这种情况下我们应该关注前端性能:

1. 首先,关注前端性能可以很好地提高整体性能。 如果我们可以将后端响应时间缩短一半,整体响应时间确只能 5%-10% 。而如果关注前端性能,同样是将其响应时间减少一半,则整体响应时间可以减少 40%-50%.

2. 其次,改进前端通常只需要较少的时间和资源。 而改动后端,很可能需要修改程序的架构,添加或者改动硬件,对数据库进行分布化等。

3. 前端性能调整已经被证明是可行的。 Yahoo !有超过 50 个团队使用了这里介绍的性能优化方案并降低了最终用户的响应时间,降低幅度通常为 25% 或更高。一般来说,只需要遵循这些优化方案就能节省 25% 或更多的时间。

根据上面的三点理由,性能黄金法则 可以总结如下:

只有 10%~20% 的最终用户响应时间花在了下载 HTML 文档上。其余的 80%~90% 时间花在了下载页面中的所有组件上。

1.2 HTTP 基础

HTTP 是一种客户端 / 服务器协议,由请求和响应组成。浏览器向一个特定的 URL 发送 HTTP 请求, URL 对应的宿主服务器发回 HTTP 响应。和很多的 Internet 服务一样,该协议使用简单的纯文本形式。请求的类型有 GET,POST,HEAD,PUT,DELETE,OPTIONS TRACE HTTP 协议从开始 1.0 版本到现在最常用的 1.1 在性能上得到了很大的改进。下面列出几个 HTTP 的最基本知识点,这对于理解 Web Page 的优化有很大的好处:

1.2.1 压缩

目前主流的浏览器和服务器都支持压缩,也就是说 HTTP 发送到服务端的请求,服务器响应给浏览器的 HTML 文本,由服务器端先压缩好,再传输给客户端,客户端再进行解压缩。

这样 HTML 文本在网络传输过程中,大大减少了其大小,目前如 Apache 服务器,可以支持 HTML 文本的压缩率可达到 80% ,这个基本知识点为 WEB Page 的优化提供了一个最基本的优化点。

1.2.2 Keep-Alive

HTTP 协议构建在 TCP 之上。在 HTTP 的早期实现中,每个 HTTP 都打开一个 Socket 连接。这样做效率很低,因为一个 Web 页面中的 HTTP 请求都指向同一个服务器。例如,很多为 Web 页面中的图片发起的请求都指向同一个图片服务器。持久连接的引入解决了多对以请求服务器导致的 Socket 连接低效性的问题。它是浏览器可以在一个单独的连接上进行请求。浏览器服务器使用 Connection 头来指出对 Keep - Alive 的支持。在服务器的响应中 Connection 头看起来是一样的。

浏览器或服务器可以通过发送一个 Connection : close 头来关系连接。从技术上讲: Connection keep - alive 并不是 HTTP1 .1 中必需的,但是很多浏览器和服务器都包含它。

HTTP1 .1 中定义的管到可以在一个单独的 socket 上发送多个请求而无须等待响应。管道的性能要优于持久连接。但不幸的是 IE 都不支持管道,而 Firefox 自从版本 2 开始默认也是关闭该功能的。在管道被广泛应用之前, Keep-Alive 依然是浏览器和服务器使用 HTTP socket 连接最有效的方式。这对于 HTTPS 来说甚至更重要,因为建立新的安全 socket 连接要消耗更多的时间。

 

分享到:
评论

相关推荐

    ASP.NET Web Page应用深入探讨第1/2页

    一、服务器脚本基础介绍 首先,我们先复习一下Web服务器页面的基本执行方式: 1、客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 2、服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则...

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    本讲将通过实例比较ASP.NET下的三种典型URL重写方案——ISAPI重写(使用开源组件IIRF),ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中...

    《JSP技术大全》pdg格式

    第一部分只是简单介绍了Web、servlet、JSP和WEB网络协议等基础知识,以及JSP的基本概念。第二部分对JSP的内容进行了深入的讲解。主要是JSP的语法与语义,使读者熟悉创建工作代码所必须的技巧。内容包括基本语法、...

    ASP.NET与AJAX深度剖析范例集_卷2(源代码)

    深入探讨DataSource的应用 第6章 ASP.NET 2.0登录与身份验证机制 第7章 ProFile范例——制作用户配置文件 第8章 MasterPage范例——使用母版页 第9章 Theme与Skin范例 第10章 WebParts范例 第11章...

    spring.net中文手册在线版

    26.3.深入探讨 26.3.1.其它类型的通知 26.3.1.1.前置通知 26.3.1.2.后置通知 26.3.1.3.异常通知 26.3.1.4.引入(mixins) 26.3.1.5.通知链 26.3.1.6.配置通知 26.3.2.使用特性定义切入点 26.4.The Spring.NET AOP ...

    reactive-js:我对 JavaScript 响应式编程的介绍

    和我一起简要介绍响应式编程的原则,然后深入探讨将这些原则应用于您的 JavaScript 代码。 到本节结束时,您将知道当活性橡胶遇到编程道路时会出现什么模式。 在简要介绍了响应式编程之后,我们将使用Q的Promises ...

    ASP. NET与AJAX深度剖析范例集_卷1(共2卷)(源代码)

    深入探讨DataSource的应用 第6章 ASP.NET 2.0登录与身份验证机制 第7章 ProFile范例——制作用户配置文件 第8章 MasterPage范例——使用母版页 第9章 Theme与Skin范例 第10章 WebParts范例 第11章...

    Java数据编程指南

    数据库规格化与数据仓库 数据库视图 数据库元数据 临时表 约束 静态SQL与动态SQL 准备语句 事务处理与隔离级别 存储过程 触发器 复制 优化基础 小结 第6章 Java数据库...

    Web网页的动态交互发布技术―ASP 解决方案 (2009年)

    ASP(Active Server Page)是一种服务器端的网页设计与分布技术,它组合HTML页?...作者从介绍ASP运行进程入手,探讨了ASP和数据库相融合的方法,给出了Web网页的动态交互设计与发布技术―ASP解决方案.

    jquery js+php+html5+css3分页栏生成及数据取出代码

    《js分页栏生成及数据取出》 使用方法说明 使用jquery php html5 css3来编写的js分页代码,方便大家进行稍加修改之后... 7、如果问题需要探讨请 QQ:947233713 8、我偏向使用js来制作分页栏,至于优点,可以问度娘~~

Global site tag (gtag.js) - Google Analytics