Javascript在IE中运行缓慢-什么是;JScript-窗口脚本块;什么意思?
在我们网站的一些页面上,Javascript在IE上运行速度非常慢 分析似乎表明以下方法花费的时间最多:Javascript在IE中运行缓慢-什么是;JScript-窗口脚本块;什么意思?,javascript,jquery,prototypejs,performance,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 e
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。如果我没记错的话,WindowScript bloc与IE的internet安全设置阻止脚本执行有关。“你注意到黄色条了吗?”类似的问题应该出现在页面上 我想这完全取决于IE中的安全区域设置 WebKit的遮阳板测试(包括 纯JavaScript的广泛选择 功能)。休息时间到了 向下:
(来源:) 正如您所看到的,IE在javascript上速度很慢
来源及更多。根据我的经验,原型的主要问题如下: $$选择器 尝试与或一起使用 观察 不要习惯于多观察。如果要为多个元素使用单击处理程序,请使用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
//HTML
$$('[type=checkbox]')//原型
在这种情况下,使用类名将提高性能:
<input class="checkbox" type="checkbox"/> //HTML
$$('.checkbox') //Prototype
//HTML
$$('.checkbox')//原型
在DOM树上搜索
任何其他需要DOM树搜索的内容。这里没有正确的答案,因为没有任何关于他所做工作的示例代码 然而,首先要看的是循环中的DOM操作。每当您在循环中接触DOM时,这通常对性能是一个坏主意,因为DOM操作的速度是出了名的慢 使用JavaScript,您可以通过执行以下操作(在本例中使用jQuery),大大减少循环中的DOM操作:
//为DOM添加创建一个容器
变量$div=$(''),
i、 列表=['a'、'b'、'c'、'd'],
对于(i=0;i
当然,这不仅仅与循环有关。可以是反复调用的任何DOM操作,如window.resize或scroll或mouse move或keyup等。检查代码正在执行的操作,并确定最慢的部分。从这里开始。我知道这个问题很老了,但对于通过搜索结果找到它的人来说
我很确定“JScript-window script block”是IE开发者工具档案器对在全局范围内或匿名函数中执行的javascript的术语。jquery和prototype….不要再说了,我也有同样的问题,但只在一台('slow')计算机上:我的应用程序是jquery 1.3。你在使用
jquery.noConflict()
?
// 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);