Why does Javascript run so slow on iPhone?

10,179

Solution 1

Javascript is not particularly slow, but the DOM is very slow.
I think it is the same as a desktop browser, but magnified.
I would check first all DOM manipulations, if they can't be optimized.

Another option, is to use a templating engine.
The main DOM manipulations are done through innerHTML injection, which is fast even on mobiles.

We've built a mobile version of our web app, and we use PURE (an open source JS lib we created) to render the HTML from JSON data, and it is very responsive.

We went the HTML5 way(not native) but I think generating the HTML could be done the same way when wrapped in PhoneGap.

Solution 2

I don't think Apple has created any special implementation of Javascript for Mobile Safari. Probably it's the same as or very similar to the desktop Safari.

These devices are small and have strict power constraints, so the CPU is slow.

Solution 3

Apparently iOS won't do JIT compilation of JavaScript (unlike Android) due to a security feature: http://daringfireball.net/linked/2010/07/22/android-ios-js-benchmarks

Good point about DOM access being the issue though: I don't know how much these benchmarks test DOM operations.

Share:
10,179

Related videos on Youtube

Tom Gullen
Author by

Tom Gullen

Me Web developer. Website http://www.scirra.com

Updated on April 28, 2022

Comments

  • Tom Gullen
    Tom Gullen about 2 years

    I've been researching writing an app for iPhone. I really like the look of PhoneGap which basically allows you to contain a webpage in an app. My skills are primarially in HTML/Javascript so this tool allows me to make the most of my skills without having to spend many hours learning how to write an app natively for the iPhone.

    I've been doing some tests on my iPhone for Javascript, and some seemingly simple examples run painfully slow. Really slow. This unfortunatly is a big problem for my task!

    Any work arounds? If I want to do anything interesting am I going to have to write a 'proper' app?

    An explanation on why Apple have seemingly created such a bad implementation of Javascript would be interesting as well (possibly to make more money? Less web apps = more apps in the store?)

    References

    http://ajaxian.com/archives/ipad-javascript-shockingly-slow

    • Joe Dargie
      Joe Dargie almost 14 years
      If you want to write code that runs fast on a mobile processor, yes, you are either going to have to write code in a non-interpreted language, or wait a few years until technology catches up with the exciting pictures in your head.
    • Joe Dargie
      Joe Dargie
      It's slow compared to traditional computers. But I can't rest my "laptop" on my lap in the summer due to the heat it kicks out, whereas you have to actually leave a running iPad in the sun to make it overheat. It's all trade-offs. iOS is the first commercial attempt I've seen to see just how simple you can make a modern OS whilst still keeping it useful. For now, that means slower JavaScript.
    • Joe Dargie
      Joe Dargie
      A little bit. You seem to think that there’s a lot of scope for JavaScript to perform faster on mobile phones. I doubt Apple’s got much motivation to make web browsing bad on the iPhone. They put a lot of marketing behind apps, but they also market the iPhone as the internet in your pocket. They’re not short of competitors.
    • Matt Long
      Matt Long
      Javascript has exactly zero importance if you build your app in Objective-C--which for all intents and purposes is the 'proper' way. The iPhone is incredibly capable. Have you seen it render OpenGL? If you use the right tool for the job, everything will work the way you want it to. If you're trying to make it conform to your own ideals, it's not going to be "capable". If you need to win a drag race, you probably shouldn't try to use a tractor just cause you're a farmer and it's all you've ever known. Just sayin' ;-)