JScript in Internet Explorer 8 Beta 1 for Developers


Making developers more productive through the design, development, and debug phases of web application development is one of the key goals for Internet Explorer 8. I’d like to take this opportunity to walk you through the features that the JScript team contributed to IE8 Beta 1 for Developers.


Let me start with the JScript language and the scripting engine optimization. Performance of the JScript engine has been our number one goal for the Beta1 release. With today’s rich AJAX web-applications, some of the most common JScript operations include String and Array operations. We received feedback from developers on the slow performance of the inbuilt string concatenation functions of JScript. This is not a new problem and quite a lot has been written about the issue (discussed in this Jscript blog post). With IE8, we fixed this problem in the JScript engine. String concatenation is now many times faster when compared to the previous JScript engine.


Prior to this optimization of string concatenation, most developers used Array join operations to achieve the same result. We were aware of this tradeoff and made sure that the Array operations are also optimized. In either scenario, developers will experience significant performance gains.


One of the challenges for the team was to understand the language compatibility and issues that existed in our JScript implementation of the ECMAScript Language Specification 3rd Edition. We have identified the JScript Deviations from ES3 (discussed in detail in this blog post).  This document will act as a starting point for the developers targeting cross browser web applications and helps in understanding the deviations in detail. In the near future, we intend to make JScript more compatible with ES3 specifications.


Another challenge for the JScript developers is the circular memory leak problem. We took a hard look at this problem and realized that this has to be fixed at the COM infrastructure. We implemented a design that bridges the gap between COM ref-counting and automatic garbage collection models. We extended the IDispatchEx interface to enable COM clients to simultaneously live in both the ref-counted and garbage collected worlds. The good news is that since this is impacting the underlying core infrastructure, many built-in COM components including IE8 DOM and custom COM components can take advantage of this.


If you are a web developer, you would have certainly used Firebug or Visual Studio for debugging web applications. Web developers can get started with Visual Web Developer Express for basic debugging or can leverage the power of Visual Studio Team System which is meant for complex testing and debugging scenarios. While we cover the whole spectrum through the Visual Studio family, one of the experiences lacking in Internet Explorer is a built-in JScript debugger.  The IE8 Developer Tools now offer an integrated JScript debugger that provides the basic set of debugging features. We believe this compliments Visual Studio debugging experience and is an important step towards making JavaScript developers more productive.  


We look forward to hearing about your experiences with JScript and IE8 Beta 1 for Developers.


Shreesh Dubey, Product Unit Manager, JScript

