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

简介: 各平台小程序与⼩程序开发框架对比

微信⼩程序 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。

相关文章
|
13天前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
|
7天前
|
开发框架 移动开发 小程序
小程序开发框架
- WePY(1.4K+ stars): 腾讯的Vue风格组件化框架 - MpVue(1.3K+ stars): 美团的Vue支持框架 - Taro(京东出品): React规范,多端开发,包括H5和RN - Tina.js: 渐进式框架,兼容MINA API,适合新手 各框架特色各异,适用于不同技能和项目需求。
23 0
|
13天前
|
NoSQL 大数据 数据处理
MongoDB聚合框架与复杂查询优化:技术深度解析
【4月更文挑战第30天】本文深入探讨了MongoDB的聚合框架和复杂查询优化技术。聚合框架包含$match、$group、$sort和$project阶段,用于数据处理和分析,提供灵活性和高性能。优化查询涉及创建合适索引、使用聚合框架、简化查询语句、限制返回结果数、避免跨分片查询、只查询所需字段及使用$inc操作符。理解这些技术有助于提升MongoDB在大数据和复杂查询场景下的性能。
|
16天前
|
敏捷开发 开发框架 持续交付
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
|
17天前
|
SQL 安全 前端开发
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
|
19天前
|
人工智能 决策智能 C++
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
144 1
|
23天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的电子商城购物平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的电子商城购物平台的详细设计和实现
49 3
|
23天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的英语学习交流平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的英语学习交流平台的详细设计和实现
30 2
|
23天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的移动学习平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的移动学习平台的详细设计和实现
34 1
|
23天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的购物系统平台的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的购物系统平台的详细设计和实现
30 0

热门文章

最新文章

推荐镜像

更多