存档

‘网页前端优化’ 分类的存档

前端工程师常用工具

2010年1月5日

虽然有一段时间不做前端工程师,但还是免不了做前端的思维,碰到了很好的前端实用工具帖还是忍不住转了过来。这个帖子被转了好多次了,也不知道原本的作者是谁,但无论是谁都是万分的感谢,没有您的整理也没有大家的方便。
帖子整理了前端工程师常用的工具手册以及一些著名的相关博客,是工作中不可缺少的资料。

概要:

在线工具集

阅读全文…

Css code, 网页前端优化, 软件工具 , , ,

前端工程师

2009年9月25日

下午要面试一个前端工程师,想了半天不知道出些什么样的题目,除了基础知识的应用,猫嗔觉得还应该考察一下前端对于没有遇到的问题的解决能力。于是上网想搜罗一些复杂而又不常见的题目。(其实面试的时候一下子解决不了问题没关系,因为大家自己做事的时候也知道,不过多n的人,都有可能需要google的时候,关键是看在解决问题中运用的基础知识方向是否正确和处理的方法。)

最终确定的题目就不多说了,但是在搜索中我觉得几个大家广为流传的面试题真的是很不错的,这里整理贴出,算是给去面试的朋友们一个参考。同时也想说,这几个面试题真的也是看基础是不是扎实了。

第一个是迅雷的面试题:
请用css实现下列要求的效果:
1.一个列表包含标题和时间
2.列表宽度固定,高度自由设置
3.时间紧跟标题,但标题过长时需要隐藏。

 
<!--
ul{list-style:none;}
#t1{float:left;overflow:hidden;height:24px; font-size:12px;}
ul li{overflow:hidden;line-height:24px;width:200px;}
.date{padding-left:10px; font-size:12px; color:#ccc;line-height:24px; position:absolute;}
-->
<ul>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
</ul>
 
<!--
ul, li {margin:0;padding:0;list-style:none;}
ul {float:left; background:#CCC; width:300px;}
li {font-size:12px;line-height:1.5em;padding-left:10px;position:relative;height:20px;overflow:hidden;padding-right:65px;}
li a {position:relative;left:0px;height:20px;float:left;text-decoration:none;}
span {position:absolute;top:0px;right:-65px;}
-->
<ul>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span> </a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,闪亮全场空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
</ul>
 
<!--
  *{margin:0;padding:0;}
  #muem ul{background:#FFC;width:310px;}
  #muem ul li{margin:5px;height:30px;line-height:30px;text-align:left;list-style:none;width:300px;overflow:hidden;display:inline-block;}
  #muem ul li a{font-size:12px;float:left;padding-right:60px;}
  #muem ul li span{color:#CCCCCC; font-family:Tahoma, Geneva, sans-serif; font-size:12px;display:inline-block;float:left;margin-left:-50px;}
-->
<div>
<div id="muem">
<ul>
	<li><a>杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练</a><span>2008-07-14</span></li>
	<li><a>最昂贵内衣惊艳出炉</a><span>2008-07-14</span></li>
	<li><a>[组图]让人喷饭的日喷饭的日</a><span>2008-07-14</span></li>
	<li><a>世界上头发最长的美女:人惊奇的</a><span>2008-07-14</span></li>
	<li><a>世界八大最喜欢吃人的的虹顺利产</a><span>2008-07-14</span></li>
	<li><a>亿万富翁的超级奢侈</a><span>2008-07-14</span></li>
	<li><a>日本小姐选美</a><span>2008-07-14</span></li>
	<li><a>素面朝天吓坏人,化妆虹顺利产</a><span>2008-07-14</span></li>
</ul>
</div>
</div>

Css code, JavaScript&JQuery, 网页前端优化, 软件工具 ,

用js添加书写css样式(批量操作)

2009年9月7日

用js控制css样式,能让网页达到良好的的用户体验甚至是动画的效果。
我们用js书写css样式通常会用下面的两种方式:

一般情况下我们用js设置元素对象的样式会使用这样的形式:

var element= document.getElementById(”id”);
element.style.width=”20px”;
element.style.height=”20px”;
element.style.border=”solid 1px red”;

但是上面的方法有一个缺点,样式一多,代码就很多;而且通过JS来覆写对象的样式是比较典型的一种销毁原样式并重建的过程,这种销毁和重建,都会增加浏览器的开销。

js中有一个cssText的方法:
语法为:obj.style.cssText(”样式”);
上面的代码我们可以修改成:
element.style.cssText=”width:20px;height:20px;border:solid 1px red;”;
这种写法可以尽量避免页面的多次reflow,提高页面性能。

JavaScript&JQuery, 网页前端优化

Yahoo!开发团队总结的网站性能优化的34条黄金守则(四)—图片、Coockie与移动应用

2009年2月9日

图片和Coockie也是我们网站中几乎不可缺少组成部分,此外随着移动设备的流行,对于移动应用的优化也十分重要。这主要包括:
Coockie:

  1. 减小Cookie体积
  2. 对于页面内容使用无coockie域名

图片:

  1. 优化图像
  2. 优化CSS Spirite
  3. 不要在HTML中缩放图像
  4. favicon.ico要小而且可缓存

移动应用:

  1. 保持单个内容小于25K
  2. 打包组件成复合文本


27、减小Cookie体积

HTTP coockie可以用于权限验证和个性化身份等多种用途。coockie内的有关信息是通过HTTP文件头来在web服务器和浏览器之间进行交流的。因此保持coockie尽可能的小以减少用户的响应时间十分重要。
有关更多信息可以查看Tenni Theurer和Patty Chi的文章“When the Cookie Crumbles”。这们研究中主要包括:

  • 去除不必要的coockie
  • 使coockie体积尽量小以减少对用户响应的影响
  • 注意在适应级别的域名上设置coockie以便使子域名不受影响
  • 设置合理的过期时间。较早地Expire时间和不要过早去清除coockie,都会改善用户的响应时间。

28、对于页面内容使用无coockie域名

当浏览器在请求中同时请求一张静态的图片和发送coockie时,服务器对于这些coockie不会做任何地使用。因此他们只是因为某些负面因素而创建的网络传输。所有你应该确定对于静态内容的请求是无coockie的请求。创建一个子域名并用他来存放所有静态内容。

如果你的域名是www.example.org,你可以在static.example.org上存在静态内容。但是,如果你不是在www.example.org上而是在顶级域名example.org设置了coockie,那么所有对于static.example.org的请求都包含coockie。在这种情况下,你可以再重新购买一个新的域名来存在静态内容,并且要保持这个域名是无coockie的。Yahoo!使用的是ymig.com,YouTube使用的是ytimg.com,Amazon使用的是images-anazon.com等等。

使用无coockie域名存在静态内容的另外一个好处就是一些代理(服务器)可能会拒绝对coockie的内容请求进行缓存。一个相关的建议就是,如果你想确定应该使用example.org还是www.example.org作为你的一主页,你要考虑到coockie带来的影响。忽略掉www会使你除了把coockie设置到*.example.org(*是泛域名解析,代表了所有子域名)外没有其它选择,因此出于性能方面的考虑最好是使用带有www的子域名并且在它上面设置coockie。

29、优化图像

设计人员完成对页面的设计之后,不要急于将它们上传到web服务器,这里还需要做几件事:

  • 你可以检查一下你的GIF图片中图像颜色的数量是否和调色板规格一致。 使用imagemagick中下面的命令行很容易检查:
    identify -verbose image.gif
    如果你发现图片中只用到了4种颜色,而在调色板的中显示的256色的颜色槽,那么这张图片就还有压缩的空间。

  • 尝试把GIF格式转换成PNG格式,看看是否节省空间。大多数情况下是可以压缩的。由于浏览器支持有限,设计者们往往不太乐意使用PNG格式的图片,不过这都是过去的事情了。现在只有一个问题就是在真彩PNG格式中的alpha通道半透明问题,不过同样的,GIF也不是真彩格式也不支持半透明。因此GIF能做到的,PNG(PNG8)同样也能做到(除了动画)。下面这条简单的命令可以安全地把GIF格式转换为PNG格式:
    convert image.gif image.png
    “我们要说的是:给PNG一个施展身手的机会吧!”

  • 在所有的PNG图片上运行pngcrush(或者其它PNG优化工具)。例如:
    pngcrush image.png -rem alla -reduce -brute result.png

  • 在所有的JPEG图片上运行jpegtran。这个工具可以对图片中的出现的锯齿等做无损操作,同时它还可以用于优化和清除图片中的注释以及其它无用信息(如EXIF信息):
    jpegtran -copy none -optimize -perfect src.jpg dest.jpg

30、优化CSS Spirite

  • 在Spirite中水平排列你的图片,垂直排列会稍稍增加文件大小;
  • Spirite中把颜色较近的组合在一起可以降低颜色数,理想状况是低于256色以便适用PNG8格式;
  • 便于移动,不要在Spirite的图像中间留有较大空隙。这虽然不大会增加文件大小但对于用户代理来说它需要更少的内存来把图片解压为像素地图。100×100的图片为1万像素,而1000×1000就是100万像素。

31、不要在HTML中缩放图像

不要为了在HTML中设置长宽而使用比实际需要大的图片。如果你需要:
<img width=”100″ height=”100″ src=”mycat.jpg” alt=”My Cat” />
那么你的图片(mycat.jpg)就应该是100×100像素而不是把一个500×500像素的图片缩小使用。

32、favicon.ico要小而且可缓存

favicon.ico是位于服务器根目录下的一个图片文件。它是必定存在的,因为即使你不关心它是否有用,浏览器也会对它发出请求,因此最好不要返回一个404 Not Found的响应。由于是在同一台服务器上,它每被请求一次coockie就会被发送一次。这个图片文件还会影响下载顺序,例如在IE中当你在onload中请求额外的文件时,favicon会在这些额外内容被加载前下载。

因此,为了减少favicon.ico带来的弊端,要做到:

  • 文件尽量地小,最好小于1K
  • 在适当的时候(也就是你不要打算再换favicon.ico的时候,因为更换新文件时不能对它进行重命名)为它设置Expires文件头。你可以很安全地把Expires文件头设置为未来的几个月。你可以通过核对当前favicon.ico的上次编辑时间来作出判断。

Imagemagick可以帮你创建小巧的favicon。

33、保持单个内容小于25K

这条限制主要是因为iPhone不能缓存大于25K的文件。注意这里指的是解压缩后的大小。由于单纯gizp压缩可能达不要求,因此精简文件就显得十分重要。

查看更多信息,请参阅Wayne Shea和Tenni Theurer的文件“Performance Research, Part 5: iPhone Cacheability - Making it Stick”

34、打包组件成复合文本

把页面内容打包成复合文本就如同带有多附件的Email,它能够使你在一个HTTP请求中取得多个组件(切记:HTTP请求是很奢侈的)。当你使用这条规则时,首先要确定用户代理是否支持(iPhone就不支持)。

网页前端优化 ,

Yahoo!开发团队总结的网站性能优化的34条黄金守则(三)—JavaScript和CSS

2009年2月9日

    除此之外,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,但是在页面下载完成后动态下载外部文件,在子页面中使用到这些文件时,它们已经缓存到浏览器了。

20、削减JavaScript和CSS

精简是指从去除代码不必要的字符减少文件大小从而节省下载时间。消减代码时,所有的注释、不需要的空白字符(空格、换行、tab缩进)等都要去掉。在JavaScript中,由于需要下载的文件体积变小了从而节省了响应时间。精简JavaScript中目前用到的最广泛的两个工具是JSMinYUI Compressor。YUI Compressor还可用于精简CSS。

混淆是另外一种可用于源代码优化的方法。这种方法要比精简复杂一些并且在混淆的过程更易产生问题。在对美国前10大网站的调查中发现,精简也可以缩小原来代码体积的21%,而混淆可以达到25%。尽管混淆法可以更好地缩减代码,但是对于JavaScript来说精简的风险更小。

除消减外部的脚本和样式表文件外,<script>和<style>代码块也可以并且应该进行消减。即使你用Gzip压缩过脚本和样式表,精简这些文件仍然可以节省5%以上的空间。由于JavaScript和CSS的功能和体积的增加,消减代码将会获得益处。

21、用<link>代替@import

前面的最佳实现中提到CSS应该放置在顶端以利于有序加载呈现。

在IE中,页面底部@import和使用<link>作用是一样的,因此最好不要使用它。

22、避免使用滤镜

IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。

完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

23、把脚本置于页面底部

脚本带来的问题就是它阻止了页面的平行下载。HTTP/1.1 规范建议,浏览器每个主机名的并行下载内容不超过两个。如果你的图片放在多个主机名上,你可以在每个并行下载中同时下载2个以上的文件。但是当下载脚本时,浏览器就不会同时下载其它文件了,即便是主机名不相同。

在某些情况下把脚本移到页面底部可能不太容易。比如说,如果脚本中使用了document.write来插入页面内容,它就不能被往下移动了。这里可能还会有作用域的问题。很多情况下,都会遇到这方面的问题。

一个经常用到的替代方法就是使用延迟脚本。DEFER属性表明脚本中没有包含document.write,它告诉浏览器继续显示。不幸的是,Firefox并不支持DEFER属性。在Internet Explorer中,脚本可能会被延迟但效果也不会像我们所期望的那样。如果脚本可以被延迟,那么它就可以移到页面的底部。这会让你的页面加载的快一点。

24、剔除重复脚本

在同一个页面中重复引用JavaScript文件会影响页面的性能。你可能会认为这种情况并不多见。对于美国前10大网站的调查显示其中有两家存在重复引用脚本的情况。有两种主要因素导致一个脚本被重复引用的奇怪现象发生:团队规模和脚本数量。如果真的存在这种情况,重复脚本会引起不必要的HTTP请求和无用的JavaScript运算,这降低了网站性能。

在Internet Explorer中会产生不必要的HTTP请求,而在Firefox却不会。在Internet Explorer中,如果一个脚本被引用两次而且它又不可缓存,它就会在页面加载过程中产生两次HTTP请求。即时脚本可以缓存,当用户重载页面时也会产生额外的HTTP请求。

除增加额外的HTTP请求外,多次运算脚本也会浪费时间。在Internet Explorer和Firefox中不管脚本是否可缓存,它们都存在重复运算JavaScript的问题。

一个避免偶尔发生的两次引用同一脚本的方法是在模板中使用脚本管理模块引用脚本。在HTML页面中使用<script />标签引用脚本的最常见方法就是:
      <script type=”text/javascript” src=”menu_1.0.17.js”></script>
在PHP中可以通过创建名为insertScript的方法来替代:
<?php insertScript(”menu.js”) ?>
为了防止多次重复引用脚本,这个方法中还应该使用其它机制来处理脚本,如检查所属目录和为脚本文件名中增加版本号以用于Expire文件头等。

25、减少DOM访问

使用JavaScript访问DOM元素比较慢,因此为了获得更多的应该页面,应该做到:

  • 缓存已经访问过的有关元素
  • 线下更新完节点之后再将它们添加到文档树中
  • 避免使用JavaScript来修改页面布局

      有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”

26、开发智能事件处理程序

有时候我们会感觉到页面反应迟钝,这是因为DOM树元素中附加了过多的事件句柄并且些事件句病被频繁地触发。这就是为什么说使用event delegation(事件代理)是一种好方法了。如果你在一个div中有10个按钮,你只需要在div上附加一次事件句柄就可以了,而不用去为每一个按钮增加一个句柄。事件冒泡时你可以捕捉到事件并判断出是哪个事件发出的。

你同样也不用为了操作DOM树而等待onload事件的发生。你需要做的就是等待树结构中你要访问的元素出现。你也不用等待所有图像都加载完毕。

你可能会希望用DOMContentLoaded事件来代替onload,但是在所有浏览器都支持它之前你可使用YUI 事件应用程序中的onAvailable方法。

有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”

网页前端优化 ,