`
caibinghong
  • 浏览: 143274 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

如何提高网页的效率(上篇)——提高网页效率的14条准则

 
阅读更多

如何提高网页的效率(上篇)——提高网页效率的14条准则

 

网站最基本的东西是什么?

网站最基本的东西是什么?
——内容?SEO(搜索引擎优化)?UE(用户体验)?都不对!是速度!
内容再丰富的网站,如果慢到无法访问也是毫无意义的; SEO做的再好的网站,如果搜索蜘蛛抓不到也是白搭; UE设计的再人性化的网站,如果用户连看都看不到也是空谈。
所以网页的效率绝对是最值得关注的方面。如何才能提高一个网页的效率呢?Steve Souders(Steve Souders的资料http://www.oreillynet.com/pub/au/2951)提出的提高网页效率的14条准则,而这些准则也将是我们下篇中介绍到的YSlow工具的理论基础:

  • Make Fewer HTTP Requests
  • Use a Content Delivery Network
  • Add an Expires Header
  • Gzip Components
  • Put CSS at the Top
  • Move Scripts to the Bottom
  • Avoid CSS Expressions
  • Make JavaScript and CSS External
  • Reduce DNS Lookups
  • Minify JavaScript
  • Avoid Redirects
  • Remove Duplicate Scripts
  • Configure ETags
  • Make Ajax Cacheable
这里我们将逐一的讲解这些准则,对其中开发者密切相关的准则我将详细讲解。小弟个人技术实在有限,错误和无知在所难免,还请高人指点。

 

第一条:Make Fewer HTTP Requests 尽可能的减少HTTP的Request请求数。

80%的用户响应时间都是浪费在前端。而这些时间主要又是因为下载图片、样式表、JavaScript脚本、flash等文件造成的。减少这些资源文件的Request请求数将是提高网页显示效率的重点。
这里好像有个矛盾,就是如果我减少了很多的图片,样式,脚本或者flash,那么网页岂不是光秃秃的,那多难看呢?其实这是一个误解。我们只是说尽量的减少,并没有说完全不能使用。减少这些文件的Request请求数,当然也有一些技巧和建议的:

1:用一个大图片代替多个小图片。
这的确有点颠覆传统的思维了。以前我们一直以为多个小图片的下载速度之和会小于一个大图片的下载速度。但是现在利用httpwatch工具的对多个页面进行分析后的结果表明事实并不是这样。
第一张图是一个大小为40528bytes的337*191px的大图片的分析结果。
第二张图是一个大小为13883bytes的280*90px的小图片的分析结果。
点击查看大图
一个大小为40528bytes的337*191px的大图片的分析结果(点击图片可以查看完整大图片)

点击查看大图
一个大小为13883bytes的280*90px的小图片的分析结果(点击图片可以查看完整大图片)
第一张大图片花费时间为:
Blocked:13.034s
Send:0.001s
Wait:0.163s
Receive:4.596s
TTFB:0.164s
NetWork:4.760s
功耗时:17.795s
真正用于传输大文件花费的时间为Reveive时间,即4.596s,多数的时间是用来检索缓存和确定链接是否有效的Blocked时间,供花费13.034s,占总时间的73.2%。

第二张小图片花费时间为:
Blocked:16.274s
Send:小于0.001s
Wait:0.117s
Receive:0.397s
TTFB:0.118s
NetWork:0.516s
功耗时:16.790s
真正用于传输文件的花费时间是Reveive时间,即0.397s,这的确要比刚才大文件的4.596s小很多。但是他的Blocked时间为16.274s,占总时间的97%。

如果这些数据还不够说服你的话,让我们看看下面这张图。这里列出了某个网页中所有图片中的花费时间示意图。当然,里面的图片有大有小,规格不一。
httpwatch,杨正祎,Yes!B/S!
大约80%以上的时间是用来检索缓存和确定链接是否有效的Blocked时间。
其中藏青色的为传输文件花费的Reveive时间,而前面白色的为检索缓存和确认链接是否有效的Blocked时间。铁一样的事实告诉我们:
  • 大文件和小文件下载所需时间的确是不同的,差异的绝对值不大。而且下载所需时间占总耗费时间比例很小。
  • 大约80%以上的时间是用来检索缓存和确定链接是否有效的Blocked时间。无论文件大小,这个时间的花费大致是相同的。而且所占总耗费时间的比例是极大的。
  • 一个100k的大图片总耗费时间绝对大于4个25k的小图片的总耗费时间。而且主要差别就是4个小图片的Blocked时间绝对大于1个大图片的Blocked时间。
所以如果可能还是使用大图片来替代过多的琐碎的小图片吧。这也是为什么翻转门的效率要高于图片替换实现的滑动门的原因。
但是,请注意:也不能用太大的单张图片,因为那样会影响到用户体验。例如个几兆的背景图片的使用绝对不是一个好主意。
2:合并你的css文件。
合并,合并示意图
图:合并与融合
我以前犯了一个错误,你在看我《样式表的组织与规划》的系列文章中会知道。当时,我为了方便组织和规划样式表,将用于不同用途的样式表文件分离开来,形成不同的css文件。然后在页面中根据需要引用多个css文件。根据“尽可能的减少HTTP的Request请求数”准则我们知道,那样的确是不合理的,因为那样会产生更多的HTTP的Request请求数。从而降低网页的效率。所以,从提高网页效率的角度上而言,我们还是应该将所有的css写在同一个css文件中。但是问题又来了。那么怎么来很好的组织和规划样式表呢?这的确是个矛盾。我现在的做法是采用两套版本。编辑版和发布版。编辑版仍然使用多个css文件以便于规划和组织。而等到发布的时候,再将多个css文件合并到一个文件中去,从而达到减少HTTPRequest请求数的目的。
3:合并你的javascript文件。
原因和处理方法同上,不再赘言。

 

第二条:Use a Content Delivery Network 使用CDN

这个看上去好像很深奥的样子,但是只要结合中国的网络特色,这个便不难理解了。“北方服务器”、“南方服务器”、“电信服务器”、“网通服务器”……这些词听起来是那么熟悉和压抑。如果,一个北京的电信用户试图从广东的网通服务器上打开一个类似《壁纸合集》帖子的网页时,你就能很深刻的理解。
鉴于这个不是我们开发人员力所能及的准则,所以这里也就不多言了。

CDN,南北服务器,电信网通,宽带互联
图:这个图也算有点中国特色了

 

第三条:Add an Expires Header 添加周期头

这个也并非开发人员来控制,而是网站服务器管理员的职责。所以,如果作为开发人员的你不了解和明白也没有关系。还是把这个准则告诉公司的网站服务器管理员。

第四条:Gzip Components 启用Gzip压缩

这个大家应该比较熟悉。Gzip的思想就是把文件先在服务器端进行压缩,然后再传输。这对于体积较大的纯文字型的文件有特效。鉴于这也并非开发人员,而是网站服务器管理员的工作范畴,这里就不详细讲解了。如果你对此感兴趣,可以资讯贵公司的网站服务器管理人员。

第五条:Put CSS at the Top 把CSS样式放在页面的上方。

无论是HTML还是XHTML还是CSS都是解释型的语言,而非编译型的。所以CSS到上方的话,那么浏览器解析结构的时候,就已经可以对页面进行渲染。这样就不会出现,页面结构光秃秃的先出来,然后CSS渲染,页面又突然华丽起来,这样太具有“戏剧性”的页面浏览体验了。

第六条:Move Scripts to the Bottom 将脚本放在底部

原因同第五条一样。只是脚本一般是用来于用户交互的。所以如果页面还没有出来,用户连页面都不知道什么样子,那谈交互简直就是扯谈。所以,脚本和CSS正好相反,脚本应该放在页面的底部。

第七条:Avoid CSS Expressions 避免使用CSS中的Expressions

 

if语句,expression,判断语句示意图
图:CSS中的Expressions其实也是一种if判断
首先有必要先说明一下CSS Expressions是什么一个东西。其实它就像其它语言中的if……else……语句。这样在CSS中就可以进行简单的逻辑判断了。举个简单的例子——
<style>
input
{background-color:expression((this.readOnly && this.readOnly==true)?"#0000ff":"#ff0000")}
</style>
<INPUT TYPE="text" NAME="">
<INPUT TYPE="text" NAME="" readonly="true">
这样css就可以根结一些情况分别使用不同的样式了。如果你对这个感兴趣可以到我的博客上阅读相关的文章—— 《CSS中的expression系列文章》。但是CSS中Expressions 的代价却是极高的。当你的页面需要根据判断来渲染效果的元素很多的时候,那么你的浏览器将长期处于假死状态,从而给用户带来极差的用户体验。

 

第八条:Make JavaScript and CSS External 将javascript和css独立成外部文件

这一条好像和第一条有点矛盾。的确,如果从HTTP的request请求数来讲的话,这样做的确是降低了效率。但是之所以这么做,是因为另外一个重要的考虑因素——缓存。因为外部的引用文件会被浏览器缓存,所以如果javascript和css体积较大的时候,我们将它们独立成外部文件。这样当用户只要浏览一次以后,这些体积较大的js和css文件就能被缓存起来,从而极高地提高用户再次访问时的效率。

第九条:Reduce DNS Lookups  减少DNS查询

DNS域名解析系统。大家都知道我们之所以能记住那么多的网址,是因为我们记住的都是单词,而非http://202.153.125.45这样的东西,而帮我们把那些单词和202.153.125.45这样的ip地址联系起来的就是DNS。那这一条对我们到底有什么真正意义上的指导意义呢?其实有两条:
1:如果不是必须,请不要把网站放到两台服务器上。
2:网页中的图片、css文件、js文件、flash文件等等,不要太多的分散在不同的网络空间中。这就是为什么那种只发一个网站中的壁纸图片的帖子,要比壁纸图片来源于不同网站的帖子显示要快得多的原因。

第十条:Minify JavaScript and CSS  减少JavaScript和CSS文件的体积

这点很好理解。在你的最终发布版本中把没有必要的空行、空格和注释全部去掉。显然手工去处理效率太低,好在网上到处都是用于压缩这些东西的工具。压缩JavaScript代码体积的工具随处可见,我便不再列举了,这里我只提供一个用于压缩css代码体积的在线工具网站——http://www.cssdrive.com/index.php/main/csscompressor
它提供了多种压缩方式,可以适应多种要求。

第十一条:Avoid Redirects 避免跳转

我只从网页开发人员的角度来解读此条。那么我们可以解读到什么东西呢?2点——
1:“此域名已过期,5秒钟以后,页面将跳转到http://www.xxxxxx.com/index.html页面”,这句话看起来的确很熟悉。但是,我就奇怪了,为什么不直接链接到那个页面呢?
2:一些链接地址请更明确的写出来。例如:将http://justinyoung.cnblogs.com/ 写成http://justinyoung.cnblogs.com (注意最后面一个“/”符号)。的确,这两个网址都能访问到我的博客,但是,事实上,它们是有区别的。http://justinyoung.cnblogs.com 的结果是个301响应,它会被重新指向http://justinyoung.cnblogs.com/ 。但是显然,中间多浪费了一些时间。

第十二条 Remove Duplicate Scripts 移除重复的脚本

对重复说不
图:对重复说“不!”

这个准则的道理很浅显,但是真正在工作中,很多人却因为“项目时间紧”、“太累了”、“初期没有规划好”……这样的理由搪塞过去了。你,的确可以找很多的理由不去处理这些多余重复的脚本代码,如果你的网站不需要更高的效率和后期维护的话。
也正是这点,我提醒大家一些,一些javascript框架、javascript包一定要慎用。至少要问一下:用了这个js kit 到底给我们多少方便,提高了多少工作效率。然后,再与它因为多余的、重复的代码带来的负面效果比较一下。

第十三条:Configure ETags 配置你的实体标签

首先来讲讲什么是Etag吧。Etag(Entity tags )实体标签。这个tag和你在网上经常看到的标签云那种tag有点区别。这个Etag不是给用户用的,而是给浏览器缓存用的。Etag是服务器告诉浏览器缓存,缓存中的内容是否已经发生变化的一种机制。通过Etag,浏览器就可以知道现在的缓存中的内容是不是最新的,需不需要重新从服务器上重新下载。这和“Last-Modified”的概念有点类似。很遗憾作为网页开发人员对此无能为力。他依然是网站服务器人员的工作范畴。如果,你对此有兴趣,可以咨询贵公司的网站服务器管理员。

第十四条:Make Ajax Cacheable 上面的准则也适用Ajax

Ajax
图:Ajax的使用要恰当

现在的Ajax好像有点被神话了,好像网页只要Ajax了,那么就不存在效率问题了。其实这是一种误解。拙劣的使用Ajax不会让你的网页效率更高,反而会降低你的网页效率。Ajax的确是个好东西,但是请不要过分的神话它。使用Ajax的时候也要考虑上面的那些准则。

后记:

当然,上面的这些也只是供你参考的理论上的准则。具体的情况还是要具体的去对待。理论和准则只是用来指导现实工作的,却是万万不可死记硬套。

分享到:
评论

相关推荐

    弹塑性计算中Mohr-Coulomb准则屈服面奇异点处理方法

    在对高斯点应力回退屈服面的两种方法———倒圆角法和向量回退法进行理论分析的基础上,给出了相应的本构积分算法,结合边坡弹塑性分析对这两种方法进行了对比.对比结果显示,倒圆角法处理奇异点方法相对简单,弹塑性...

    数据结构——学习数据结构的意义.pdf

    数据结构 数据结构——学习数据结构的意义 学习数据结构的意义 1,为什么要学习数据结构? 1,语⾔学习结束之后是否有能⼒进⾏项⽬开发? 1,不能,要学习数据结构; 2,当⾯对⼀个问题的时候如何思考解决⽅案? 1,...

    流程再造——酒店业全面提升服务效率的捷径

    酒店管理一直遵循着为客户服务的准则,相信你也需要了解一下流程再造——酒店业全面提升服务效率的捷径,...该文档为流程再造——酒店业全面提升服务效率的捷径,是一份很不错的参考资料,具有较高参考价值,感兴趣...

    合智财务软件免费版

    ——往来款项提供全面的自动勾对,提高往来管理效率,加强往来管理力度。 现金银行、出纳管理 通过现金和银行存款的控制和管理,随时掌握现金、银行存款收付的动态和库存现金余额,确保现金和银行存款的安全。 ...

    大长宽比单元有限元误差分析及高精度计算 (2003年)

    根据这一匹配准则,提出了一种提高计算精度的方法———单向高次插值法。数值实验表明该误差估计是正确的,误差匹配准则作为网格划分的判据是有效的,采用合理的有限元插值逼近能够有效地减小计算误差,提高计算的精度和...

    软件工程-理论与实践(许家珆)习题答案

     硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。  软件特征:程序员数量猛增,开发人员素质低。  ③ 软件工程阶段。  硬件特征:向超高速、大容量、微型化及网络化方向发展。  ...

    C++编程思想——很实用的一本书

    1.2.3 运行效率 4 1.2.4 系统更容易表达和理解 4 1.2.5 “库”使你事半功倍 4 1.2.6 错误处理 5 1.2.7 大程序设计 5 1.3 方法学介绍 5 1.3.1 复杂性 5 1.3.2 内部原则 6 1.3.3 外部原则 7 1.3.4 对象设计的五个阶段 ...

    供应链的效率与协调问题研究 (2005年)

    方法 依据逆向思维的原则,从当前供应链协调研究的热点方法——供应链契约理论相反的方向出发,由供应链效率的定义开始,逐步推导。结果 给出了供应链协调的等效率原则、供应链协调的方向和范围及实现等效率原则的...

    面试问题,准备赢得一切

    在你身边是否有许多这样的人,他们忠诚、敬业,做起事来勤奋主动,但往往事倍功半,总也做不到点子上?症结何在?  忠诚、敬业、服从、勤奋仅仅是态度,准备却是方法。只有准备才能减少差错,倍增效率。因此,现在...

    asp.net知识库

    忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,...

    值得信赖的人工智能和公司治理——欧盟关于可信赖人工智能的道德准则,从公司法的角度来看-研究论文

    许多效率和改进是可能的,但也存在潜在的危险,包括对第三方的有害影响的威胁、歧视性做法、数据和隐私泄露、欺诈行为甚至“流氓 AI”。 为了解决这些危险,欧盟发布了“可信赖人工智能的道德准则”。 该准则从尊重...

    社会价值观·企业价值观管理价值观·会计价值观——基于全球金融危机视角的文献述评 (2009年)

    会计实务取决于会计准则,会计准则取决于会计价值观,会计价值观取决于管理价值观,管理价值观又取决于企业价值观,企业价值观最终取决于社会价值观。全球金融危机引发了我们...进而提高经济运行效率,推动社会和谐的进程。

    [详细完整版]信息系统审计.doc

    EDP下:在原有审计准则的基础上,建立一系列新的准则(5)对内部控制的影响 :内部控制方式发生改变:传统方式下:强调对业务活动及会计活动使用授权批准和职 责分工等控制程序来保证。EDP下:数据处理根据既定的...

    软件质量管理实践 软件缺陷预防、清除、管理实用方法

    ——软件缺陷预防、清除、管理实用方法 目录 前言 1 致谢 3 序 3 宣传语 4 目录 4 第4章 同行评审 5 4.1 同行评审与测试的关系 6 4.2 同行评审的种类和对象 7 4.2.1 同行评审的种类 7 4.2.2 同行评审的对象 8 4.3 ...

    集团企业数字化规划设计方案

    ■ 提高决策效率 ■ 提供更好的数字化服务 ■ 降低公司数字化总拥有成本,保证数字化投资收益 分类 ■ 数字化标准根据数字化技术架构的层次结构,对应不同的标准层次∶ ■ 数字化技术模型——数字化技术架构逻辑...

    成绩管理系统课程设计.doc

    当今社会是个讲求效率的社会,各行各业都以提高效率作为行事的基本准则,特别是 一些知识密集行业,效率的要求就显得尤为重要。 教育单位中考生成绩管理向来就是一件既繁琐而又累人的工作。传统的考生成绩管理 需要...

    论文研究-基于l.pdf

    为了利用[l1]范数保持图像边缘信息的优势,并兼顾[l2]范数对图像平坦区域噪声抑制的特性,提出了一种自适应范数混合模型——[l12]范数正则化方法。相比于经典的[l1]范数正则化方法,该方法能够得到更加稀疏的解,...

    基于JavaEE的快速开发框架

    Hibernate是后来又补上的,最早的版本没有是因为第一个版本是为游戏服务器架构的,唯快不破的准则放弃了Hibernate,而后面增加回来是基于后台管理功能的需要。这一过程纠正了我一个开发框架中只能存在一个ORM的想法...

    计算机网络第五版课后答案

    答:(1)电路交换:端对端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高。 (2)报文交换:无须预约传输带宽,动态逐段利用传输带宽对突发式数据通信效率高,通信迅速。 (3)分组交换:具有...

Global site tag (gtag.js) - Google Analytics