Web 前端优化最佳实践

面向内容的优化规则目前有 10 条。

1. 尽量减少HTTP请求 (Make FewerHTTPRequests)

作为第一条,可能也是最重要的一条。根据 Yahoo! 研究团队的数据分析,有很大一部分用户访问会因为这一条而取得最大受益。有几种常见的方法能切实减少HTTP请求:

  • 1) 合并文件,比如把多个CSS文件合成一个;
  • 2) CSSSprites 利用CSSbackground 相关元素进行背景图绝对定位;参见:CSS Sprites: Image Slicing’s Kiss of Death
  • 3) 图像地图
  • 4) 内联图象 使用 data: URL scheme 在实际的页面嵌入图像数据.

2. 减少DNS查找 (ReduceDNSLookups)

必须明确的一点,DNS 查找的开销是很大的。另外,我倒是觉得这是 Yahoo! 所有站点的通病,Yahoo!主站点可能还不够明显,一些分站点,存在明显的类似问题。对于国内站点来说,如果过多的使用了站外的 Widget ,也很容易引起过多的DNS查找问题。

3. 避免重定向 (Avoid Redirects)

不是绝对的避免,尽量减少。另外,应该注意一些不必要的重定向。比如对 Web 站点子目录的后面添加个 / (Slash) ,就能有效避免一次重定向。http://www.dbanotes.net/arch 与 http://www.dbanotes.net/arch/ 二者之间是有差异的。如果是 Apache 服务器,通过配置 Alias 或mod_rewrite 或是 DirectorySlash 能够消除这个问题。

4. 使得 Ajax 可缓存 (Make Ajax Cacheable)

响应时间对 Ajax 来说至关重要,否则用户体验绝对好不到哪里去。提高响应时间的有效手段就是 Cache 。其它的一些优化规则对这一条也是有效的。

5. 延迟载入组件 (Post-load Components)

6. 预载入组件 (Preload Components)

上面两条严格说来,都是属于异步这个思想灵活运用的事儿。

7. 减少DOM元素数量 (Reduce the Number ofDOMElements)

8. 切分组件到多个域 (Split Components Across Domains)

主要的目的是提高页面组件并行下载能力。但不要跨太多域名,否则就和第二条有些冲突了。

9. 最小化 iframe 的数量 (Minimize the Number of iframes)

熟悉SEO的朋友知道 iframe 是SEO的大忌。针对前端优化来说 iframe 有其好处,也有其弊端,一分为二看问题吧。

10. 杜绝 http 404 错误 (No 404s)

对页面链接的充分测试加上对 Web 服务器 error 日志的不断跟踪能有效减少 404 错误,亦能提升用户体验。值得一提的是,CSS 与 Java Script 引起的 404 错误因为定位稍稍”难”一点而往往容易被忽略。

Web 前端优化最佳实践第二部分面向 Server 。目前共计有 6 条实践规则。【注,这最多算技术笔记,查看最原始内容,还请访问:Exceptional Performance : Best Practices for Speeding Up Your Web Site 】

1. 使用CDN(Use a Content Delivery Network)

国内CDN的普及还不够。不过我们有独特的电信、网通之间的问题,如果针对这个作优化,基本上也算能收到CDN或类似的效果吧(假装如此)。【Tin 说国内CDN用的挺多,看看CDN厂商的市场就知道了,还没走入寻常百姓家】

2. 添加 Expires 或 Cache-Control 信息头 (Add an Expires or a Cache-Control Header)

各个浏览器都有针对的方案, Apache 例子【注意:下面的说明例子还不够精细,具体的环境上还要加一些调整】:

ExpiresActive On ExpiresByType image/gif “modification plus 1 weeks”

Lighttpd 启用 mod_expire 模块 后:

$HTTP["url"] =~ “".(jpg|gif|png)$” { expire.url = ( “” => “access 1 years” ) }

Nginx 例子参考:

location ~* ".(jpg|gif|png)$ { if (-f $request_filename) { expires max; break; } }

3. 压缩内容 (Gzip Components)

对于绝大多数站点,这都是必要的一步,能有效减轻网络流量压力。或许有人担心对CPU压缩对于CPU的影响,放心大胆的整吧,没事儿。Nginx 例子:

gzip on; gzip_types text/plain text/html text/css ext/javascript;

另外参见:

    IIS 如何启用 Gzip 压缩?

4. 设置 Etags (Configure ETags)

