首页 > 其他分享 >Taro架构构析(1):多端框架分析,Taro WePY uni-app对比

Taro架构构析(1):多端框架分析,Taro WePY uni-app对比

时间:2023-04-09 21:33:53浏览次数:50  
标签:多端 Taro 框架 app WePY React DSL https

多端框架分类

全包型

这类框架最大的特点就是从底层的渲染引擎、布局引擎,到中层的 DSL,再到上层的框架全部由自己开发,代表框架是 Qt 和 Flutter。这类框架优点非常明显:性能(的上限)高;各平台渲染结果一致。缺点也非常明显:需要完全重新学习 DSL(QML/Dart),以及难以适配中国特色的端:小程序。

这类框架是最原始也是最纯正的的多端开发框架,由于底层到上层每个环节都掌握在自己手里,也能最大可能地去保证开发和跨端体验一致。但它们的框架研发成本巨大,渲染引擎、布局引擎、DSL、上层框架每个部分都需要大量人力开发维护。

 

Web 技术型

这类框架把 Web 技术(JavaScript,CSS)带到移动开发中,自研布局引擎处理 CSS,使用 JavaScript 写业务逻辑,使用流行的前端框架作为 DSL,各端分别使用各自的原生组件渲染。代表框架是 React Native 和 Weex,这样做

优点有:

  • 开发迅速

  • 复用前端生态

  • 易于学习上手,不管前端后端移动端,多多少少都会一点 JS、CSS

缺点有:

交互复杂时难以写出高性能的代码,这类框架的设计就必然导致 JS 和 Native 之间需要通信,类似于手势操作这样频繁地触发通信就很可能使得 UI 无法在 16ms 内及时绘制。React Native 有一些声明式的组件可以避免这个问题,但声明式的写法很难满足复杂交互的需求。

由于没有渲染引擎,使用各端的原生组件渲染,相同代码渲染的一致性没有第一种高

JavaScript 编译型

这类框架就是我们这篇文章的主角们:Taro、WePY 、uni-app 、 mpvue 、 chameleon,它们的原理也都大同小异:先以 JavaScript 作为基础选定一个 DSL 框架,以这个 DSL 框架为标准在各端分别编译为不同的代码,各端分别有一个运行时框架或兼容组件库保证代码正确运行。

这类框架最大优点和创造的最大原因就是小程序,因为第一第二种框架其实除了可以跨系统平台之外,也都能编译运行在浏览器中。(Qt 有 Qt for WebAssembly, Flutter 有 Hummingbird,React Native 有 react-native-web, Weex 原生支持)

另外一个优点是在移动端一般会编译到 React Native/Weex,所以它们也都拥有 Web 技术型框架的优点。这看起来很美好,但实际上 React Native/Weex 的缺点编译型框架也无法避免。除此之外,编译型框架的抽象也不是免费的:当 bug 出现时,问题的根源可能出在运行时、编译时、组件库以及三者依赖的库等等各个方面。

在 Taro 开源的过程中,我们就遇到过 Babel 的 bug,React Native 的 bug,JavaScript 引擎的 bug,当然也少不了 Taro 本身的 bug。相信其它原理相同的框架也无法避免这一问题。

但这并不意味着这类为了小程序而设计的多端框架就都不堪大用。首先现在各巨头超级 App 的小程序百花齐放,框架会为了抹平小程序做了许多工作,这些工作在大部分情况下是不需要开发者关心的。其次是许多业务类型并不需要复杂的逻辑和交互,没那么容易触发到框架底层依赖的 bug

那么当你的业务适合选择编译型框架时,在笔者看来首先要考虑的就是选择 DSL 的起点。因为有多端需求业务通常都希望能快速开发,一个能够快速适应团队开发节奏的 DSL 就至关重要。不管是 React 还是 Vue(或者类 Vue)都有它们的优缺点,大家可以根据团队技术栈和偏好自行选择。

多端框架生态

个人比较推崇Taro,https://taro.jd.com/

 

开发工具成熟度

