8 сентября вышел релиз 3.2 замечательного фреймворка NativeScript для построения кроссплатформенных нативных мобильных приложений под Android и iOS.
Обновить можно командой
npm install -g nativescript
Основные изменения:
- Поддержка Xcode9 и iOS 11
- Web Worker-ы и с Webpack
- Огромное количество исправленных ошибок
- Новый экспериментальный режим GC для Android
Поддержка Xcode9 и iOS 11
iOS 11 (и, возможно, новый iPhone 8?) уже в планах! И уже очень скоро она будет на каждом iOS устройстве. Но что ещё важнее — ваши приложения NativeScript будут работать на ней без проблем. Можете прямо сейчас опробовать это с релизом 3.2 — в нём появилась официальная поддержка Xcode 9 и iOS 11.
В NativeScript CLI также было сделано много усовершенствований относительно процесса сборки. Вывод при сборке теперь не настолько подробный — он выводит только необходимую информацию. Мы также используем новую опцию allowProvisioningUpdates в Xcode.
Web Worker-ы и с Webpack
Далее, теперь вы можете использовать web workers при сборке с webpack! Вы можете использовать nativescript-worker-loader для внедрения сценария web worker-ов при сборке. Загрузчик будет использован в NativeScriptWorkerPlugin. Почитайте документацию к nativescript-worker-loader, там всё это расписано более подробно.
Огромное количество исправленных ошибок
Мы исправили более 50 ошибок с релиза 3.1.0! Вот наиболее крупные:
- Исправлено “Непредвиденное поведения при экспорте архива в iOS при использовании AdHoc или AppStore” #3020 (спасибо, Peter Staev!);
- Представления Android по-умолчанию кэшируются при навигации вперёд. Это должно улучшить производительность, особенно при навигации назад в Android;
- Добавлены события Blur и Focus (спасибо, Eddy!);
- Исправления в V8 GC из-за интеграции с Vue;
- Несколько ошибок исправлены в сценариях установки делающие их более стабильными на разных платформах и окружениях;
- Множество исправлений для улучшения стабильности в NativeScript Core Modules и CLI.
Новый экспериментальный режим GC для Android
Если вы читали пост от Panayot Cankov о производительности вы можете вспомнить про рутину MarkReachableObjects() включающуюся при передаче V8 GC и отнимающую более 0.5 секунд (даже до 1 секунды в Angular). В основном там то, что Java-экземпляры преждевременно не собирались Java GC, в то время, как они нужны на стороне JavaScript. Мы заметили, что эта задача нужна не во всех случаях — только тогда, когда нет никакой другой ссылки на экземпляр Java, и область действия — единственное, что должно поддерживать жизнь ссылки. А код в tns-core-modules написан таким образом, что он не учитывал область видимости, что должно поддерживать ссылку на эти экземпляры Java.
Мы ввели флаг, которым вы можете отключить MarkReachableObjects. Всего лишь нужно добавить такой кусок в app/package.json:
{
"android": {
"markingMode": "none"
}
}
Но имейте в виду, что этот флаг — экспериментальный! Естественно, мы усиленно тестируем его работу и уверены, что с ним не должно быть проблем в работе tns-core-modules, однако ошибки могут быть при работе со сторонними модулями или плагинами.
Как же поступить? Вы можете включить его и посмотреть не ухудшилась ли работа вашего приложения. Здесь можно более подробно почитать про это (включая измерения производительности).
Пишите нам
Надеемся, вам понравится этот релиз и мы будем благодарны если при появлении каких-либо проблем вы опишете их на нашей странице проблем на Github! Также ознакомьтесь с планом развития NativeScript, мы периодически обновляем его с перечислением того, что уже реализовано и что будет в следующих релизах.
Удачной работы с NativeScript!
По материалам «Announcing the Release of NativeScript 3.2»
Разработчик: java, kotlin, c#, javascript, dart, 1C, python, php.
Пишите: @ighar. Buy me a coffee, please :).