一个会造成Firefox占用CPU的Javascript程序错误
cathayan.org版权所有,保留一切权利。转载请保留此说明。谢绝商业转载。
网友贴出一个网站,用Firefox访问会僵死,CPU占用100%,虽然不至于上系统挂掉,但Firefox自己会没有反应。我试了下,确实如此。看了它的页面,发现最后有一段Javascript,里面有个setInterval(),Google了一下,发现Mozilla那里近期刚解决了一个相关Bug,于是以为是真的Bug。再于是就下载了号称解决问题的20070531的Firefox 3.0alpha,来试这个网页和单独那段JS,发现没有效果。这才发现这个Bug其实说的是别的问题。
再看这段JS代码,发现那个setInterval写在函数体内可能有问题,把它拿出来,再试,果然好了,随意滚动,都不再有占用CPU的问题。这个网站在IE7上看,也一样要占用40%左右的CPU(可能机器比较破),但没有僵住。代码看下面,这里是把setInterval拿出来的样子。网上我放了两个HTML,一个是好的,一个是坏的,有兴趣可以试一下。坏的那个应该是有效果的吧,只能杀死,风险自负。
再看这段JS代码,发现那个setInterval写在函数体内可能有问题,把它拿出来,再试,果然好了,随意滚动,都不再有占用CPU的问题。这个网站在IE7上看,也一样要占用40%左右的CPU(可能机器比较破),但没有僵住。代码看下面,这里是把setInterval拿出来的样子。网上我放了两个HTML,一个是好的,一个是坏的,有兴趣可以试一下。坏的那个应该是有效果的吧,只能杀死,风险自负。
1
2 <SCRIPT>
3 set_y = 0;
4 distance = 0;
5 document.all['move_banner'].style.left = 900;
6 // move_div();
7 setInterval('move_div()');
8 function move_div()
9 {
10 var new_y;
11 new_y = document.body.scrollTop;
12 distance = new_y - set_y ;
13 if( set_y != new_y ) set_y += ( distance / 10 );
14 document.all['move_banner'].style.top = set_y+250;
15 // setInterval('move_div()');
16 }
17 </SCRIPT>
评论
防暴流氓:
于 2007-06-26 12:56:23 发表,来自:http://liumang.yo2.cn
我来评论
为保护您的隐私,请不要在评论框里填写自己的真实E-mail地址。
广告见之即删。带有任何赢利机构链接的评论都会删除。
广告见之即删。带有任何赢利机构链接的评论都会删除。

那个。。。
cpu立刻满了……
哎……
真有人写出这么烂的js。。。
我在sina看下视频 不允许js就不出来播放器
允许了 就奔100去了。。。
哎……太次了。
firefox控制台里面还提示xss脚本攻击呢。。
一大堆错误和警告……