作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Asad Jibran Ahmed的头像

Asad Jibran Ahmed

Jibran, 他写了一本关于用Django构建web应用的书, 是有10年以上经验的全栈web/移动开发人员吗.

以前在

条纹
分享

颤振是Google推出的一款混合移动应用开发平台.2018年末0. 虽然它是混合开发框架列表中的新成员, 它背后的伟大理念使它迅速在开发者中流行起来.

我在本文中的目标是探索这些想法,并写下我使用颤振的经验, 以及为什么我觉得这是混合移动应用开发的未来.

尽管市场上有更老的混合应用框架, 有越来越多的大公司选择颤振作为他们的移动应用程序. 而 颤振展示页面 列举了很多, 以下是一些在整个应用或重要功能中使用了颤振的著名应用:

  • 谷歌广告应用
  • GrabFood的GrabMerchant应用程序
  • 阿里巴巴集团的闲鱼应用,下载量超过5000万次
  • Nubank
  • The eBay 汽车应用

虽然颤振框架非常强大,但它仍然相对较新. 为了平衡, 我还将讨论在进行颤振跨平台开发之前应该注意的一些限制.

我的希望是,读完这篇文章后, 你很清楚颤振的利弊, 并有足够的信息来决定是否应该在下一个移动应用程序项目中使用颤振.

颤振优势(从发展的角度)

作为开发者, 这是我最熟悉的观点,也是我可以分享最多信息的观点.

快速学习曲线

对于开发人员来说,颤振的第一个惊喜就是它的入门速度非常快. 不到30分钟就能完成 安装过程 并建立一个工作开发环境. 从那里开始,你就可以 创建你的第一个颤振应用.

颤振也有很棒的编辑器集成. 我个人使用安卓 Studio,但也有 说明可用 设置IntelliJ, VSCode或Emacs.

清洁发展过程

与我之前使用混合应用框架的经验相比,开发过程也感觉 更清洁的. 例如, 当我使用Web的观点显示包含许多元素的列表时(大约100个左右), 我必须处理高CPU使用率, 尤其是当用户滚动列表时. 我用 离子骨架元素 专门为此制作的. 在颤振中,有一种可以接受的显示列表的方式 列表视图,它具有惊人的开箱即用性能.

生活重新加载

另一件让我惊喜的事情是实时重新加载功能. 作为一个全栈开发人员, 我习惯了像BrowserWatch这样的框架在浏览器中提供实时重载.

原生开发不具备这一点(但我认为苹果的SwiftUI在iOS开发方面取得了一些进展)。. 安卓和iOS开发者通常需要编写代码,然后等待代码编译并加载到设备或模拟器上,然后才能看到更改.

颤振(像反应本地一样)提供了一种实时加载机制, 开发者只要点击“保存”,应用代码就会重新加载到设备上.“这可以提供即时反馈,使开发速度大大加快.

表演。

应用程序的性能 颤振速度慢的另一个指标是什么 成为赢家.

由于颤振框架正在积极开发中, 有许多地方可以进行性能优化. 这在《欧博体育app下载》中就很明显.17, 在较新的iOS设备上提高了50%的渲染性能, 对于某些类型的工作负载,内存消耗最多可减少70%.

跨平台的一致性

在两个移动平台上真正一致的用户界面是颤振的另一个显著特点. 因为颤振使用自己的渲染引擎(稍后会详细介绍),所以UI是 完全 iOS和安卓也是如此. 开发人员不再需要纠结于特定于平台的样式问题,以使所有内容看起来与设计完全一致:这种保证是框架的一部分.

语言、工具和扩展

我认为应该在此提及的其他三个较小但仍很重要的方面是:

  • Dart是用于编写颤振应用程序的语言,入门非常简单. 但这也是 相当强大的语言,最初是Google打算用来取代JavaScript的. 如果开发人员有JavaScript或其他类c语言的经验, 他们在一两天内就会毫不费力地找到达特.
  • 默认工具链中包含了一个健壮的插件管理器(pub),并且有一个巨大的插件库可以通过 pub.dev 插件库.
  • 创建插件 利用本地平台的功能是很容易的, 因此,如果开发人员需要访问一个没有插件存在的平台功能, 编写代码并不太难.

颤振优势(从商业角度)

大多数企业认为颤振最大的优势之一是 只需要雇佣一个团队 适用于iOS和安卓平台. 然而,许多企业忽视的一个更重要的好处是 更快的上市时间. 利用前一节中概述的颤振应用程序开发的好处, 一个较小的开发团队可以使用颤振构建一个具有本机性能的漂亮应用程序,在两个平台上提供相同的用户体验.

颤振确实允许开发人员构建一些真正的 美观的用户界面. 看一看 最近的一个挑战 为联想智能时钟打造一个漂亮的时钟面UI. 获胜者, 粒子的时钟 由米克尔·安德森(Mickel Andersson)设计的,不仅是独特的优雅,它还展示了 在颤振中的动画性能如何.

对于正在考虑颤振但不确定是否正确的企业来说, 颤振可以增量利用:现有的移动应用程序可以一次集成颤振的单个部分. 事实上, 这就是大多数大公司开始使用颤振的方式, 通过在颤振中构建他们现有应用程序的一小部分, 一旦他们看到好处,就会慢慢更换其他部件.

使用颤振前需要考虑的限制

公平地说,颤振较新,所以不是 相当 和其他人一样经受了战斗的考验 混合移动应用框架 就像反应 native一样, 反应本地的终端用户覆盖了Facebook的移动应用, Instagram, Skype, 和不和谐.

默认答案是“我应该使用颤振吗??就目前而言,这是一个问题 谨慎的是的. 这是因为项目经理仍然需要考虑哪一个, 如果有任何, 他们需要的高级功能和 确保这些功能在颤振中可用 在使用它之前. 特别是, 一个团队可能需要哪些库和插件来构建一个特定的应用程序,这是值得一问的. 作为移动应用框架中的新条目, 颤振不像反应本地那样拥有广泛的库和插件.

例如, 颤振对相机的支持还没有完成, 与变焦和闪光控制尚未成为官方相机插件的一部分. 对我来说, 这并不是一个坏消息, 因为当我需要在我正在构建的应用程序中集成照片/视频功能时,我能够找到第三方插件.

你可能会错过的另一个主要插件是谷歌地图. 没有半原生的谷歌地图插件,虽然有 插件 允许将谷歌地图集成到你的颤振代码中, 它使用了颤振的功能(平台视图),这些功能仍处于开发人员的预览状态.

还有一件事不会影响很多项目, 但是你应该意识到, 现在是这样吗?, 颤振不支持任何3D功能. 该团队目前只专注于2D. 但大多数应用程序不使用任何3D功能, 所以这对大多数开发者来说不应该是一个问题.

我对颤振的一些经验建议

在过去的两年里发布了三款颤振应用, 我学到了很多东西,我希望在我刚开始工作的时候就有人告诉我. 我将在这里列出它们,希望它们能在您的颤振开发之旅中对您有所帮助.

颤振是 very 很容易上手. 我从一门精彩的课程开始 应用啤酒厂. 然而, 完成前几个模块后, 我认为我已经学到了足够多的东西,并开始构建我发布的第一个应用.

因为我的急躁, 在那门课上,我跳过了很多非常重要的模块, 我必须通过犯错误来学习这些模块的教训. 具体来说,我第一次使用的时候会做得更好 应用程序开发中的颤振 如果我学会了一些颤振的最佳实践:

  • 如何模块化和结构我的扑动应用程序代码.
  • 状态管理是如何工作的.
  • 如何认证用户并跟踪我的颤振应用程序的不同页面的认证状态.
  • 如何使用 重火力点消息 包.

我最终学会了所有这些东西,但必须先犯很多错误. 我重写了自己开发的第一款应用的重要部分. 用我的第二个颤振应用, 然而, 我从错误中吸取了教训,最终把工作做得更好、更快.

通过搜索Google,您可以轻松找到许多资源来学习我上面列出的概念. 你可以从网站的链接开始 了解更多 在颤振网站上的页面.

我发现的另一件事是,因为颤振是一家新公司, 没有一种模式可以用来构建应用程序. 来自一个主要基于django的开发职业, 我已经习惯了MVC是Django应用中使用的模式. iOS在其遵循的MVVM模式上也有明显的赢家. 安卓有一套关于如何最好地构建应用程序的指导方针.

颤振没有这样的架构模式能够在众多可能性中“胜出”. 这是一开始让我很难受的事情. 最后, 开发了许多颤振应用程序, 我认为最好选择一种架构并坚持使用它.

我个人使用 提供者 作为依赖注入和变更管理框架. 我的颤振应用也大致分为三类:

  1. 的观点,它们是构建应用程序(包括屏幕)的小部件. 类注入服务和模型 消费者 控件 提供者 包放入我的视图中,这样我就可以基于可用数据构建UI. The 消费者 Widget还在状态改变时重建视图,这就是我的应用程序对状态改变的反应.
  2. 模型,这是我用来保存结构化数据的普通旧对象.
  3. 服务/控制器,大多数业务逻辑都在这里. 这里还编写了API接口,它可以检索数据并向API发送数据. 这些API接口提供并接受模型来传递数据.

The 集团图书馆 也值得考虑作为替代 提供者 包. 它的架构略有不同, 它使用事件流和状态流来连接视图和模型.

方法管理状态的方法稍微复杂一些 提供者 图书馆, 但是,如果您有一个复杂的应用程序,需要对来自多个数据源的相同数据进行更改,并且需要对来自多个位置的这些更改做出响应,那么它是值得的.

如果你不使用BLoC或者 提供者,你必须想出一些办法 状态管理方法 在整个应用程序中,特别是在涉及通知的地方.

颤振与其他混合框架相比如何

反应本地

反应本地是迄今为止最流行、最成功的混合移动应用框架, 有很好的理由. 它采用了一个流行且制作精良的前端web框架, 反应, 并且允许数百万前端开发人员开始编写移动应用程序. 我相信,如果开发者有时间和动力去学习原生的iOS和安卓开发sdk,我们今天所拥有的许多优秀的手机应用将永远不会诞生.

但是颤振有多受欢迎,它能取代反应本地吗? 在这样的背景下, 我很有信心地说,颤振最终会成为领先的混合移动应用程序框架. 这有几个原因.

反应本地组件是用JavaScript代码描述的,并被转换成本地控件. 这意味着用户在iOS和安卓版本的应用程序中获得不同的UI感觉. 如果开发者试图为他们的用户创造一种原生体验,这是非常好的.

然而,这也意味着如果开发者想要拥有 相同的,一致的 跨两个移动平台的UI, 他们必须努力设计本地组件的样式,使其看起来相同, 或者使用不同的组件,在两个平台上提供相同的外观和感觉.

相比之下,颤振框架在所有受支持的平台上都提供了自己的小部件. 没有发生翻译, 因为颤振不依赖于本地控件来绘制UI. 相反,它使用自己的控件库. 颤振的小部件库确实提供了看起来像本机控件的小部件, 但它们完全是可选的.

这种方法有利有弊. 最大的好处是,你现在可以在两个平台上使用完全相同的应用. 但为了实现这个目标,你必须放弃一些东西.

因为颤振使用自己的小部件,而不是使用本地的小部件, 你不能使用过多的现有库来提供自定义控件,而你可以在反应本地上做最少的工作. 在反应本地中, 在任何现有的本机控件周围编写一个小包装器并使其工作是非常简单的. 这也是为什么现在没有稳定的Google Maps实现的原因.

然而, 嵌入本地控件的功能正在开发中,目前还处于开发者预览阶段, 这意味着您可以使用它,但可能不得不与bug作斗争. 一旦被释放, 与反应本地相比,它将填补颤振在功能上的这个相当大的漏洞.

当您想要创建一个全新的组件时,相同的颤振特性(使用自己的小部件库而不是本地部件库)也提供了巨大的好处. 在反应本地中, 您必须构建一个平台原生组件,并通过绑定将其导入到应用程序中.

使用颤振,您可以在Dart代码中构建自定义组件. 你可以完全控制UI,比如 CustomPainter 这样你就可以画出你需要的任何东西, 你有一个小部件库,可以让你实现自定义动画. 您不需要走出Dart代码库来构建这些自定义小部件.

我认为这是颤振最大的好处之一. 您可以通过Dart代码完全控制UI,并且不再需要担心学习您正在开发的平台的本机SDK.

Apache科尔多瓦

Apache科尔多瓦与其说是一个框架,不如说是一个浏览器包装器. 使用Cordova,您可以使用web技术构建应用程序:HTML、CSS和JavaScript. Cordova提供了一种在移动平台上运行web应用程序的方法,并在JavaScript中公开了本地平台api,以便您的应用程序可以与平台进行交互.

为Cordova构建了许多不同的框架. 我以前用过的一个很有名的例子是 离子的框架. 它提供了一组外观和行为类似于本地平台组件的UI组件. 然而,这些组件是使用HTML/CSS/JavaScript实现的.

使用Cordova和Ionic的开发经验非常好, 如果你已经是一名web开发人员,那么入门是非常快的. 因为您正在使用web技术构建应用程序, 你可以使用整个网络生态系统. 想想成千上万基于HTML/CSS/JavaScript的小组件和库吧, 你可以使用其中的大部分(如果不是全部的话). 这意味着你需要的大多数“小部件”已经在网上提供给你了.

不过,这也是一个缺点. 因为您使用web技术来构建应用程序, 我们需要非常小心地确保应用程序的外观和感觉像一个移动应用程序, 而不仅仅是一个网站被缩小到可以在移动设备上运行.

虽然Cordova是一个很好的方法来开发MVP,甚至是你的应用程序的最初几个版本, 我用颤振开发的第一个应用是Ionic应用的移植版. 我们得到的性能改进, 尤其是在有很多内容需要滚动浏览的视图中, 从第一次互动就能看出吗.

Xamarin的

我对Xamarian没有任何经验,所以我不能公平地比较两者. 然而,在我的研究过程中,我确实遇到了一个 伟大的文章 这是一个公平的比较.

文章以颤振和Xamarian打成平手结束, 我可以自信地说,如果我正在阅读它,并且必须在两个框架之间做出选择, 我会选择颤振因为它的亮点是我更看重的东西.

颤振技术概述

颤振:混合应用框架的“游戏引擎”

在混合移动应用程序框架中,颤振有一个独特的方法. 它不会将UI委托给本地平台,也不会使用web视图. 相反,颤振使用自己的渲染引擎来绘制UI. 这类似于游戏如何使用游戏引擎生成其ui的所有部分, 而不是使用本机控件.

颤振使用高性能,久经考验的 Skia 绘图的图形引擎 一切 在移动应用程序中. 使用Skia提供了我能想到的两个主要好处, 尽管我相信颤振背后的谷歌工程师有更多的想法:

  1. 你的应用将在所有平台上看起来完全相同,而无需针对每个平台进行定制.
  2. 您的应用程序将获得出色的性能, 类似于本地应用程序, 因为没有中间层必须将您的代码转换为本机平台代码来绘制小部件.

一切都是小部件

颤振文档将颤振描述为一个“react风格的框架”.“这在应用程序是如何通过组合更小的部件(组件 在反应术语中).

然而,颤振拿走了 一切都是小部件 比我使用过的任何其他框架都更进一步.

一个简单的例子是填充. 在大多数框架中,填充是UI元素的一个属性. 在颤动, 填充 一个小部件是否可以将其他小部件包装在自己内部并在其子小部件周围添加填充.

更独特的是 InheritedWidget 没有UI,不提供任何用户交互. 它的唯一工作是向小部件树中添加信息,以便在树的某个深度处, 你可以提取出这些信息.

例如,应用程序的根目录 MaterialApp 控件将身份验证服务注入小部件树 InheritedWidget. Now, 在树的深处,在别的书页上, 喜欢您的用户配置文件页面, 您可以使用一个方法提取该身份验证服务并使用它.

This 一切都是小部件 这种方法确实需要一些时间来适应. 但是一旦你熟悉了它, 它成为在应用程序中构建功能的一种强大方式.

颤振, Dart, and Digging Into the Source

颤振和Dart关系密切. 虽然核心渲染引擎是用C/ c++构建的,但这只是颤振的一小部分.

大部分的颤振代码库都是用Dart编写的 优秀的原因 为什么扑动团队选择它. 但对我来说最大的好处是,我可以轻松地查看框架的源代码——以及它提供的所有不同的小部件——并从中学习.

这是一个比许多开发人员意识到的更强大的优势. 我建议大多数开发人员尝试在他们的框架/库的代码中找到答案, 因为这不仅能帮助他们了解幕后发生的事情,还能让他们接触到高质量的产品, 设备精良的代码, 作为一名开发者,哪条路才是真正的成长之路.