Comments (32)

  1. Looks really good. Hopefully IE8 will be released using some type of auto-update. Otherwise it would still mean to wait even longer for increased usage rates of the new version.

    Just curious. Do you plan any enhancements to the event layer? Stuff like addEventListener, capturing phase, DOMready events, activeElement, etc. still seem to be missing.

    For custom drag&drop, not to untypical in web applications, it would also be great to have some event like "viewportleave" to detect when the user "leaves" the application (with pressed mouse button).

    I am also highly interested in SVG/Canvas? Are there plans in this direction. Even with the published material there are still a lot of questions. Hopefully you can help us, the developers with informations regarding these topics.

  2. The cat’s finally out of the bag. IE 8 Beta is finally live and available publically for download. Here

  3. I am excited about built-in debugger.

    Please make it as good as Firebug is.

  4. IEBlog says:

    As Dean mentioned yesterday in his post announcing the availability of the Internet Explorer 8 Beta 1

  5. As Dean mentioned yesterday in his post announcing the availability of the Internet Explorer 8 Beta 1

  6. Joe says:

    So, does it now target MSIL ?  Is this Jscript.net under the hood or was that plan scrapped?

  7. Greg says:

    Thanks for this update. Are these improvements strictly with the core JScript engine? I’d like to see some info about plans to improve performance with the DOM scripting layer, as addressed in these articles:

    http://ejohn.org/blog/javascript-performance-stack/

    http://bdn.backbase.com/blog/sjoerd/performance-is-everything

    Keep up the good work.

  8. Kevin Daly says:

    To be honest, the JScript changes have been manifesting themselves so far as problems more than anything else.

    For example, the ASP.NET 2.0 Menu control (which works fine in Firefox as well as IE7) generates a JScript error in IE8 on attempting to expand the menu. Will the existing Visual Studio controls for ASP.NET be updated, or are we just expected to stop using them?

    The extrememly useful Calendar extender control in the AJAX Control Toolkit (which even works in Safari) produces a JScript error as soon as you enter the TextBox.

    At the moment the price of purity is looking like an awful lot of pain.

  9. Cyril DURAND says:

    What about JS 1.7 ? generator (yield), for each, and so on ?

  10. Sean Hogan says:

    Any chance that JScript getters and setters are going to make it into IE8 or IE9?

  11. don.raman says:

    @Dmitriy Nagirnyak: Can you elaborate a bit what do you mean by "as good as Firebug". I mean what features you think are important and available in Firebug and missing in IE8? This will help us a lot in prioritizing the task internally.

    @Joe: No, there is no JScript.NET/MSIL under the hood. The changes are made in existing engine to get all the performance gains. Stay tuned on this blog to learn more about how we have achieved it.

    @Greg: Stay tuned on this blog for further performance improvement plan/update.

    @Kevin: If this is something which is broken between IE7 and IE8, it is a bug and will definitely be looked at.

    @Cyril/Sean: No, there is no support for generators, iterators etc. in IE8 Beta1. Stay tuned for any further announcement on this blog.

    Thanks,

    Don.

  12. consumer4beta@hotmail.com says:

    Hopefully, for IE9 your team will do its job on JavaScript to make IE pass Acid3.

  13. RaFi says:

    How about taking SunSpider JavaScript Benchmark (http://webkit.org/perf/sunspider-0.9/sunspider.html) and posting some results?

  14. Nick says:

    I was under the impression that the standard event model would be implemented in IE 8 (at least many of the comments during the development of IE 7 lead me to think that).

    Considering the direction towards standards by default that IE 8 is taking, I think it is imperative that it also support the standard event model.

    Can you please provide some idea of which IE 8 beta will deliver the standard event model for javascript?

    As a wishlist item:  How hard would it be for IE to use the Webkit engine?  If we (the web development community) could coalesce around a single rendering engine and build as fancy a wrapper as you desire, it would obviously go a very long way toward interoperability.  Just imagine IE, Firefox and Safari all having an option to use the same rendering engine with all of the development resources enhancing it instead of everyone duplicating the effort.  Of course, this applies to javascript engines as well.

  15. cneller says:

    "Stay tuned on this blog to learn more about how we have achieved [improved JScript performance]"

    You guys already have made a significant investment in Managed JScript (http://blogs.msdn.com/deepak/archive/2007/05/02/managed-jscript-is-availaible.aspx).  When you address the "how" of the improved JScript performance, I would be curious to know why you didn’t build on top of the DLR and Managed JScript and if you have plans to do so in the future?

  16. Don Raman says:

    @someone: As Shreesh already pointed in his blog that, "In the near future, we intend to make JScript more compatible with ES3 specifications.". So yes, you can look forward for some effort in this from our side. However ACID3 test (though a great test) does not have all the ES3 compliance covered. This does not take anything out of the test but the point is ES3 compliance is much more than just passing ACID3 test.

    @RaFi: Some people have already ran SunSpider on various configuration. You can search the web for results. Also watch Gaurav’s blog at http://blogs.msdn.com/gauravseth/archive/2008/03/07/jscript-and-ie8-beta.aspx. He has covered few in this regard.

    @nick: I do understand your standard concern but it would be unfair for me to commit on any timeline. Please keep watching this space or the IE blog for more details.

    @cneller: Yes we have made significant investment in Managed JScript but again integrating it with browser will definitely have it’s own share of challeneges. Also not breaking the existing web world is one of the key expectation and this will play a big part in arriving to any decision. Please keep watching this space for more.

  17. Mike Patch says:

    The day after IE8beta1 came out (mar 6) I Ran sunspider JS benchmark against nightly builds of safari(webkit) and Firefox 3, gives a current snapshot of how this race is shaping up. (Older P4 2.8 Ghz, XPSP2)

    In order of performance:

    5869.6ms Firefox3 nightly mar 6

    6359.2ms Webkit (Safari) nightly mar 6

    15253.2ms IE8beta1 (standards mode)

    17751.6ms IE8beta1 (IE7 emulation mode)

    69048.2ms IE7

    Looks like IE7 emulation mode also gets a boost.  Full results for the IE8 vs IE7 tests are below for comparison.

    IE8beta1 (standards mode)

    ============================================

    RESULTS (means and 95% confidence intervals)

    ——————————————–

    Total:                 15253.2ms +/- 1.6%

    ——————————————–

     3d:                   1552.8ms +/- 1.7%

       cube:                540.4ms +/- 2.0%

       morph:               393.6ms +/- 2.2%

       raytrace:            618.8ms +/- 4.7%

     access:               2209.2ms +/- 1.5%

       binary-trees:        506.2ms +/- 2.1%

       fannkuch:            856.2ms +/- 4.0%

       nbody:               546.8ms +/- 4.4%

       nsieve:              300.0ms +/- 2.8%

     bitops:               1700.4ms +/- 2.7%

       3bit-bits-in-byte:   287.8ms +/- 3.6%

       bits-in-byte:        403.2ms +/- 9.2%

       bitwise-and:         587.6ms +/- 5.9%

       nsieve-bits:         421.8ms +/- 3.3%

     controlflow:           381.4ms +/- 2.9%

       recursive:           381.4ms +/- 2.9%

     crypto:               1028.2ms +/- 4.3%

       aes:                 428.0ms +/- 7.6%

       md5:                 306.2ms +/- 3.6%

       sha1:                294.0ms +/- 2.8%

     date:                 1312.6ms +/- 12.6%

       format-tofte:        637.4ms +/- 12.5%

       format-xparb:        675.2ms +/- 12.9%

     math:                 1390.4ms +/- 2.2%

       cordic:              562.2ms +/- 6.0%

       partial-sums:        353.0ms +/- 4.9%

       spectral-norm:       475.2ms +/- 2.2%

     regexp:                534.6ms +/- 1.6%

       dna:                 534.6ms +/- 1.6%

     string:               5143.6ms +/- 1.4%

       base64:             2778.2ms +/- 1.5%

       fasta:               646.8ms +/- 3.4%

       tagcloud:            550.0ms +/- 1.5%

       unpack-code:         581.0ms +/- 2.8%

       validate-input:      587.6ms +/- 1.8

    IE8beta1 (IE7 emulation mode)

    ============================================

    RESULTS (means and 95% confidence intervals)

    ——————————————–

    Total:                 17751.6ms +/- 1.5%

    ——————————————–

     3d:                   1815.6ms +/- 1.8%

       cube:                631.2ms +/- 3.5%

       morph:               462.6ms +/- 3.8%

       raytrace:            721.8ms +/- 1.2%

     access:               2512.6ms +/- 2.4%

       binary-trees:        622.0ms +/- 2.6%

       fannkuch:            940.2ms +/- 3.4%

       nbody:               609.4ms +/- 0.1%

       nsieve:              341.0ms +/- 4.8%

     bitops:               1943.2ms +/- 3.2%

       3bit-bits-in-byte:   331.0ms +/- 4.9%

       bits-in-byte:        443.4ms +/- 3.9%

       bitwise-and:         668.8ms +/- 3.7%

       nsieve-bits:         500.0ms +/- 11.9%

     controlflow:           443.6ms +/- 2.4%

       recursive:           443.6ms +/- 2.4%

     crypto:               1196.6ms +/- 2.7%

       aes:                 493.6ms +/- 3.6%

       md5:                 356.4ms +/- 7.0%

       sha1:                346.6ms +/- 4.7%

     date:                 1528.0ms +/- 2.1%

       format-tofte:        740.8ms +/- 1.4%

       format-xparb:        787.2ms +/- 2.8%

     math:                 1612.6ms +/- 2.7%

       cordic:              637.6ms +/- 3.4%

       partial-sums:        412.6ms +/- 2.6%

       spectral-norm:       562.4ms +/- 4.2%

     regexp:                602.8ms +/- 2.9%

       dna:                 602.8ms +/- 2.9%

     string:               6096.6ms +/- 0.5%

       base64:             3206.0ms +/- 1.5%

       fasta:               803.6ms +/- 2.2%

       tagcloud:            649.6ms +/- 1.7%

       unpack-code:         728.0ms +/- 2.4%

       validate-input:      709.4ms +/- 2.4

    IE 7

    ============================================

    RESULTS (means and 95% confidence intervals)

    ——————————————–

    Total:                  69048.2ms +/- 25.5%

    ——————————————–

     3d:                    2534.8ms +/- 4.6%

       cube:                 681.2ms +/- 1.5%

       morph:                769.2ms +/- 1.2%

       raytrace:            1084.4ms +/- 10.7%

     access:                3065.8ms +/- 1.0%

       binary-trees:         862.6ms +/- 1.9%

       fannkuch:            1090.8ms +/- 2.3%

       nbody:                584.2ms +/- 1.8%

       nsieve:               528.2ms +/- 1.6%

     bitops:                2734.2ms +/- 2.6%

       3bit-bits-in-byte:    724.8ms +/- 1.4%

       bits-in-byte:         703.0ms +/- 2.0%

       bitwise-and:          697.0ms +/- 7.4%

       nsieve-bits:          609.4ms +/- 2.2%

     controlflow:            893.8ms +/- 1.0%

       recursive:            893.8ms +/- 1.0%

     crypto:                1860.0ms +/- 3.7%

       aes:                  662.6ms +/- 6.1%

       md5:                  597.2ms +/- 3.5%

       sha1:                 600.2ms +/- 4.8%

     date:                  1625.2ms +/- 0.8%

       format-tofte:         750.0ms +/- 0.0%

       format-xparb:         875.2ms +/- 1.6%

     math:                  2115.6ms +/- 0.8%

       cordic:               803.2ms +/- 1.3%

       partial-sums:         500.2ms +/- 2.7%

       spectral-norm:        812.2ms +/- 0.0%

     regexp:                 487.4ms +/- 6.5%

       dna:                  487.4ms +/- 6.5%

     string:               53731.4ms +/- 32.6%

       base64:             32772.0ms +/- 53.7%

       fasta:                947.2ms +/- 6.3%

       tagcloud:            5693.6ms +/- 9.3%

       unpack-code:         1031.2ms +/- 2.7%

       validate-input:     13287.4ms +/- 0.8%

  18. Zum IE 8 werde ich jetzt nicht viel schreiben, aber eines ist sicher: Dadurch, dass der IE 8 im Standards-Mode (IE 7: Strict, IE 5: Quirks) wirklich absolut nach CSS 2.1 rendert und keinerlei Rückwärtskompatibilität zu bekannten Fehlnutz

  19. JScript Blog says:

    JScript Debugger in Internet Explorer 8 As Shreesh mentioned in his blog , Internet Explorer 8 has a

  20. As Shreesh mentioned in his blog , Internet Explorer 8 has a built-in JScript debugger. With Internet

  21. This is the first on an n part post series about my personal thoughts on this year’s MIX based on notes

  22. Leslee says:

    Please confirm if the IE8 team is aware of the

    ASP.NET 2.0 Menu control bug that Kevin mentioned in the comments.  This menu control does not work in IE8 Beta for our .NET and MOSS websites.  (It works fine in IE7, Firefox, etc.)  In IE8 it throws a Javascript error: "Unexpected call to method or property access."  I’ve been searching the forums and read the IE8 Beta release notes to see if anyone mentions this bug, but Kevin is the only one I’ve seen who mentions it.  Please make sure the IE8 team is aware of this serious bug.  Thanks.

  23. IEBlog says:

    In addition to the features for developers we showed in IE8 Beta 1 , we’ve been working on great new

  24. The IE blog whittles down the IE 8 Beta 2 date a bit further: In addition to the features for developers

  25. Ben Johnson says:

    Am I missing something here? Don’t you find it somewhat pathetic that in March of 2008 you guys are making a post about improving javascript performance? All while your competition is focusing on other features that don’t have to do with fundamental browser functions, because they got it right the first time.

    I just downloaded IE8 and ran various tests on it, and it isn’t even close to your competition in terms of speed. This isn’t rocket science. There are plenty of browsers out there that do this right. That means you have plenty of examples of how a browser should properly process javascript. That should make your task much easier. You have over 5 working examples of what you are trying to accomplish for God’s sake! Come on, you should be able to get it right. Seriously….It blows my mind that a multi billion dollar company can’t do this.

    How about looking at IE as a whole and fixing the core issues first, instead of dealing with problems that just put a bandaid over the real problem.

    Here is a basic test:

    table tr:hover {

    background-color: black;

    }

    Then create a table with 100 rows. Look at that same page in IE and then FireFox. It’s not hard to notice the difference. Changing the background color in IE is horribly slow. Firefox is instantaneous.

    Because of your laziness, you have cost developers thousands and thousands of hours. Probably millions. All of that could have been avoided had you of spent a few extra hours and did it right the first time.

    Why not save yourself the time and effort and just buy firefox?

  26. Brad Gronek says:

    Seconding the requests for getters / setters, support for DOM3 events (DOMAttrModified, DOMNodeInserted) and, finally, the standard event model.

    These have been hoped for for many years and are the subject of countless articles.  I’m really hoping that these catch-up features make it into IE.  

  27. Brad says:

    Seconding the requests for getters / setters, support for DOM3 events (DOMAttrModified, DOMNodeInserted) and, finally, the standard event model.

    These have been hoped for for many years and are the subject of countless articles.  I’m really hoping that these catch-up features make it into IE.  

  28. IEBlog says:

    One of the key themes for IE8 is developer productivity. IE8 Beta 1 improved developer productivity through

  29. BryanS says:

    DOM3 adoption after so long would go a long way to send a message that IE is taking the challenges of competition and the needs of developers seriously.  

  30. IEBlog says:

    During Beta1 and Beta2 pre-releases of IE8, we’ve blogged about the performance optimizations done in

  31. JScript Blog says:

    During Beta1 and Beta2 pre-releases of IE8, we’ve blogged about the performance optimizations done in

  32. Philip says:

    While you work with the script debugger – can’t you also provide a plugin to IE7 and IE6 for javascript debugging?