В марте этого года Apple значительно улучшили производительность JavaScript в мобильном Safari, но эти улучшения не коснулись веб приложений сохраненных на домашнем экране. В iOS 5 эта ситуация будет исправлена и веб приложения на домашнем экране будут иметь идентичную производительность.
Apple представила движок Nitro JavaScript, как часть iOS 4.3, он использует компиляцию «на лету» (JIT), чтобы динамически конвертировать интерпретируемые JavaScript коды, в компилируемые ARM команды, которые выполняются в 2.5 раза быстрее. Движок меняет участки памяти где хранится код, с записываемой (для хранения информации) в исполняемую (для кода), чтобы выполнять код напрямую.
Веб приложения которые интенсивно используют JavaScript, получили значительное ускорение от этого улучшения. Но веб приложения сохраненные на домашнем экране эта участь обошла, так как они выполняются в процессе Web.app, в котором не доступны преимущества движка Nitro.
Некоторые полагают, что это сделано намеренно, чтобы создать впечатление, что родные приложения лучше и быстрее. Но на самом деле суть кроется в модели безопасности iOS, которая требует, чтобы исполняемый код был подписан цифровой подписью разработчика, и проверен Apple. А так как JIT это исполняемый код, то он по определению должен быть подписан и проверен, что в случае с веб приложениями, практически невозможно.
Но JIT работает в Mobile Safari, так как Apple сделала специальное исключение для него. Другими словами, Safari имеет разрешение для динамической генерации кода в защищенной памяти, для выполнения процессором устройства. В iOS 4.3 и выше, у Web.app нет такого разрешения, однако в iOS 5 есть. Так что, когда iOS 5 станет достоянием общественности, все веб приложения, которые вы сохранили у себя на рабочем столе, будут работать так же быстро, как и в Mobile Safari.
Еще один нюанс. Сторонние приложения, которые загружают веб страницы через WebKit представление, все равно не смогут воспользоваться преимуществами быстрого выполнения Nitro, из за того, что сгенерированный код, созданный как результат разбора не доверенной входной информации, загруженной из не проверенных источников, может быть опасным.
Подобным образом используются дыры в безопасности, для выполнения вредоносных программ, которые делают «Очень плохие вещи», такие как доступ к вашим личным данным, получение конфиденциальной информации, как номера кредитных карт или пароли банковских счетов.
Но почему Apple позволяет запуск динамически сгенерированного кода в самом Safari или в Web.app, если этот код может привести к нарушению политики безопасности пользователей? Вполне вероятно потому, что Apple контролирует весь код, который выполняется в этих двух программах и это гарантирует, что код инъекции не выйдет за пределы песочницы приложений iOS.
В конце концов, большинство пользователей не будут знать тонкости модели безопасности или рисков, связанных с динамической генерацией кода. Но разрешая Web.app запускать JavaScript с использованием Nitro, Apple находит разумный компромисс, между потенциальными рисками безопасности и известными преимуществами для пользователей.
По материалам [ArsTechnica]