跨端那些事之小程序(完)

182 阅读4分钟

我正在参加「掘金·启航计划」

上篇跨端那些事之Flutter主要介绍了一些Flutter的一些原理和优缺点,小程序实现跨端主要是基于宿主App,本文主要介绍一下小程序的原理,主要以微信小程序为主。

什么是小程序

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

我们在服务号中使用的微信JSSDK本来是微信针对内部开放的一整套微信的JSBridge,后来在别人发现后用的越来越多,微信在2015年开放了一套完整的微信JSSDK供开发者使用。后为了解决服务号存在的一些问题,后续推出应用号,并在2017年7月正式上线小程序。

两者区别

  • 微信公众号的开发还是普通的混合开发模式,通过微信提供的JSSDK(JSBridge)跟微信通信,可以调用微信提供的原生能力。
  • 小程序改变了原来的开发方式和实现方式。虽然还是通过WebVIew的方式,但是小程序采用了全新的双线程设计,提供了完整的开发工具、发布流程、版本切换、安全处理等功能。

小程序架构设计

default_canvas1.png 根据上面的架构图我们可以发现,小程序是双线程设计,渲染层和逻辑层是分开控制的。这样就可以避免混合开发中可以直接操作DOM带来的安全隐患。 两个线程之间由Native 层之间统一处理,无论是线程之间的通信,还是数据的传递,网络请求都是由Native层做转发

  • 渲染层只负责页面和数据的渲染
  • 逻辑层控制数据的处理变更
  • 渲染层和逻辑层的数据交互是由Native层去统一处理的。逻辑层通过SetData可以改变数据驱动渲染层更新。

我们常见的‘Hello World’可以这样实现

<view>{{ msg }}</view>

// index.js
Page({
  onLoad: function () {
    this.setData({ msg: 'Hello World' })
  }
})

小程序为什么会有更加贴近原生的体验

  • HyBird采用WebVIew的方式实现,只有一个WebVIew去承载H5页面,路由管理还是由H5去控制。
  • 小程序采用的是多WebVIew的方式去渲染页面,就是采用Native的渲染方式,当有新的页面打开就用新的WebVIew去覆盖到原本的WebVIew上。从而实现更加接近原生的效果。

小程序的WebVIew的开启数量是有限制的,不能超过十个,防止出现嵌套层级过深的情况。

小程序跨端

目前小程序的现状

除了我们上面主要介绍的微信小程序外,目前还存在支付宝、百度、滴滴、虎牙、QQ、字节、360等厂商的小程序。小程序可以很好的做商业闭环,将流量留在App内,所以出现了小程序百花齐放的场面。

小程序如何跨端的

这里的小程序跨端跟之前文章介绍的不太一样,之前跨端指的就是Android、IOS等不同设备的客户端,小程序因为不同厂商都推出自己的小程序,所以小程序跨端不止指跨设备还指的是跨App。 小程序跨端主要是两个方面实现的:

  • 一个是小程序基于客户的宿主环境实现了设备的跨端
  • 基于一些第三方工具的的编译能力实现跨App开发

第三方工具

通过上面我们了解到小程序的好处导致各大厂商的小程序百花齐放,所以我们也遇到了小程序跨App开发的问题,如果每个App的小程序都去重新开发,会导致大量的人力物力浪费,另外小程序也不支持如webpack、less等工具化的工具使用,所以出现了许多第三方工具去解决小程序跨App开发的问题。常见的第三方工具如Tour、Mpvue、uni-app等工具。

小结

小程序的优点:

  • 双线程,渲染层和逻辑层并行不阻塞
  • 多个webview,页面切换更流畅
  • webview 预加载
  • 安装包缓存
  • 以及微信做了大量的优化和看不见的操作

小程序的缺点:

  • 不能跳转外链网址,所以间接影响了小程序的开放性。也可能是想限制其他支付方式或功能接入。
  • 不能直接分享到朋友圈,少了一个重要的推广方式。
  • 需要像APP一样审核上架,这点比HTML5即做即发布要麻烦些,但同时也保障了其安全性。

本篇小程序的一些基本原理就介绍到这里,如果感兴趣想深入了解可以自行深入探索。
跨端那些事系列到此已完结。