Javascript,IE,字符串和性能问题

时间:2010-03-13 00:00:04

标签: performance mootools javascript

所以我们有这个产品,它在IE中真的很慢。 我们已经应用了IE人员自己建议的许多实践(like thisthis),并尝试在DOM操作等关键部分中牺牲干净的代码来实现性能。

但是,正如你在IE浏览器截图中看到的.. alt text http://i43.tinypic.com/24g57c1.png

Just“String”是最大的罪犯。差不多750毫秒的独家时间。

这是否意味着IE花费750毫秒只是实例化字符串?我还在Opera dev blog上阅读了这些内容:

  

构建脚本可以删除空格,   注释,用Array替换字符串   查找(以避免MSIE创建   每个单独的字符串对象   字符串的实例 - 甚至在   条件下)

但没有更多关于此的信息。有人可以澄清吗?似乎IE必须在每次在代码中都有“”时创建一个完整的String实例,这可以解释这一点,但我不知道数组查找优化会是什么样子。 顺便说一句,我们在代码中的任何地方都没有做太多的字符串连接。

我们使用的库是MooTools 1.2.4

任何建议将不胜感激! THX

更新 - 我对上面提到的关于“阵列查找优化”的提示特别感兴趣。我们的库很大(1MB)所以它有很多字符串,就像任何其他JS代码一样。但由于我们的库比大多数都大,这些字符串实际上导致了速度问题。

此外,是否有人知道向String.prototype添加内容是否会使每个实例变慢?

2 个答案:

答案 0 :(得分:5)

我会抓住一个可以让你更深入了解的分析器,你可以确切地看到String花了这么长时间。对于IE,特别是dynaTrace AJAX Edition(是的,它是免费的)。

我会在那里打开你的相同页面,它会给你一个树分解,这样你就可以看到正在发生的事情......以及一个热点,看看究竟什么是低级功能的时间最长。

答案 1 :(得分:0)

字符串在Javascript中是不可变的。这样做的意思是:

alert("hello" + " world");

正在创建三个字符串:

  1. 你好
  2. 你好世界
  3. 查找此类实例并修复这些实例可能会有所帮助。就像Nick说的那样,使用分析器确切地确定Strings特定代码导致的问题可能是最好的方法。