自 Taro 2.0 起,咱们将会启动对整个 Taro 系统架构的革新,此次革新咱们将其称之为 Taro Next。Taro Next 革新完成以后,Taro 自己的拓展性、稳定性、可维护性都会大幅提升,相应地,使用 Taro 的开发者也会得到更好的开发体验,下降更多开发成本和学习成本。html
咱们目前已经完成了编译系统和小程序端的重构,经过 npm i -g @tarojs/cli@next
安装 Taro CLI 预览(alpha)版以后,使用 taro init
建立新项目便可体验 Taro Next 的新特性:前端
在旧版本的 Taro,咱们以微信小程序的开发规范为基准,使用 React/JSX 的方式来进行开发。而在 Taro Next,咱们把这一思路量化为一个编程模型:webpack
设微信小程序生命周期为一个 interface
,不一样的框架实例的生命周期虽然不尽相同,但咱们能够根据框架生命周期分别新建一个 class
去 implements
小程序生命周期的 interface
。相应地,小程序的组件/API/路由规范可使用一样的思路和模型让不一样框架的代码,运行在不一样的端上:git
因为 Taro Next 的架构出现了变化,表面上来看 Taro 从一个编译型框架变成了一个运行时框架。但究其内核是总体的设计思路出现了变化:从前是「模拟(mock
)」,如今是「实现(implements
)」。在 Taro Next 咱们实现了 React 在小程序中的完整支持,所以这类曾经的 Taro 没法运行的代码在 Taro Next 中彻底没有压力:github
import { View } from '@tarojs/components' *function* Page (props) { *const* view = React.createElement(View, null, props.text) return [view, React.Children.only(this.prosps.children)] }
在旧版本的 Taro 中咱们对 JavaScript 和 TypeScript 进行了 First Class 的支持,Taro Next 咱们更进一步,原理上最终能够编译到 JavaScript 的语言均可以用来构建 Taro 项目,如下是一个在 Vue 中使用 CoffeeScript 的例子:web
/// config.js/ { webpackChain (chain) { chain.merge({ module: { rule: { test: /\.coffee$/, use: [ 'coffee-loader' ] } } }) } }
<template> <view>{{ title }}</view> <view>{{ text }}</view> <input v-model='text' /> </template> <script lang="coffee"> export default props: title: type: String required: true data: -> text: 'text' </script>
运行时性能主要分为两个部分,一是更新性能,二是初始化性能。npm
对于更新性能而言,旧版本的 Taro 会把开发者 setState
的数据进行一次全量的 diff,最终返回给小程序是按路径更新的 data
。而在 Taro Next 中 diff 的工做交给了开发者使用的框架(React/Nerv/Vue),而框架 diff
以后的数据也会经过 Taro 按路径去最小化更新。所以开发者能够根据使用框架的特性进行更多更细微的性能优化。编程
初始化性能则是 Taro Next 的痛点。原生小程序或编译型框架的初始数据能够直接用于渲染,但 Taro Next 在初始化时会把框架的渲染数据转化为小程序的渲染数据,多了一次 setData
开销。小程序
为了解决这个问题,Taro 从服务端渲染受到启发,在 Taro CLI 将页面初始化的状态直接渲染为无状态的 wxml,在框架和业务逻辑运行以前执行渲染流程。咱们将这一技术称之为 预渲染(Prerender)
,通过 Prerender 的页面初始渲染速度一般会和原生小程序一致甚至更快。segmentfault
做为一个编译型框架,旧版本的 Taro 会进行大量的 AST 操做,这类操做显著地拖慢了 Taro CLI 的编译速度。而在 Taro Next 中不会操做任何开发者代码的 AST,所以编译速度获得了大幅的提升。
正由于 AST 操做的取消,Taro Next 也轻松地实现了 source-map
的支持。这对于开发体验是一个巨大的提高:
在作到以上各项特性的同时,咱们也没有丢掉原来就已经支持的特性:
这些特性基本涉及到了小程序开发的方方面面,虽然是预览版,但 Taro Next 已经具有了开发生产级小程序的准备,在 Taro 团队内部和兄弟团队也有多款小程序正在使用 Taro Next 进行开发。而在 Taro Next 的 H5 端和移动端,咱们还在进行紧张的开发。当 Taro Next 测试(beta)版发布时,使用 Taro Next 构建的一套代码,就能够同时运行在各类小程序、快应用、H5 和移动端当中。在将来,咱们还会把 Taro Next 的能力开放出去,让开发者只要写少许的接入代码,就可使用本身喜欢的任意框架(Angular
, Flutter
, svelte
等)开发小程序~~~~或多端应用。
正如咱们在 Taro 2.0 发布时所言:
节物风光不相待,桑田碧海须臾改。20 年代呼啸而来,下一个 10 年,不少框架都会死去,不少技术也会焕然而生,没有什么是不变的,惟一不变的只有变化,咱们能作的也只能是拥抱变化。
前端技术一直在高速发展,流行的技术和框架每一年都各不相同。但咱们始终没有忘记开发 Taro 的初心和使命:下降开发成本,提升开发体验和开发效率。
「不忘初心,牢记使命。」
这就是 Taro 团队拥抱变化的方式。
欢迎关注凹凸实验室博客:aotu.io
或者关注凹凸实验室公众号(AOTULabs),不定时推送文章: