在IE中JavaScript运行缓慢 - "JScript - window script block"是什么意思?

4

我们网站上的某些页面在IE上运行Javascript非常缓慢。

分析显示以下方法占用了大部分时间:

Method                          count inclusive time exclusive time)
 JScript - window script block  2,332      237.98       184.98
 getDimensions                      4          33           33
 eh                               213          32           32
 extend                           446          30           30
 tt_HideSrcTagsRecurs           1,362          26           26
 String.split                     794          18           18
 $                                717          49           17
 findElements                     104      184.98           14

"JScript - window script block"是什么意思?

我们正在使用jquery和prototype。


jQuery和Prototype...不用多说 - redsquare
我有同样的问题,但只在一台(“慢”的)计算机上:我的应用程序仅支持jquery 1.3。 - jonny
你是否正在使用 jQuery.noConflict() - vol7ron
5个回答

3

根据我的经验,Prototype 的主要问题如下:

$$ 选择器

尝试使用 $ 选择器downselect 而不是使用 $$ 选择器。

观察者模式

不要使用过多的观察者模式。如果你想为多个元素设置点击事件处理程序,请使用 ids 和全局文档观察器:

document.observe('click', this.clickHandler.bindAsEventListener(this));

clickHandler: function(e)
{
    var elt = e.element();
    while (Object.isElement(elt)) {
         switch (elt.id) {
              //do your stuff here
         }
         elt = elt.up(); //Bubbling
    }
}

在IE上不支持的CSS选择器功能

这段代码可以工作,但是性能会降低。

<input type="checkbox"/> //HTML
$$('[type=checkbox]') //Prototype

在这种情况下,使用类名将提高性能:

<input class="checkbox" type="checkbox"/> //HTML
$$('.checkbox') //Prototype

搜索DOM树

任何需要搜索DOM树的内容。


2
我知道这个问题很旧,但是对于从搜索结果找到它的任何人来说。 我非常确定,“JScript - window script block”是IE开发工具分析器用于指称在全局范围或匿名函数中执行的javascript脚本。

1

这里没有正确答案,因为没有关于他正在做什么的示例代码。

不过,首先要看的是循环中的DOM操作。每当你在循环中触碰DOM时,通常会影响到性能,因为DOM操作出了名的慢。

使用JavaScript,你可以通过像这样做(在这个示例中使用jQuery)大大减少循环中的DOM操作:

// make a container for your DOM additions
var $div = $('<div>'),
i, list = ['a','b','c','d'],
for (i = 0; i < list.length; i++) {
    $div.append( $('<span>').text(list[i]) );
}
// now you can append to the DOM once instead of in a loop
$('body').append($div);

这不仅仅与循环有关。它可以是任何重复调用的DOM操作,例如window.resize、scroll、mouse move或keyup等等。检查代码的执行情况并确定最慢的部分。从那里开始。

1

如果我没记错,窗口脚本块与IE的互联网安全设置有关,会阻止脚本执行。 "你注意到黄色栏了吗?"之类的问题应该出现在页面上。

这完全取决于您在IE中的安全区域设置,我想。

http://www.questiontools.com/faq_scriptwarning.html


1
WebKit的SunSpider测试(涵盖了广泛的纯JavaScript功能)。以下是详细情况:
JavaScript Performance Rundown
(来源:ejohn.org
正如您所看到的,IE在JavaScript上很慢。
更多信息请参见此处

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接