所以我们有这个产品,它在IE中真的很慢。 我们已经应用了IE人员自己建议的许多实践(like this和this),并尝试在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添加内容是否会使每个实例变慢?
答案 0 :(得分:5)
我会抓住一个可以让你更深入了解的分析器,你可以确切地看到String花了这么长时间。对于IE,特别是dynaTrace AJAX Edition(是的,它是免费的)。
我会在那里打开你的相同页面,它会给你一个树分解,这样你就可以看到正在发生的事情......以及一个热点,看看究竟什么是低级功能的时间最长。
答案 1 :(得分:0)
字符串在Javascript中是不可变的。这样做的意思是:
alert("hello" + " world");
正在创建三个字符串:
查找此类实例并修复这些实例可能会有所帮助。就像Nick说的那样,使用分析器确切地确定Strings特定代码导致的问题可能是最好的方法。