开发者

Javascript, IE, Strings, and Performance problems

So we have this product, and it's really slow in IE. We've alrea开发者_开发知识库dy applied a lot of the practices advised by the IE guys themselves (like this, and this), and try to sacrifice clean code for performance in the critical parts like DOM manipulation.

However, as you can see in this IE profiler screenshot..

Javascript, IE, Strings, and Performance problems

Just "String" is the biggest offender. Almost 750ms of exclusive time.

Does this mean IE is spending 750ms just instantiating Strings? I also read this stuff on the Opera dev blog:

A build script can remove whitespace, comments, replace strings with Array lookups (to avoid MSIE creating a string object for every single instance of a string — even in conditions)

But no more info regarding this. Anyone can clarify? It seems like IE has to create a full String instance every time you have " " in your code, which could explain this, but I don't know what the array lookup optimization would look like. BTW- we don't really do much of string concatenation anywhere in the code.

The library we use is MooTools 1.2.4

Any suggestions will be appreciated! Thx

UPDATE- I'm particularly interested in the tip mentioned above about "array lookup optimization". Our library is big (1MB) so it has a lot of strings in it, like any other JS code. But since our library is bigger than most, these Strings are actually causing speed issues.

Also, does anybody know if adding stuff to the String.prototype makes every instance slower?


I'd grab a profiler that will give you a deeper view, you can see exactly what about String is taking so long. For IE specifically there's dynaTrace AJAX Edition (yes, it's free).

I'd fire up your same pages in there, it'll give you a tree breakdown so you can see what's going on...along with a hot spots view of exactly what low-level functions are taking the longest.


Strings are immutable in Javascript. Meaning when you do something like this:

alert("hello" + " world");

three strings are being created:

  1. hello
  2. word
  3. hello world

Finding such instances and fixing those can be helpful. Like Nick said, using a profiler to pin down exactly what specific code with Strings is causing trouble is likely the best way to go.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