解析各平台小程序与⼩程序开发框架对比

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 各平台小程序与⼩程序开发框架对比

微信⼩程序 vs ⽀付宝⼩程序 vs 百度⼩程序

各家⼩程序之间有很多相似的地⽅,例如相似的开发环境,相似的运⾏时渲染内容。

文档索引

微信⽂档:https://developers.weixin.qq.com/miniprogram/dev/api/

百度⽂档:https://smartprogram.baidu.com/docs/develop/api/apilist/

⽀付宝⽂档:https://opendocs.alipay.com/mini/api

相似内容:

  • 均有原⽣组件和 webview 中渲染的组件
  • ⼤部分配置和项⽬结构(app.json/app.js)都相同, 甚⾄之前出现了⽀付宝⼩程序⽂档直接拷⻉微信⼩程序⽂档的情况。
  • 他们都⽀持第三⽅平台,来对⽤户授权的⼩程序进⾏操作。

不同之处:

  • 部分 API 内容互不相同(wx/swan/my)
  • 不同平台侧重的能⼒不同,⽀付宝侧重商家,百度⼩程序更侧重流量相关获取,微信⼩程序更侧重基础能⼒。
  • 只有微信⼩程序⽀持个⼈申请使⽤,百度/⽀付宝仅⽀持企业使⽤。
  • 百度的 API ⽂档中,出现了很多 AI 相关的⼩程序 API 来调⽤。

image.png

⼩程序之间的差异具体体现在 api 的差异当中,⽬前各家的⼩程序在运⾏时的差异已经⾮常⼩了,底层功能都已经⾮常稳定。书写⼩程序代码的过程中只需要注意对应 API 的使⽤即可。

wepy 、 mpVue 、 remax 、 taro

他们本质都是让⼩程序开发更加友好,或是在⼩程序同构中展示对应的能⼒。

wepy

wepy[]() []()是⼀个专注于⼩程序开发的开发框架,通过它我们能更好的组织我们的⼩程序代码。


特点:

类 Vue 开发⻛格

  • ⽀持⾃定义组件开发
  • ⽀持引⼊ NPM 包
  • ⽀持 Promise
  • ⽀持 ES2015+ 特性,如 async Functions
  • ⽀持多种编译器,Less/Sass/Stylus/PostCSS、Babel/Typescript、Pug
  • ⽀持多种插件处理,⽂件压缩,图⽚压缩,内容替换等
  • ⽀持 Sourcemap,ESLint 等
  • 对⼩程序细节优化,如请求列队,事件优化等
<style lang="less"> @color: #4D926F;
.num {
  color: @color;
}
</style>
<template>
  <div class="container">
    <div class="num" @tap="num++">
      {{num}}
    </div>
    <div>{{text}}</div>
    <input v-model="text"></input>
  </div>
</template>
<config>
{
  usingComponents: { customCompoent:'@/components/customComponent'},
  vendorComponent: 'module:vendorComponent'
}
</config>

总结:

  • 使⽤内部的约束来开发⼩程序,最终静态编译为⼩程序⽬录结构
  • vue ⻛格,只⽀持微信⼩程序,后期如果想换框架则迁移困难
  • v2之后的版本较v1的开发体验有明显提升

源码:

通过 bin/wepy-build.js 执⾏编译,通过⽂件名称判断不同的编译⽅式,不同编译⽅式注册的回调函数core/plugins/parser/ 注册。

mpvue

mpvue 是⼀个通过 vue 进⾏开发,同时⽀持多端的框架。⽬前⽀持 微信、百度、头条和⽀付宝⼩程序。
它与 wepy 虽然同是 vue 进⾏开发,但是之间还是有些区别的,主要体现在它在运⾏时还依赖了部分vue.runtime.js 的代码。


特点

  • 保留了 vue.runtime 核⼼⽅法,⽆缝继承了的基础能⼒
  • 提供了将 vue 的模板语法转换到⼩程序的 wxml 语法的能⼒
  • 修改了 vue 的建构配置,使之构建出符合⼩程序项⽬结构的代码格式: json/wxml/wxss/js ⽂件

源码

mpvue 的源码中,vue 的作者也写了很多,主要也因为这个项⽬也⽤到了很多 vue 运⾏时的东⻄,所以不同于wepy 的编译型, mpvue 除了基本的静态编译,运⾏时还是加⼊了⼀些 vue.runtime.js 中的元素的,在项⽬迁移时会稍稍容易些。

例如在 platforms/mp/compiler/wx 中,加⼊了编译和解析微信⼩程序部分的⽅法。

在旁边的 runtime 中,实现了⼀系列的 diff/events/⽣命周期等等功能。

总结

注意:目前mpvue由于遗留问题太多,并且长期处于不维护状态,已不太推荐使用,开源社区基本已经放弃了该框架。

remax

remax 是由阿⾥推出的⼀款⼩程序制作框架,能同时运⾏在微信⼩程序/⽀付宝⼩程序/字节跳动⼩程序当中。


