返回博客首页
← 所有文章

NativeScript 3.0 预览

2017 年 2 月 23 日 — 作者:Georgi Atanasov

现在 NativeScript 2.5 已经发布,我们想分享更多关于我们下一个版本 - 3.0 版本的信息,预计在 4 月中旬发布。这是一个主要版本,包含重大的性能改进、许多修复和重要的新功能,我们相信我们的社区会喜欢。但为了实现它,我们今天想分享一些重要的变化。

免责声明:本文并非旨在详细描述 3.0 版本的技术细节,而是为了在社区中达成一致预期。我们计划发布早期 alpha 版本,这将帮助我们收集反馈并确保平滑的升级过程。


为什么是 3.0 而不是 2.6?

根据 Semver 规范,“主版本 X(X.y.z | X > 0)必须在向公共 API 引入任何向后不兼容的更改时递增”。因此,由于跨平台 JavaScript 层的公共 API 中的一些更改,我们正在递增主版本。


是否存在任何重大更改,它们会如何影响我?

是的,有一些与跨平台 JavaScript 抽象视觉树(类似于其他框架称为 Shadow DOM)的可扩展点、其属性模型以及 CSS 样式机制的解析和应用方式有关的重大更改。通常,这些更改会影响使用某些功能组的插件。我们研究了公开可用的插件,预计只有很小一部分会受到这些重大更改的影响。NativeScript 3.0 中即将出现的更改对 NativeScript 应用程序中的应用程序逻辑应该是完全透明的。这将与插件作者仔细验证。


为什么 3.0 中需要有重大更改?

这一切都始于我们对 JavaScript 层进行深度分析。我们试图在将更改应用于现有代码时修复各种问题,但这种方法是

  • 容易出错的;
  • 效率低下(这意味着它不允许我们获得最佳性能);
  • 并且使代码难以阅读和维护。

我们非常重视代码质量和框架稳定性。为了确保我们走在正确的道路上,我们实现了一个工作原型,验证了我们的新方法。然后,我们对公开可用的 NativeScript 项目和插件进行了分析,以了解这将如何影响我们的社区。基于该研究,我们认为影响是可以控制的,因此我们正在继续使用这种新方法。

我们将准备一份详细的白皮书,以深入描述这些更改并提供迁移到 NativeScript 3.0 的路径。我们还将与您分享 NativeScript 3.0 带来的新的性能相关改进和功能。例如,视觉树层次结构现在更加封装,并且更容易扩展。此外,声明自定义 CSS 属性现在变得非常简单,从而简化了属性定义,减少了任意代码。我们相信插件作者一定会欣赏这种单一的改进。


性能改进是什么?请给出数字!

到目前为止,我们已经进行了细粒度的“合成”测试。合成测试通过多次调用“方法 X”并将 2.5 和 3.0 的时间进行比较,来展示相对性能变化。对于大多数测试方法,速度提高了 50% 到 400%!

我们的下一步是对集成应用程序进行分析,以确定对 NativeScript 应用程序性能的总体影响,初步结果非常好。我们相信您会对改进的运行时性能和更快的加载屏幕 UI 感到满意。一旦我们在主分支中集成所有内容,我们将分享更多结果。


我是一名插件作者,如何针对 3.0 验证我的插件?

从 2 月底开始,我们将与社区专家和插件作者组织一系列会议,讨论这些变化,收集反馈,并了解我们如何帮助迁移。这些更改预计只会影响一定数量的 UI 插件。 如果您的插件与 UI 无关,则可能不需要进行任何额外的工作来使您的插件与 3.0 兼容。如果您的插件受到影响,我们致力于与社区合作,帮助创建必要的补丁。


我可以尝试使用 3.0,而不是正式发布?

是的!事实上,我们计划在 3.0 开始,在我们的持续发布中引入一个候选发布版本。我们的目标是在 3 月 22 日左右让社区可以使用 3.0 RC 版本,以便进行为期两周的测试和收集反馈。在 RC 版本之前,我们计划发布几个 alpha 版本,以帮助插件作者进行早期测试和实验。当然,我们将花费必要的时间来获得稳定版本,但我们当前的工作日期是 4 月中旬。对我们来说,以您应得的专业精神和质量处理此版本非常重要,这样我们就可以发布社区喜欢和有价值的版本。


您提到过“主分支”。这不会影响 @next 版本吗?

为了防止潜在的直接重大更改和混淆,我们暂时禁用了 @next 版本。我们目前正在通过内部 CI 基础架构运行 3.0 版本,并在必要时应用修复。一旦 3.0 版本发布,我们将恢复常规的 @next 版本,供任何想要获取最新版本的人使用。


我知道存在重大更改和改进,但新功能呢?

是的,当然!3.0 版本将包含几个新功能

  • Android 的本地快照构建(仅限 macOS):此功能将提高当前“快照”功能的性能优势。我们不会序列化整个核心模块和 Angular JavaScript,而是只序列化 WebPack 的 AoT 编译、捆绑和缩小后的输出。我们预计仅此一项改进就能使应用程序加载时间进一步提高。
  • 继续扩展 Chrome DevTools 功能:我们的目标是添加“页面代理”和“网络”选项卡。
  • Windows 的图形安装程序:这个新的安装程序将改善 Windows 上首次使用 NativeScript 的用户的本地机器设置。

结论

我们希望您对即将发布的主要版本感到兴奋!这将是整个项目的一个重要里程碑,因为工程团队解决了过去三年中发现的两个主要痛点:更好的属性和样式系统以及改进的可扩展性。每个软件产品在成熟过程中都会经历不同的阶段,有时重大更改是进入下一阶段的唯一可能方式。我们致力于尽最大努力,简化迁移路径。敬请关注未来几周的更多信息!