uni-app > Taro > chameleon > WePY、mpvue

多端支持度

多端工具:多端支持度 测评

组件库/工具库/demo

多端工具:组件库/工具库/demo 测评

 


转载本站文章《Taro架构构析(1):多端框架分析,Taro WePY uni-app对比》,
请注明出处:https://www.zhoulujun.cn/html/webfront/AppDev/taro/8496.html

标签:多端,Taro,框架,app,WePY,React,DSL,https
From: https://www.cnblogs.com/zhoulujun/p/17301101.html

相关文章

  • APP逆向必备
    day03逆向必备目标:了解app逆向的流程和必要的环境准备。课堂随笔day03逆向必备今日概要:-安装运行-抓包分析-**反编译apk**-**在Java代码中定位+Hook校验**-**基于Python还原算法**1.反编译apk-简单APP,抓包+模拟发送(臧航+爱安丘)......
  • C# Linq俩个list<Datarow> 取差集,并自定义字段
    可以自定义类,也可以从参考官网文档:Enumerable.Except方法(System.Linq)|MicrosoftLearnList<DataRow>list1=newList<DataRow>();List<DataRow>list2=newList<DataRow>();DataTabledataTable=newDataTable();dataTable......
  • APP逆向
    APP开班APP逆向入门APP逆向必备逆向案例和Java入门......
  • APP开班
    爬虫&APP逆向开发课程讲师:武沛齐欢迎各位小伙伴,接下来正式进入我们第二阶段,逆向开发课程。第一阶段:爬虫开发(小鹅通+录播)第二阶段:安卓APP逆向(腾讯会议+录制+转码MP4+运营+路飞学城)课堂随笔Hook框架1.逆向APP-app安装到你手机-运行(登录,账......
  • C# WinForm操作配置文件AppSettings获取、增加、删除、修改
    在C#WinForm开发中,如果想要修改AppSettings中的值,发现用下面这个代码并没有成功。ConfigurationManager.AppSettings.Set(key,value);//修改值,但是没有成功下面提供可以用的获取、增加、删除、修改appSettings的方法。publicclassWinConfigHelper{///<summary>......
  • Content type 'application/json' not supported] (已解决)
    今天在用postman发请求时,以Json的形式发送一个POJO参数,结果一直报错:WARNING]Resolved[org.springframework.web.HttpMediaTypeNotSupportedException:Contenttype'application/json'notsupported],如下图所示:经过检查各方面都没有问题,最发现是在SpringMVC配置类中没有加 ......
  • uniapp如何支持npm下载
    首先一个正常的Nodejs项目都会有package.json简单的说,在早期的前端领域中其实没有组件化,模块化这种概念,直到nodejs中引入了模块,它认为一个模块就是一个库或者一个框架(比如文件处理模块fs模块),当模块化出现之后,为了管理这些模块,或者说为了描述这个模块,package.json应运而生,至于......
  • Appium-capability进阶用法
    官方解释:http://appium.io/docs/en/writing-running-appium/caps/ 高级用法:newCommandTimeout:命令开始到命令结束的时间(秒)如设置5分钟:desired_caps['newCommandTimeout']=300udid:满足appium多设备时使用,默认使用第一个设置,adbdevices查看多个设备如使用设备......
  • uniapp如何下载video.js
    在uni-app中引入video.js有两种方式1.通过cdn的方式引入(不建议,当这个cdn失效时,你的业务可能就崩了)<linkhref="https://cdnjs.cloudflare.com/ajax/libs/video.js/7.3.0/video-js.min.css"rel="stylesheet"><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/vide......
  • cnpm安装appium出现cannot find module xxx
    背景,我的电脑MacBookproM1芯片,brew安装了npm,再通过npm安装了cnpm,但是通过cnpm安装appium时候总会出现cannotfindmodulexxx,然后又对xxx再cnpm安装,再安装appium又出现新的xxx,网上找了很多方法,都没有对症下药的办法,最后像一个法子,直接干脆通过npm指定阿里镜......