对于 Etag,可能是多数网站维护者都会忽略的地方。在这一系列优化规则出现之前,可能互联网上绝大多数站点都对这个问题忽略了。当然,Etag 对多数站点性能的影响并不是很大。除非是面向RSS的网站。【看到有朋友批评说写的简略,并且说IE不支持 ETag。明确说一下:IE 支持 ETag,倒是使用IIS要注意相关 Etag Bug。】

补充:我的意思是”很多网站在不注意的情况下都是打开 Etag 的,而没有网站关心如何用,消耗资源而不知。并不是说 Etag 不好,合理利用 Etag ,绝对能取得很好的收益.

5. 尽早刷新 Buffer (Flush the Buffer Early)

对这一条,琢磨了半天,貌似还是异步的思路。能更好的提升用户体验?

6. 对AJAX请求使用 GET 方法 (Use GET forAJAXRequests)

XMLHttpRequest POST 要两步,而 GET 只需要一步。但要注意的是在IE上 GET 最大能处理的URL长度是 2K。

Web 前端优化最佳实践第三部分面向 Cookie 。目前只有 2 条实践规则。

1. 缩小 Cookie (Reduce Cookie Size)

Cookie 是个很有趣的话题。根据 RFC 2109 的描述,每个客户端最多保持 300 个 Cookie,针对每个域名最多 20 个 Cookie (实际上多数浏览器现在都比这个多,比如 Firefox 是 50 个) ,每个 Cookie 最多 4K,注意这里的 4K 根据不同的浏览器可能不是严格的 4096 。别扯远了,对于 Cookie 最重要的就是,尽量控制 Cookie 的大小,不要塞入一些无用的信息。

2. 针对 Web 组件使用域名无关性的 Cookie (Use Cookie-free Domains for Components)

这个话题在此前针对 Web 图片服务器的讨论中曾经提及。这里说的 Web 组件(Component),多指静态文件,比如图片CSS等,Yahoo! 的静态文件都在 yimg.com 上,客户端请求静态文件的时候,减少了 Cookie 的反复传输对主域名 (yahoo.com) 的影响。

从这篇 When the Cookie Crumbles 能看出,MySpace 和 eBay 的 Cookie 都不小的,想必是对用户行为比较关心。eBay 前不久构造了 Personalization Platform ,就是从 Cookie 的限制中跳出来。

Web 前端优化最佳实践第四部分面向 CSS。目前共计有 6 条实践规则。另请参见 Mozilla 开发者中心的文章:Writing Efficient CSS

1. 把CSS放到代码页上端 (Put Stylesheets at the Top)

官方的解释我觉得多少有点语焉不详。这一条其实和用户访问期望有关。CSS 放到最顶部,浏览器能够有针对性的对HTML页面从顶到下进行解析和渲染。没有人喜欢等待,而浏览器已经考虑到了这一点。

2. 避免CSS表达式 (AvoidCSSExpressions)

个人认为通过CSS表达式能做到的事情,通过其它手段也同样能做到而且风险更小一些。

3. 从页面中剥离 JavaScript 与CSS(Make JavaScript andCSSExternal)

剥离后,能够有针对性的对其进行单独的处理策略,比如压缩或者缓存策略。

4. 精简 JavaScript 与CSS(Minify JavaScript andCSS)

如果没有 JavaScript 与CSS可能更好。但,这是不可能的,SO,尽量小点吧。语法能简写的简写。

5. 使用 <link> 而不是@importChoose <link> over @import

IE中 @import 指令等同于把 link 标记写在HTML的底部。而这与第一条相违背。

6. 避免使用Filter (Avoid Filters)

Web 前端优化最佳实践之 JavaScript 篇,这部分有 6 条规则,和CSS篇 重复的有几条。前端优化最佳实践,最重要的还是”实践”,要理解这东西容易得很,关键是要去”实践”,去”执行”,去”反馈”,去获取受益。

1. 脚本放到HTML代码页底部 (Put Scripts at the Bottom)

当一个脚本在下载的时候,浏览器干不了其它的事儿(串行了)。所以,把它扔到最后面去处理。对于一些功能性的脚本,可能实现起来有些两难。不过对于 国内网站来说,有很多使用 Google Analytics 服务进行网站数据分析的。这这一点来说,绝对可行的建议,放到页面最底下。

2. Make JavaScript andCSSExternal

参见 CSS 篇的描述

3. 精简 JavaScript 与CSS(Minify JavaScript andCSS)

参见 CSS 篇的描述

4. 移除重复脚本 (Remove Duplicate Scripts)

对于一些历史遗留站点或是论坛类的网站来说,这倒是比较常见的。接手维护人前后变化过多,每个人都有自己的一套。这就会带来一些潜在的麻烦。

