Yahoo!网站性能最佳体验的34条黄金守则——JavaScript和CSS

作者:dudo 来源:dudo博客 时间:2008-05-29 13:34:00 

  在第一部分第二部分中我们分别介绍了改善网站性能中页面内容服务器的几条守则,除此之外,JavaScript和CSS也是我们页面中经常用到的内容,对它们的优化也提高网站性能的重要方面:

CSS:

  1. 把样式表置于顶部

  2. 避免使用CSS表达式(Expression)

  3. 使用外部JavaScript和CSS

  4. 削减JavaScript和CSS

  5. 用<link>代替@import

  6. 避免使用滤镜

JavaScript

  1. 把脚本置于页面底部

  2. 使用外部JavaScript和CSS

  3. 削减JavaScript和CSS

  4. 剔除重复脚本

  5. 减少DOM访问

  6. 开发智能事件处理程序

17、把样式表置于顶部

在研究Yahoo!的性能表现时,我们发现把样式表放到文档的<head />内部似乎会加快页面的下载速度。这是因为把样式表放到<head />内会使页面有步骤的加载显示。

注重性能的前端服务器往往希望页面有秩序地加载。同时,我们也希望浏览器把已经接收到内容尽可能显示出来。这对于拥有较多内容的页面和网速较慢的用户来说特别重要。向用户返回可视化的反馈,比如进程指针,已经有了较好的研究并形成了正式文档。在我们的研究中HTML页面就是进程指针。当浏览器有序地加载文件头、导航栏、顶部的logo等对于等待页面加载的用户来说都可以作为可视化的反馈。这从整体上改善了用户体验。

把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。

HTML规范清楚指出样式表要放包含在页面的<head />区域内:“和<a />不同,<link />只能出现在文档的<head />区域内,尽管它可以多次使用它”。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文档<head />内加载你的样式表。

18、避免使用css表达式(expression)

CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:

      background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" ); 

如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用,因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。

表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。

一个减少CSS表达式计算次数的方法就是使用一次性的表达式,它在第一次运行时将结果赋给指定的样式属性,并用这个属性来代替CSS表达式。如果样式属性必须在页面周期内动态地改变,使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。

19、使用外部JavaScript和CSS

很多性能规则都是关于如何处理外部文件的。但是,在你采取这些措施前你可能会问到一个更基本的问题:JavaScript和CSS是应该放在外部文件中呢还是把它们放在页面本身之内呢?

在实际应用中使用外部文件可以提高页面速度,因为JavaScript和CSS文件都能在浏览器中产生缓存。内置在HTML文档中的JavaScript和CSS则会在每次请求中随HTML文档重新下载。这虽然减少了HTTP请求的次数,却增加了HTML文档的大小。从另一方面来说,如果外部文件中的JavaScript和CSS被浏览器缓存,在没有增加HTTP请求次数的同时可以减少HTML文档的大小。

关键问题是,外部JavaScript和CSS文件缓存的频率和请求HTML文档的次数有关。虽然有一定的难度,但是仍然有一些指标可以一测量它。如果一个会话中用户会浏览你网站中的多个页面,并且这些页面中会重复使用相同的脚本和样式表,缓存外部文件就会带来更大的益处。

许多网站没有功能建立这些指标。对于这些网站来说,最好的坚决方法就是把JavaScript和CSS作为外部文件引用。比较适合使用内置代码的例外就是网站的主页,如Yahoo!主页和My Yahoo!。主页在一次会话中拥有较少(可能只有一次)的浏览量,你可以发现内置JavaScript和CSS对于终端用户来说会加快响应时 间。

对于拥有较大浏览量的首页来说,有一种技术可以平衡内置代码带来的HTTP请求减少与通过使用外部文件进行缓存带来的好处。其中一个就是在首页中内置JavaScript和CSS,但是在页面下载完成后动态下载外部文件,在子页面中使用到这些文件时,它们已经缓存到浏览器了。

标签:性能,yahoo,javascript,css
0
投稿

猜你喜欢

  • 新云4.0 模板通用标签说明

    2008-11-20 13:12:00
  • 用JS开发页面动画效果时的一个设计思路

    2008-02-03 15:12:00
  • MySQL 表字段属性

    2011-09-10 16:01:01
  • 09年QQ登录Banner之转变

    2009-02-16 12:53:00
  • ASP 禁用清除页面缓存

    2008-07-21 12:43:00
  • 了解WEB页面工具语言XML(五)好处

    2008-09-05 17:19:00
  • asp查询xml的代码实现无刷新 模糊查询

    2008-04-30 15:39:00
  • YUI学习笔记(1)

    2009-01-12 18:06:00
  • asp MD5加密方式使用建议

    2011-03-30 11:17:00
  • 两组字符串数据比较合并相同数据

    2008-07-31 17:27:00
  • asp利用xmlhttp抓取特定网页内容例子

    2008-10-10 12:58:00
  • ASP中数据库调用中常见错误的现象和解决

    2007-09-20 13:24:00
  • ASP开发中有用的函数(function)集合(1)

    2008-10-14 17:10:00
  • MySQL数据库锁机制的相关原理简介

    2010-04-22 15:34:00
  • 网页中空格的烦恼

    2011-04-28 09:26:00
  • 不唐突的JavaScript的七条准则[翻译]

    2008-12-09 13:33:00
  • 银行账号输入格式化, 支持部分浏缆器

    2007-09-26 18:27:00
  • 如何做一个文本搜索?

    2010-07-12 19:00:00
  • 通过排序引导用户的行为方式

    2008-05-17 09:30:00
  • 读取MySQL的log方法

    2011-07-01 12:04:57
  • asp之家 网络编程 m.aspxhome.com