Web前端优化1-基础复习-内容篇(转)

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

  • 1) 合并js,css文件
  • 2) CSS Sprites:  通过CSS的background-image和 background-position属性来显示图片的不同部分;
  • 3) 图片地图:图片地图只有在图片的所有组成部分在页面中是紧挨在一起的时候才能使用。  导航栏,确定图片的坐标和可能会比较繁琐且容易出错,同时使用图片地图导航也不具有可读性,因此不推荐这种方法;(类滑动门??)
  • 4) 内联图象:  内联图像是使用data:URL scheme的方法把图像数据加载页面中。这可能会增加页面的大小。把内联图像放到样式表(可缓存)中可以减少HTTP请求同时又避免增加页面文件的大小。IE8 以下不支持 Data URI Scheme,不推荐使用。

2. 减少 DNS 查找 (Reduce DNS Lookups)

缓存DNS查找可以改善页面性能。这种缓存需要一个特定的缓存服务器,这种服务器一般属于用户的ISP提供商或者本地局域网控制,但是它同样会在用户使用的计算机上产生缓存。DNS信息会保留在操作系统的DNS缓存中(微软Windows系统中DNS Client Service)。大多数浏览器有独立于操作系统以外的自己的缓存。由于浏览器有自己的缓存记录,因此在一次请求中它不会受到操作系统的影响。 
      IE默认情况下对DNS查找记录的缓存时间为30分钟,它在注册表中的键值为DnsCacheTimeout。Firefox对DNS的查找记录缓存时间为1分钟,它在配置文件中的选项为network.dnsCacheExpiration(Fasterfox把这个选项改为了1小时)。 
      当客户端中的DNS缓存都为空时(浏览器和操作系统都为空),DNS查找的次数和页面中主机名的数量相同。这其中包括页面中URL、图片、脚本文件、样式表、Flash对象等包含的主机名。减少主机名的数量可以减少DNS查找次数。 
      减少主机名的数量还可以减少页面中并行下载的数量。减少DNS查找次数可以节省响应时间,但是减少并行下载却会增加响应时间。我的指导原则是把这
些页面中的内容分割成至少两部分但不超过四部分。这种结果就是在减少DNS查找次数和保持较高程度并行下载两者之间的权衡了。

3. 避免重定向 (Avoid Redirects)

跳转是使用301和302代码实现的。

下面是一个响应代码为301的HTTP头:       

HTTP/1.1 301 Moved Permanently
Location: http://example.com/newuri    Content-Type: text/html
      浏览器会把用户指向到Location中指定的URL。头文件中的所有信息在一次跳转中都是必需的,内容部分可以为空。不管他们的名称,301和302响应都不会被缓存除非增加一个额外的头选项,如Expires或者Cache-Control来指定它缓存。<meat />元素的刷新标签和JavaScript也可以实现URL的跳转,但是如果你必须要跳转的时候,最好的方法就是使用标准的3XXHTTP状态代码,这主要是为了确保“后退”按钮可以正确地使用。 
      跳转会降低用户体验。会拖延页面中所有元素的显示,因为在HTML文件被加载前任何文件(图像、Flash等)都不会被下载。 
      被忽略跳转现象:当URL本该有斜杠(/)却被忽略掉时。例如,访问http://astrology.yahoo.com/astrology 时,实际上返回的是一个包含301代码的跳转,它指向的是http://astrology.yahoo.com/astrology/  (注意末尾的斜杠)。在Apache服务器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash来避免。 


      连接新旧网站经常使用跳转。这种情况下往往要连接网站的不同内容然后根据用户的不同类型(如浏览器类型、用户账号所属类型)来进行跳转。

  一个可替代方法就是如果两者在同一台服务器上时使用Alias和mod_rewrite和实现。如果是因为域名的不同而采用跳转,那么可以通过使用Alias或者mod_rewirte建立CNAME(保存一个域名和另外一个域名之间关系的DNS记录)来替代。

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

“异步”并不异味着“即时”。例如,基于Web的Email客户端中,用户必须等待Ajax返回符合他们条件的邮件查询结果。

让我们来看一个例子:一个Web2.0的Email客户端会使用Ajax来自动完成对用户地址薄的下载。如果用户在上次使用过Email web应用程序后没有对地址薄作任何的修改,而且Ajax响应通过Expire或者Cacke-Control头来实现缓存,那么就可以直接从上一次的缓存中读取地址薄了。必须告知浏览器是使用缓存中的地址薄还是发送一个新的请求。这可以通过为读取地址薄的Ajax URL增加一个含有上次编辑时间的时间戳来实现,例如,&t=11900241612等。如果地址薄在上次下载后没有被编辑过,时间戳就不变,则从浏览器的缓存中加载从而减少了一次HTTP请求过程。如果用户修改过地址薄,时间戳就会用来确定新的URL和缓存响应并不匹配,浏览器就会重要请求更新地址薄。          

即使你的Ajxa响应是动态生成的,哪怕它只适用于一个用户,那么它也应该被缓存起来。这样做可以使你的Web2.0应用程序更加快捷。

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

1.实现拖放和动画的JavaScript。

2.隐藏部分的内容(用户操作之后才显现的内容)和处于折叠部分的图像也可以推迟加载

YUI Image Loader可以帮你推迟加载折叠部分的图片,YUI Get utility是包含JS和 CSS的便捷方法。比如你可以打开Firebug的Net选项卡看一下Yahoo的首页

6. 预载入组件 (Preload Components)

1.无条件加载:触发onload事件时,直接加载额外的页面内容。以Google.com为例,你可以看一下它的spirit image 图像是怎样在onload中加载的。这个spirit image图像在google.com主页中是不需要的,但是却可以在搜索结果页面中用到它。

2.有条件加载:根据用户的操作来有根据地判断用户下面可能去往的页面并相应的预加载页面内容。search.yahoo.com 中你可以看到如何在你输入内容时加载额外的页面内容

3.有预期的加载:载入重新设计过的页面时使用预加载。这种情况经常出现在页面,经过重新设计后用户抱怨“新的页面看起来很酷,但是却比以前慢”。问题可能出在用户对于你的旧站点建立了完整的缓存,而对于新站点却没有任何缓存内容。因此你可以在访问新站之前就加载一部内容来避免这种结果的出现。在你的旧站中利用浏览器的空余时间加载新站中用到的图像的和脚本来提高访问速度

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

YUI CSS utilities可以给你的布局带来巨大帮助:grids.css可以帮你实现整体布局,font.css和reset.css可以帮助你移除浏览器默认格式。它提供了一个重新审视你页面中标签的机会。

DOM元素数量很容易计算出来,只需要在Firebug的控制台内输入:document.getElementsByTagName('*').length

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

提高页面组件并行下载能力。确保你使用的域名数量在2个到4个之间。

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

iframe 是 SEO 的大忌。

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

对 Web 服务器 error 日志的不断跟踪能有效减少 404 错误。

CSS 与 Java Script 引起的 404 错误。

404浪费服务器资源(如数据库等)。最糟糕的情况是指向外部JavaScript的链接出现问题并返回404代码。

首先,这种加载会破坏并行加载;

其次浏览器会把试图在返回的404响应内容中找到可能有用的部分当作JavaScript代码来执行。

posted @ 2014-02-24 11:49  曹桦伟  阅读(166)  评论(0编辑  收藏  举报