5. 减少DOM访问 (MinimizeDOMAccess)

有三条指导建议:

  • 缓存已经访问过的元素 (Cache references to accessed elements)
  • “离线”更新节点, 再将它们添加到树中 (Update nodes “offline” and then add them to the tree)
  • 避免使用 JavaScript 输出页面布局–应该是CSS的事儿 (Avoid fixing layout with JavaScript)

6. Develop Smart Event Handlers

除了英文解释外,这里也提醒一下注意关于 Java Script 内存泄漏的问题。

Web 前端优化最佳实践第六部分面向 图片(Image),这部分目前有 4 条规则。在最近的 Velocity 2008 技术大会上,Yahoo! 的 Stoyan Stefanov 做的 Image Optimization: How Many of These 7 Mistakes Are You Making 也非常有参考价值。结合一起说一下。

1. 优化图片 (Optimize Images)

使用GIF、JPG 还是PNG格式的图片? 尽可能的使用PNG格式的图片,更多的功能,更小的尺寸(与GIF相比)。

对于PNG图片,考虑用 Pngcrush 或类似的工具进行优化。常见的工具如下表:

  • pngcrush http://pmt.sourceforge.net/pngcrush/
  • pngrewrite http://www.pobox.com/~jason1/pngrewrite/
  • OptiPNG http://www.cs.toronto.edu/~cosmin/pngtech/optipng/ (refer: 教程)
  • PNGOut http://advsys.net/ken/utils.htm

JPEG图片的优化工具:

  • jpegtran (http://jpegclub.org/)

必需要强调的是,图片设计的同学啊,请考虑设计面向 Web 的图片,不要动不动就设计超过可接受尺寸之外大家伙,这应该是一种习惯,而不是什么高超的技能,只需要记住就成了。

2. 使用CSSSprites 技巧对图片优化 (OptimizeCSSSprites)

之前提到过,简单的说就是”利用CSSbackground 相关元素进行背景图绝对定位”,把多次HTTP调用变为一次调用,更多参考:CSS Sprites: Image Slicing’s Kiss of Death

补充一下:对于这个技巧我曾经见到有人滥用的。把多个背景图片揉成一个,减少 HTTP 调用,这是一个很好的思路。但一定要记住这个大图片不能太”重”,我看到过 100 多K 的背景图。一个图片就把整个网站拖得很慢。比较好的例子可以参考雅虎关系的这个图.

3. 不要在HTML中使用缩放图片 (Don’t Scale Images inHTML)

更多的时候,可能是因为偷懒而没有制作合适大小的图片,如果是批量处理图片的话,可能一条 ImageMagic 命令(convert )就能搞定 。必须提及的是,看到太多的对图片拉伸很难看的页面,救救这些页面!

4. 用更小的并且可缓存的 favicon.ico (Make favicon.ico Small and Cacheable)

更小,可缓存,这两条可能都不是问题。问题是,太多站点根本没有 favicon.ico 。有的时候,判断独立域名的 Blog 是否专业,基本看一下是否有 favicon.ico 就差不多了。

Web 前端优化最佳实践最后一部分是针对移动应用的,其实只是针对 iPhone 的,目前只有两条规则。

1. 单个数据对象小于 25K (Keep Components under 25K)

这个似乎只是针对 iPhone 研究的。建议保持单个 Web 数据对象在 25 K 以下。为什么是 25K? Apple 官方信息指出可缓存到内存中的 Web 对象最大支持到 10M,但经过测试,发现也就是 25K 左右。

iPhone 在市场上的优异表现,让 Web 人员不得不考虑如何针对其进行优化。相信这部分内容也在不断变化中。

2. Pack Components into a Multipart Document

把Web 页面组件打包成一个多部分组成的文档。其目的是减少HTTP请求。

时间: 2024-10-05 02:49:45

Web 前端优化最佳实践的相关文章

Web前端优化最佳实践及工具集锦

前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快.对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升.下图显示了页面加载速度对于用户体验的影响. 你的Web页面的速度是否已经足够快了?其实可能还有很多可以提升的地方.Google和雅虎也提出了一些Web应用的前端优化建议,并发布了一些工具,你可以逐一检验你的Web应用,以便达到更高的性能. 这些优化不仅仅可以给用户提供更好的体验,从开发者角度来说,进行优化还可以减少页面的请求数.降低请求所占的带宽.减少资

移动端WEB前端开发最佳实践

移动端WEB前端开发最佳实践 Safari,Android Browser,Chrome都是以WebKit为核心的 移动设备和PC之间的页面现实存在差异(Safari中定义了viewport) 在移动设备和桌面端WEB前端开发中,事件绑定存在差异(移动触点) 页面控件设计存差异(点触不灵敏,虚拟键盘弹出框) 移动设备的网络带宽普遍比PC慢,移动页面要设置更简洁 PC页面兼容移动设备 使用流式布局 借助CSS Media queries(媒体查询)技术 使用合适的图片显示兼容方案 保持页面简洁,不

入门书籍 web前端开发最佳实践

高效web前端开发  book PageSpeed  出自google公司  是一款  免费的工具  性能分析 Timeline网页交互  和渲染  所要花费的时间 Profile谁  可以查看网页cpu以及内存占有的情况报告 Audits  中提供了各种资源及配置的优化建议和未使用的css规则的列表 代码的压缩 文本服务器开启Gzip压缩. UglifyJs  不仅仅是一个压缩工具,同事具有JS语法分析和代码美化工能 图片压缩工具  以在线工具居多  TinyPNG  压缩  PNG格式图片.

&lt;读书笔记&gt;《Web前端开发最佳实践》

P77 P89 CSS Reset P94 给CSS样式定义排序    排序工具:CSScomb P97 什么是CSS的权重?权重是指选择符的优先级 P100 工具:Sass Less P101 框架:YUI.ExtJS P102 hack代码,不易理解且维护困难 P103 条件注释 P104 em px % 2016.3.8 P110 CSS的匹配原理和我们习惯的匹配过程是相反的,它是从右到左进行匹配的. P111 CSS选择器定义的最佳实践(四个避免): 1.* { } 2.referenc

WEB前端开发最佳实践(2)

样式和结构分离 HTML页面链接一个CSS(最优),提高加载速度 HTML内嵌CSS(单一页面最佳,减少加载CSS样式文件的请求数目,加快加载速度 内联CSS样式,可以使用JS动态来统一修改,很少使用,JQ中使用其实现动画效果 在CSS样式文件中引用CSS文件,避免使用 添加JS禁用提示信息 使用noscrpt,HTML4只在body中起作用,HTML5中可以出现在head中,支持HTML,不支持XHTML 最好使用noscript,采用渐进增强的模式,平稳降级 添加必要的meta的标签 met

WEB前端开发最佳实践(3)

选择器注意 尽量不使用ID选择器 减少子选择器的层级(less和Sass的滥用) 使用组合CSS类选择器 兼容IE浏览器 兼容旧浏览器的代码,被称为hack代码 熟悉IE浏览器中常见的兼容样式 分离样式兼容代码 em,px,% px:相对尺寸,但由于同环境,又是绝对尺寸 em:应用元素上字体大小的两倍,%:相对于父元素的百分比 尽量设置相对尺寸 只有在可预知元素尺寸的情况下才使用绝对尺寸 使用em设置字体的大小 使用高效的CSS选择器 匹配原理:从右到左 避免使用通配符 避免使用标签和单个属性选

【WEB前端开发最佳实践系列】JavaScript篇

一.养成良好的编码习惯,提高可维护性 1.避免定义全局变量和函数,解决全局变量而导致的代码"污染"最简单的额方法就是把变量和方法封装在一个变量对象上,使其变成对象的属性: 1 var myCurrentAction = { 2 length : 0 , 3 init : function(){}, 4 action : function(){} 5 } 还可以将全局的变量包含在一个局部作用域中,然后在这个作用域中完成这些变量的定义以及变量使用的逻辑: 1 (function(){ 2

《web前端开发最佳实践》党建 摘要

1. 各种调试工具.ie dev toolbar. chrome developer tools. firebug .fiddler 2. 压缩合并工具 3. fis 4. 性能工具yslow.  pagespeed 5. 压缩 gzip js压缩 uglifyjs. yui compressor.  closoure compiler. webstorm file watcher css 压缩   css compressor 6. 规范 层级id 公开函数首字母大写 $前缀 输入框的tab顺

paip.前端加载时间分析之道优化最佳实践

1.另存为 ,查看文件尺寸..和图片. 2.view the 另存为的htm静态的文件单个的加载,看时间...可以排除编程语言的问题and 数据库.. ##页面加载速度对于用户体验的影响. 1秒内,最好的.. 5秒, >>5秒 ,坏的.. ##index 一.Google的Web优化最佳实践 二.雅虎的Web优化最佳实践 2. 服务器优化 4. CSS优化 5. JavaScript优化 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源