windows.location.hash在IE8中分配速度很慢

BiA*_*AiB 16 javascript performance internet-explorer

我在修改IE8 for XP中的位置哈希时遇到了麻烦.简单地说:

self.location.hash = "whatever"
Run Code Online (Sandbox Code Playgroud)

需要大约800ms~1800ms

我不知道什么可以减慢它.我在其他一些网站上检查过相同的指令,但速度并不慢.

什么线索可以让它如此缓慢?对不起,我不能给出一个在线示例.


编辑:这是我在IE控制台中得到的,输入:

console.log( new Date().getTime() );
self.location.hash = "sfdsd";
console.log( new Date().getTime() );
Run Code Online (Sandbox Code Playgroud)

输出:

JOURNAL : 1326468325447
JOURNAL : 1326468327390
undefined
Run Code Online (Sandbox Code Playgroud)

对于单个分配,如果我读得正确,那将近2000毫秒:/.


EDIT2:因为它看起来不够清晰,更多的预编码代码:

var profileThat = function() {self.location.hash = "whatever"};
$('#keywatchHeader').click( profileThat );
Run Code Online (Sandbox Code Playgroud)

两次点击的分析结果:

profileThat   2   3475,00 3475,00
hidden    4   50,07   50,07   http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js   6 608   
eventHandle   8   3525,07 40,06   http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js   2 595   
get   4   20,03   20,03   http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js   6 419   
get   6   10,01   10,01   http://192.168.0.30/kw5/js/yui2/dom/dom.js  96
Run Code Online (Sandbox Code Playgroud)

EDIT3:

出于好奇,我在树上对节点号进行了一些测试,结果令人惊讶.经过这样的电话:

document.getElementsByTagName('*').length; //3621
$('#keywatchPanels').children().remove();
document.getElementsByTagName('*').length; //332
Run Code Online (Sandbox Code Playgroud)

之后,探测器给出600ms而不是每次通话1700ms!但我几乎没有节点号会影响标签写作.


(edit4):我发现了这个相关的问题:为什么这段Javascript代码这么慢?(但这里的答案只是"删除它")

BiA*_*AiB 16

最后,我在回答相关问题的评论中找到了答案: 为什么这段Javascript代码如此之慢?

呃,刚在博客上发现有同样问题的人.显然,如果您正在运行IE Developer Toolbar,那么速度会很慢.现在我怎么样了?-_-"

- Aistina 09年5月7日9:22

为什么我不早点呢?