Javascript在IE中运行缓慢 - “JScript - 窗口脚本块”是什么意思?

时间:2010-05-13 06:10:41

标签: javascript jquery prototypejs performance

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

分析似乎表明以下方法花费的时间最多:

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 - 窗口脚本块”有什么作用?

我们正在使用jquery和prototype。

5 个答案:

答案 0 :(得分:3)

根据我的经验,原型的主要问题是:

$$选择器

尝试使用$ selector代替downselect

<强>观察

不要使用许多观察。如果要为多个元素使用单击处理程序,请使用id和全局文档:

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树搜索的任何其他内容。

答案 1 :(得分:2)

我知道这个问题很老,但对于任何从搜索结果中找到它的人来说都是如此。

我很确定“JScript - 窗口脚本块”是IE开发人员工具分析器的术语,用于在全局范围或匿名函数中执行的javascript。

答案 2 :(得分:1)

如果我没记错窗口脚本集团与IE的互联网安全设置阻止脚本执行有关。 “你注意到了黄色的酒吧吗?”这样的问题应该出现在页面上。

我认为这完全取决于IE中的安全区域设置。

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

答案 3 :(得分:1)

  

WebKit的SunSpider测试(涵盖   多种纯JavaScript选择   功能)。这是休息   下:

JavaScript Performance Rundown http://ejohn.org/files/js-sunspider-all.sm.png

如你所见,IE浏览器的速度很慢。

来源和更多here

答案 4 :(得分: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或滚动或鼠标移动或keyup等。检查你的代码在做什么并确定最慢的部分。从那里开始。