- 浏览: 316473 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
完善自我:
支持一下!
揭秘IT人才特点:中美印日四国程序员比较 -
悲剧了:
好文,看玩thinking in java的提到的异常处理,看 ...
高效的Java异常处理框架(转) -
yin_bp:
开源框架bbossgroups页支持组件异步方法调用哦,详情请 ...
Spring 3中异步方法调用 -
flyjava:
sun的悲哀
Apache怒了,威胁说要离开JCP
继续更新14条法则后7条,对前端性能优化整体有个框架。
法则8.
把JavaScript和CSS放到外部文件中
上述很多性能优化法则都基于外部文件进行优化。现在,我们必须问一个问题:JavaScript和CSS应该包括在外部文件,还是在页面文件中?
在现实世界中,使用外部文件会加快页面显示速度,因为外部文件会被浏览器缓存。如果内置JavaScript和CSS在页面中虽然会减少HTTP请求次数,但增大了页面的大小。另外一方面,使用外部文件,会被浏览器缓存,则页面大小会减小,同时又不增加HTTP请求次数。
因此,一般来说,外部文件是更可行的方式。唯一的例外是内嵌方式对主页更有效,如Yahoo!和My
Yahoo!都使用内嵌方式。一般来说,在一个session中,主页访问此时较少,因此内嵌方式可以取得更快的用户响应时间。
应用:
这一条与第一条法则需要结合起来找到最合适的点,更要注意一些浏览器兼容性的问题。
法则9.
减少DNS查询次数
DNS用于映射主机名和IP地址,一般一次解析需要20~120毫秒。为达到更高的性能,DNS解析通常被多级别地缓存,如由ISP或局域网维护的caching
server,本地机器操作系统的缓存(如windows上的DNS Client
Service),浏览器。IE的缺省DNS缓存时间为30分钟,Firefox的缺省缓冲时间是1分钟。
减少主机名可减少DNS查询的次数,但可能造成并行下载数的减少。避免DNS查询可减少响应时间,而减少并行下载数可能增加响应时间。一个可行的折中是把内容分布到至少2个,最多4个不同的主机名上。
应用:
这一点也与之前的HTTP
SERVER调优
相似,主要是减少DNS寻址,最好利用DNS缓存来解决相应的问题,不过一定要注意DNS缓存安全:)
法则10.
最小化JavaScript代码
最小化JavaScript代码指在JS代码中删除不必要的字符,从而降低下载时间。两个流行的工具是#JSMin
和YUI
Compressor。
混淆是最小化于源码的备选方式。象最小化一样,它通过删除注释和空格来减少源码大小,同时它还可以对代码进行混淆处理。作为混淆的一部分,函数名和变量名被替换成短的字符串,这使得代码更紧凑,同时也更难读,使得难于被反向工程。Dojo
Compressor
(ShrinkSafe)是最常见的混淆工具。
最小化是安全的、直白的过程,而混淆则更复杂,而且容易产生问题。从对美国10大网站的调查来看,通过最小化,文件可减少21%,而混淆则可减少25%。
除了最小化外部脚本文件外,内嵌的脚本代码也应该被最小化。即使脚本根据法则4被压缩后传输,最小化脚本刻减少文件大小5%或更高。
应用:
这一点与法则4的初衷是一样的。更精化了相应的代码。
法则11.
避免重定向
重定向功能是通过301和302这两个HTTP状态码完成的,如:
HTTP/1.1 301 Moved Permanently
Location: [url]http://example.com/newuri[/url]
Content-Type: text/html
浏览器自动重定向请求到Location指定的URL上,重定向的主要问题是降低了用户体验。
一种最耗费资源、经常发生而很容易被忽视的重定向是URL的最后缺少/,如访问[url]http://astrology.yahoo.com/astrology[/url]将被重定向到[url]http://astrology.yahoo.com/astrology/[/url]。在Apache下,可以通过Alias,mod_rewrite或DirectorySlash等方式来解决该问题。
应用:
我们可以使用相应的HTTP SERVER调优
来进行重定向。
法则12.
删除重复的脚本文件
在一个页面中包含重复的JS脚本文件会影响性能,即它会建立不必要的HTTP请求和额外的JS执行。
不必要的HTTP请求发生在IE下,而Firefox不会产生多余的HTTP请求。额外的JS执行,不管在IE下,还是在Firefox下,都会发生。
一个避免重复的脚本文件的方式是使用模板系统来建立脚本管理模块。除了防止重复的脚本文件外,该模块还可以实现依赖性检查和增加版本号到脚本文件名中,从而实现超长的过期时间。
应用:
脚本管理一直是前端的问题,使用相应框架可以解决类似的问题。
法则13. 配置ETags
ETags是用于确定浏览器缓存中元素是否与Web
server中的元素相匹配的机制,它是比last-modified
date更灵活的元素验证机制。ETag是用于唯一表示元素版本的字符串,它需被包括在引号中。Web server首先在response中指定ETag:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: “10c24bc-4ab-457e1c1f”
Content-Length: 12195
后来,如果浏览器需要验证某元素,它使用If-None-Match头回传ETag给Web server,如果ETag匹配,则服务器返回304代码,从而节省了下载时间:
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: “10c24bc-4ab-457e1c1f”
HTTP/1.1 304 Not Modified
ETags的问题在于它们是基于服务器唯一性的某些属性构造的,如Apache1.3和2.x,其格式是inode-size-timestamp,而在IIS5.0和6.0下,其格式是Filetimestamp:ChangeNumber。这样同一个元素在不同的web
server上,其ETag是不一样的。这样在多Web
server的环境下,浏览器先从server1请求某元素,后来向server2验证该元素,由于ETag不同,所以缓存失效,必须重新下载。
因此,如果您未用到ETags系统提供的灵活的验证机制,最好删除ETag。删除ETag会减少http
response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags,而在Apache下,只要在配置文件中设置FileETag
none即可。
应用:
自定义ETag的生成策略,以尽量减少探头规则的生成次数。
法则14. 缓存Ajax
性能优化法则同样适用于web
2.0应用。提高Ajax的性能最重要的方式是使得其response可缓存,就象“法则3增加Expires Header”
讨论的那样。以下其他法则同样适用于Ajax,当然法则3是最有效的方式:
法则4. 压缩页面元素
法则9. 减少DNS查询次数
法则10.
最小化脚本文件
法则11. 避免重定向
法则13. 配置ETags.
应用:
为Ajax请求附加时间戳而不使用缓存。
前端的性能调优将对用户体验度带来极大的影响。但性能的提高需要从设计等角度权衡衡量,这样才能找到最合适自己web site的性能调优方案。
———EOF———
作者: 吴颖敏 | www.futurehandw.com
Email: wuyingminhui@gmail.com
转载请注明来源:吴颖敏 - www.futurehandw.com
发表评论
-
Web编程是函数式编程
2010-11-30 13:44 1067任何一位在两个领域里 ... -
如何开发Web应用程序
2010-11-30 13:41 1125这是一个经常被问到的 ... -
设计Web应用程序时要注意可伸缩性
2010-11-26 09:19 940Max Indelicato是一位软件 ... -
Web 2.0应用客户端性能问题十大根源
2010-11-25 20:19 1041Web 2.0应用的推广为用户带来了全新的体验,同时也让开 ... -
HTML压缩(JSP的GZIP实现)
2010-11-24 22:31 4939HTTP 压缩可以大大提高浏览网站的速度,它的 ... -
浏览器加载和渲染html的顺序
2010-11-22 09:45 25791.浏览器加载和渲染html的顺序 1、IE下载的顺序是从上到 ... -
在服务端合并和压缩JavaScript和CSS文件
2010-11-22 09:16 1148Web性能优化最佳实践中最重要的一条是减少HTTP请求 ... -
用 YUI Compressor 压缩和混淆 JS 和 CSS
2010-11-22 09:05 2378一、简介: 目前开发Web应用Javas ... -
如何缓存DWR生成的JS文件
2010-11-18 17:37 1968DWR provides a convenient mec ... -
HTTP状态一览
2010-11-17 22:43 776在网站建设的实际应用中,容易出现很多小小的失误,就像m ... -
两款HTTP流量分析工具的比较:HTTP Watch,Fiddler
2010-11-17 17:26 0做Web开发或者Web分析经常需要查看Http通讯的过程, ... -
了解CSS的查找匹配原理,让CSS更简洁、高效
2010-11-17 16:49 0用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知 ... -
高性能WEB开发 - flush让页面分块,逐步呈现
2010-11-17 16:47 0在处理比较耗时的请求的时候,我们总希望先让用户先 ... -
WEB高性能开发 - 疯狂的HTML压缩
2010-11-17 16:46 0前言: ... -
该如何加载google-analytics(或其他第三方)的JS
2010-11-17 16:44 0很多网站为了获取用户访问网站的统计信息,使用了go ... -
高性能WEB开发 - 页面呈现、重绘、回流。
2010-11-17 15:57 0页面呈现流程 在讨论页面重绘、回流之前。需要 ... -
高性能WEB开发 - JS、CSS的合并、压缩、缓存管理
2010-11-17 15:54 0本篇文章主要讨论下目前JS,CSS 合并、压缩、缓存 ... -
高性能WEB开发- 减少请求,响应的数据量
2010-11-17 15:49 0上一篇中我们说 ... -
高性能WEB开发 - 为什么要减少请求数,如何减少请求数!
2010-11-17 15:42 0http请求头的数据量 我们先分析下 ... -
高性能web开发 - 如何加载JS,JS应该放在什么位置?
2010-11-17 15:39 0外部JS的阻塞下载 所有浏览器在下载JS的时候, ...
相关推荐
### YAHOO网页加速的14条优化法则 ...以上四种法则只是YAHOO提出的14条网页加速优化法则中的前四条,但已经包含了网页性能优化的核心思想和技术手段。通过综合运用这些技术,可以大幅度提升网页的加载速度和用户体验。
可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化黄金法则,以及大名鼎鼎的优化大师SteveSouders。本文并非一篇讨论性能优化技术方法的文章,而更多的是对中文站搜索List页面持续两年多...
可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化黄金法则,以及大名鼎鼎的 Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过...
性能优化实践主要包括数据库性能优化,如逻辑读取、物理读取、重做写入、执行次数等方面的监控和调整,以及避免全表扫描,提高SQL执行效率。此外,通过使用APM(Application Performance Management)分析平台,可以...
前端性能优化是提高用户体验的关键,Yahoo的34条前端优化法则能够指导开发者进行前端性能的优化工作。 数据库缓存是提高数据库操作效率的重要手段,例如memcached的使用能够减轻数据库的压力并提高数据访问速度。 ...
- **打造优秀APP的9条黄金法则**:文章分享了如何设计和开发出成功的移动应用的策略,包括用户体验、功能设计、性能优化等方面的指导。 - **InMobi CEO:App怎么推广最有效?**:讨论了移动应用的营销策略,强调了...
- 探讨了淘宝在高并发场景下系统的架构设计和优化。 **3. Flickr架构经验** - 分享了Flickr在图片存储和检索方面的架构实践。 **4. Twitter运维经验** - **Metrics**: 监控系统性能指标。 - **配置管理**: 系统...
性能Nuclear是指使用Nuclear来实现分布式系统的性能优化。 两个设计上的 Tips是指分布式系统的设计上的Tips和建议。 Voldemort是指使用Voldemort来实现分布式系统的可扩展性。 Dynomite是指使用Dynomite来实现...