本地平台互操作性

而颤振提供了UI层, 业务逻辑可以通过纯Dart包轻松处理, 访问本地平台的功能,如地理定位和相机控制, 使用酒吧.Dev的第三方包是最简单的策略.

但是,如果您需要的某些功能无法通过现有软件包获得, 自己写一篇 并不太难. 我自己没有构建任何平台原生包, 但出于好奇,我已经查看了许多源代码.

尽管我不是原生应用程序开发人员, 我基本上能够理解这些插件的原生部分,并了解它们如何通过消息传递连接到Dart运行时. 对于有经验的本地平台开发人员, 创建一个新包来利用本地功能将非常容易.

你应该在你的下一个项目中使用颤振吗?

希望, 本文为您提供了足够的信息来决定是否应该接受颤振跨平台开发. 我试图给出一个平衡的画面的颤振,列出了优点和缺点.

然而没有人能替你做决定, 关于如何在我的下一个移动应用程序中使用颤振,我可以给你一些临别建议. 如果颤振的优势可以提供应用程序所需的所有功能, 我会毫不犹豫地选择它.

这是因为, 除了颤振目前缺乏的几个领域, 在过去的一年里,在开发和启动五个不同的颤振应用程序时,我开始钦佩和依赖它的所有其他方面:

  • 颤振很容易上手
  • 使用一个从头开始设计的框架,以关注开发速度,可以获得速度提升
  • 由现成的Dart库和第三方包组成的丰富生态系统
  • 颤振是一种不同的但非常高效的应用程序开发方式 一切都是小部件 方法

这些提供 移动应用开发服务 如果他们还没认真看一下扑扑,你会觉得明智吗.

最后,我将指出颤振的最后一个优势:它拥有一些我使用过的库或框架中最好的文档. 这是罕见的,我谷歌一个问题,它没有回答的页面从 颤振自己的网站.


谷歌云合作伙伴徽章.

作为谷歌云合作伙伴,Toptal的谷歌认证专家可以为公司服务 对需求 为了他们最重要的项目.

了解基本知识

  • 颤振的用途是什么?

    颤振是一个来自谷歌的移动应用程序开发平台,用于快速构建, 原生移动应用程序. 颤振应用程序可以在iOS和安卓上运行,使用相同的代码,并在两个平台上呈现完全相同的用户界面.

  • 颤振是什么语言??

    颤振使用Dart编程语言, 哪个用于编写所有用户界面小部件和移动应用程序的业务逻辑.

  • 为什么谷歌要创建颤振?

    Google声称创建颤振的目标是提供一个UI工具包,可以用来创建移动应用程序,1)让开发人员完全控制应用程序的所有层, 2)提供接近本地的性能, 3)在所有支持的平台上看起来和工作都是一样的.

  • 颤振难学吗?

    颤振使用Dart语言,这是一种功能强大但平易近人的编程语言. 如果您熟悉基本的OOP概念并有一定的编程经验, 您可以轻松地学习Dart基础知识,并在短短两周内开始使用颤振构建应用程序.

  • 颤振值得学习吗??

    作为混合移动应用程序开发领域令人兴奋的新进入者, 颤振绝对值得学习. 它很容易上手,而且功能强大,可以用于大多数应用程序. 它已经在为谷歌等公司的关键业务应用程序提供支持, 阿里巴巴, 和Nubank.

  • 颤振有前途吗?

    颤振是一个稳定且活跃的项目,已经发布了v1.7,并在2020年5月进行了重大性能改进. 谷歌(Google)和阿里巴巴(阿里巴巴)等公司使用它来为其部分核心业务移动应用程序提供动力. 我们有理由期待颤振成为混合移动应用开发的未来.

  • 颤振是框架吗??

    是的,颤振是一个用Dart编写的开源框架.

  • 颤振是跨平台的吗?

    Yes, 颤振促进了跨平台开发,允许开发者从一个代码库创建安卓和iOS应用程序.

就这一主题咨询作者或专家.
预约电话
Asad Jibran Ahmed的头像
Asad Jibran Ahmed

位于 阿拉伯联合酋长国迪拜

成员自 2018年2月14日

作者简介

Jibran, 他写了一本关于用Django构建web应用的书, 是有10年以上经验的全栈web/移动开发人员吗.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

条纹

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.