特性:

  • 使⽤ react 的⻛格和⽅式来进⾏⼩程序的开发使⽤
  • Remax 把代码转换到多个⼩程序平台。
  • 完整的 TypeScript ⽀持。
export default class IndexPage extends React.Component {
  // ⻚⾯组件的 didMount 触发时机是在 onLoad 的时候
  componentDidMount() {
    console.log('IndexPage load')
  }

  onShow() {
    console.log('IndexPage show')
  }

  render() {
    return <View>Hello world!</View>
  }
}

源码

相⽐于其他框架,remax 使⽤静态编译的部分就⽐较少,他主要应对的就是运⾏时的⼯作。

假如使⽤其他静态编译类型的框架,对于以下情况就会有⼼⽆⼒:

render() {
    const child = <View>Hello remax!</View>;
    return <View>Hello world! {child} </View>;
}

render() {
    return <View>Hello world! <View>Hello remax!</View> </View>;
}

因为这⾥的内部 child 是通过 js 来控制的,静态编译⼤部分情况下不会分析到具体组件和 UI 与变量之间的联系,⼤部分框架只是使⽤⼀个简单的 xml 库来结构分析,所以这种变量在运⾏时决定 UI 就⽆法实现。

remax 不会有这样的问题,他在运⾏时实现了⼀套类似react-dom ,唯⼀有区别的是把 react-dom ⾥⾯与document,window 有关的内容都替换成了⼩程序⾥已有的内容,这样实现了⼀套 react-reconciler。

import ReactReconciler from 'react-reconciler'
let reconciler = ReactReconciler({
  createInstance(type) {
    return document.createElement(type)
    // 替换为⼩程序内部⽅法即可实现实例的创建
  },
  appendChild(parent, child) {
    parent.appendChild(child)
  },
  removeChild(parent, child) {
    parent.removeChild(child)
  },
  insertBefore(parent, child, before) {
    parent.insertBefore(child, before)
  },
})

taro

taro可谓是大名鼎鼎的小程序开发框架,⽬前⽀持微信/百度/⽀付宝/百度⼩程序和 h5,⽬前⽀持的平台最多,也在持续维护的⼀个框架平台。它也是⼀套遵循 React语法规范的 多端开发解决⽅案。通过 Taro 的编译⼯具,将源代码分别编译出可以在不同端(微信/百度/⽀付宝/字节跳动/QQ/京东⼩程序、快应⽤、H5、React-Native 等)运⾏的代码。


特性

  • ⽀持使⽤ npm/yarn 安装管理第三⽅依赖
  • ⽀持使⽤ ES7/ES8 甚⾄更新的 ES []()规范,⼀切都可⾃⾏配置
  • ⽀持使⽤ CSS 预编译器,例如 Sass 等
  • ⽀持使⽤ Redux 进⾏状态管理
  • ⽀持使⽤ MobX 进⾏状态管理
  • ⼩程序 API 优化,异步 API Promise 化等等

源码

它是⼀个静态编译的框架,所以也就是说我们最终的代码都是已经编译为能直接在平台中运⾏的了,所以主要的⼯作对于 taro 来说是在编译阶段进⾏。

对于微信⼩程序的转译,我们只需要关注 taro- tarnsformer-wx 即可,在 index.ts 中,通过 ts 和 babel 将编译的结果进⾏分析,将分析到的 AST 结构进⾏处理, 通过不同的 AST 结果执⾏不同的操作。

执⾏完成之后,通过 parseJSXChildren 等解析⽅法,将 jsx 转化为 wxml。

相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
27天前
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
46 3
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
158 3
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
Hugging Face 论文平台 Daily Papers 功能全解析
【9月更文挑战第23天】Hugging Face 是一个专注于自然语言处理领域的开源机器学习平台。其推出的 Daily Papers 页面旨在帮助开发者和研究人员跟踪 AI 领域的最新进展,展示经精心挑选的高质量研究论文,并提供个性化推荐、互动交流、搜索、分类浏览及邮件提醒等功能,促进学术合作与知识共享。
为什么不加盟线下陪玩APP小程序平台,而是自建平台?
自建线下陪玩APP平台相比加盟,能避免利润抽成,确保所有收益归己,同时提供更高的运营灵活性和稳定性,不受制于合同限制或总平台决策变动,更适合追求长期发展的创业者。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
25天前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
开发框架 人工智能 小程序
小程序常见的 UI 框架
【10月更文挑战第17天】小程序 UI 框架为开发者提供了便捷的工具和资源,帮助他们快速构建高质量的小程序界面。在选择框架时,需要综合考虑各种因素,以找到最适合项目的解决方案。随着技术的不断进步,UI 框架也将不断发展和创新,为小程序开发带来更多的便利和可能性。
77 2
|
1月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
31 0

推荐镜像

更多
下一篇
DataWorks