Weboví vývojáři nasazují na Apple, že ve svém operačním systém prosazuje zejména nativní aplikace a na webové aplikace kašle. Dokládají to tím, že se jejich aplikace spouštějí mnohem pomaleji než je tomu na stejném zařízení přes Safari a chybí podpora například pro asynchronní cachování obsahu či HTML5 Application Cache, což znemožňuje fungování aplikace v době, kdy není dostupný internet. Pro vývojáře, kteří chtějí mít svou aplikaci k dispozici i na jiné platformy je programování pomocí HTML5 jedinou možností, jak nemuset programovat několik aplikací pro různé platformy.
Abychom však pochopili problém, kterému čelí vývojáři, musíme se podívat na to, jakým způsobem Apple vylepšil Mobilní Safari a jak funguje Nitro JavaScript engine. Pomocí techniky nazývané just-in-time kompilace se převádít JavaScriptový kód do nativního ARM kódu. Během této operace se také převede oblast paměti ze stavu zapisovatelné (pro ukládání dat) na spustitelnou (pro kód), aby bylo možné kód vůbec spustit. Tento dynamický způsob generování kódu a spouštění je mnohem rychlejší než technika, kterou používala předchozí verze JavaScriptu v iOS 4.2. Podle testů až 2,5 krát rychlejší.
V základním nastavení, iOS nedovoluje aplikacím automaticky přepínat mezi pamětí zapisovatelnou a spustitelnou. Je to bezpečnostní funkce, protože toto je přesně způsob, jakým útočí různý malware. iOS to však nezakazuje absolutně - například mobilní Safari má udělenou výjimku, právě kvůli optimalizaci JavaScriptu, to je však jediné.
Aplikace, které používají prohlížeč pomocí UIWebView, podle všeho nemají práva pro spouštění kódu uloženého v zapisovatelné paměti, takže JavaScript běží stejně jako běhal v iOS 4.2. Podobně se chovají také aplikace uložené do iOS SpringBoard. (Toto tvrzení ověřovali a potvrdili na arstechnice)
Jeden z vedoucích vývojářů za Gnome a Mono projektu řekl ArsTechnice: "Vypadá to, že lidé připisují zlomyslnosti to, co je snadno vysvětlitelné historí - iOS nikdy nedovoloval generování uživatelského kódu na požádání a tento přístup zabraňoval využití just-in-time kompilace celá léta. Prozatím ladící programy a Safri získali tuto schopnost a oba mají speciální parametr, který umožňuje změnit zapisovatelnou paměti na spustitelnou. Ostatní aplikace k tomu nemají přístup - ani Mono, ani Java, ani Lua, ani JavaScript nebo jakýkoliv jiný runtime kompilátor nebo knihovna, která generuje dynamický obsah."
Všechny webové aplikace pracují prakticky stejně rychle, jako fungovaly pod iOS 4.2, jednoduše však nefungují rychleji. V celoobrazovkovém režimu jsou však i další problémy, například nefungují správně cache. Webové aplikace mohou použít lokální cache, která umožňuje stažené aplikaci pracovat bez internetu. Chyba v iOS 4.3 však zabraňuje těmto aplikacím bez internetu pracovat.
Apple o těchto problémech ví a byly oznámeny jako chyby. Podle Matta Asayho, který je vice presidentem vývoje pro mobilní Web framework Strobe, Apple nemá žádné plány na jejich odstranění. Místo toho označili chyby jako "not to be fixed by exec order", tedy "nebude opraveno na příkaz vedení". Asay z toho odvodil, že se jedná o úmyslné "opmenutí", které má přinutit vývojáře programovat nativní aplikace distribuované přes App store, nad kterým má Apple absolutní kontrolu.
Na druhé straně Icaza si myslí, že se za tím skrývají skutečné technické problémy a že webové aplikace nakonec budou moci využívat vylepšení JavaScriptu. Konec konců, jedná se o první OS s Nitro v mobilním Safari a je pravděpodobné, že se jedná o chybu nebo omezení.
Osobně se však domnívám, že se jedná od každého kousek. Apple samozřejmě může povolit webovým aplikacím využít JIT kompilaci, avšak otevírá to pak platformu webovým útokům. To samozřejmě nemůže Apple povolit, dost na tom, že se lidi dostávají do systému přes Safari, představte si, jaké by to bylo, kdyby se mohli dostat do systému přes jakoukoliv aplikaci staženou z webu.
Odkazy z novinek: