代码之家  ›  专栏  ›  技术社区  ›  adamJLev

javascript、ie、字符串和性能问题

  •  3
  • adamJLev  · 技术社区  · 14 年前

    所以我们有这个产品,它在IE中的速度真的很慢。 我们已经应用了很多ie的建议( like this this ,并尝试牺牲干净的代码来提高关键部分(如dom操作)的性能。

    不过,正如你在这个IE档案器截图中看到的。 alt text http://i43.tinypic.com/24g57c1.png

    只是“弦”是最大的罪犯。几乎750毫秒的独家时间。

    这是否意味着ie花费750ms来实例化字符串?我也在 Opera dev blog :

    构建脚本可以删除空白, 注释,用数组替换字符串 查找(以避免MSIE创建 每个字符串对象 即使在 条件)

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

    我们使用的库是mootools 1.2.4

    任何建议都将不胜感激!谢谢

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

    另外,有人知道在string.prototype中添加内容是否会使每个实例变慢吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Nick Craver    14 年前

    我会找一个能让你看得更深入的剖析器,你可以确切地看到字符串花了这么长时间。特别是 dynaTrace AJAX Edition (是的,是免费的)。

    我会在那里启动你的相同页面,它会给你一个树分解,这样你就可以看到发生了什么…以及热点视图到底是什么低级函数花费最长。

        2
  •  0
  •   Anurag    14 年前

    字符串在javascript中是不可变的。意思是当你做这样的事情时:

    alert("hello" + " world");
    

    正在创建三个字符串:

    1. 你好
    2. 单词
    3. 你好世界

    找到这样的实例并修复它们可能会有帮助。就像尼克所说的,使用剖析器精确地确定哪些带有字符串的特定代码会导致麻烦,这可能是最好的方法。