Yahoo!网站性能最佳体验的34条黄金守则——JavaScript和CSS
上一篇 / 下一篇 2008-07-15 17:45:47 / 个人分类:LAMP
英文地址:http://developer.yahoo.com/performance/rules.html
u:r9h&`J'x yy(}0中文地址:http://www.dudo.org/article.asp?id=216木铎校园 BBS 社区9VJ/d'wV}4a
在第一部分和第二部分中我们分别介绍了改善网站javascript:;" onClick="javascript:tagshow(event, '%D0%D4%C4%DC');" target="_self">性能中页面内容和服务器的几条守则,除此之外,JavaScript和CSS也是我们页面中经常用到的内容,对它们的优化也提高网站性能的重要方面:
W*j;`V1vF0CSS:木铎校园 BBS 社区9n1q4x9lO.`)r!}
JavaScript
0M2N%`*`1VY"]00bu"JE2G:t n1}0木铎校园 BBS 社区;A6D$T0Y+Q^B@
17、把样式表置于顶部
`H?%@3Ddu0 在研究Yahoo!的性能表现时,我们发现把样式表放到文档的<head />内部似乎会加快页面的下载速度。这是因为把样式表放到<head />内会使页面有步骤的加载显示。木铎校园 BBS 社区 t-pf.px3V"z:RB
注重性能的前端服务器往往希望页面有秩序地加载。同时,我们也希望浏览器把已经接收到内容尽可能显示出来。这对于拥有较多内容的页面和网速较慢的用户来说特别重要。向用户返回可视化的反馈,比如进程指针,已经有了较好的研究并形成了正式文档。在我们的研究中HTML页面就是进程指针。当浏览器有序地加载文件头、导航栏、顶部的logo等对于等待页面加载的用户来说都可以作为可视化的反馈。这从整体上改善了用户体验。
*[,O6\
_ya0 把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。木铎校园 BBS 社区k_.Bi!w(P5j*b
HTML规范清
楚指出样式表要放包含在页面的<head />区域内:“和<a />不同,<link
/>只能出现在文档的<head
/>区域内,尽管它可以多次使用它”。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文
档<head />内加载你的样式表。木铎校园 BBS 社区$rv1J_ ?j
J!Z&rxhmt018、避免使用CSS表达式(Expression)木铎校园 BBS 社区bO5T.x2Y/CD2^B"d)X
CSS表达式是动态设置CSS属性的强大(但危险)方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景颜色:
'hIe/?9{YH8~!w0 background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
y#M0JS)N.W0如上所示,expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用,因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。
^M]9~%_7Uf2fr;_0 表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时,就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。木铎校园 BBS 社区-F
e^9nw3[*R
一个减少CSS表达式计算次数的方法就是使用一次性的表达式,它在第一次运行时将结果赋给指定的样式属性,并用这个属性来代替CSS表达式。如果样式属性
必须在页面周期内动态地改变,使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式,一定要记住它们要计算成千上万次并且可能会对你
页面的性能产生影响。
