# 基本概念

# 什么是小程序

小程序是各个app厂商对外开放的一种能力。通过厂商提供的框架,就能在他们的app中运行自己的小程序,借助各大app的流量来开展自己的业务。同时作为厂商如果能吸引到更多的人加入到开发者大军中来,也能给app带来给多的流量,这可以看作一个双赢的业务。那么最终呈现在app中的页面是以什么方式进行渲染的呢?其实还是通过webview,但是会嵌入一些原生的组件在里面以提供更好的用户体验,比如video组件其实并不是h5 video,而是native video。

我们在开发 Android 和 iOS App 时,H5 会出现白屏和页面切换不流畅的问题,与此同时,我们也希望 App 可以随时更新,而不需要上架审核。随着技术的发展,小程序作为替代方案就出现了。

小程序分为微信、支付宝、百度、头条系等多种,在这里我以微信小程序为例介绍下。微信小程序是怎么解决的呢?它主要通过设计一套自己的 Web + 离线包方案来实现,这样既能保证跨平台实时更新,还能保证性能体验。

同时,小程序还能禁掉一些不合适的标签(如外跳 URL 的 A 标签)和 API(如动态执行脚本的API),减少安全问题。此外它还能避免 JS 操作 DOM,从而提升渲染性能。

# 小程序市场优势

  1. 获客成本低:挂靠超级App,让超级App的用户成为自己的潜在用户。
  2. 用户访问流程成本低:通过扫一扫、附近的小程序、分享、App内搜索等即可直接访问。
  3. 更轻量触达:不必再记住网址,不必下载App,点击直达。
  4. 更方便:功能几乎和App一样全面,包括语音、支付、地理等。
  5. 用户负担更小:微信账号走天下,减轻个人负担,包括账号、会员、线上、线下。
  6. 更安全:安全无需自己维护,由超级App直接负责。

# 小程序框架的优势

微信面临的问题是如何设计一个比较好的系统,使得所有开发者在微信中都能获得比较好的体验。这个问题是之前的 JS-SDK 所处理不了的,需要一个全新的系统来完成,它需要使得所有的开发者都能做到:

  • 快速的加载
  • 更强大的能力
  • 原生的体验
  • 易用且安全的微信数据开放
  • 高效和简单地开发

从小程序说起,小程序解决了什么问题?

  • 性能高于h5(base app)
  • 微信开放了统一入口,管理菜单
  • 宿主APP提供登录
  • 宿主APP提供全面分享引流。
  • 快速的加载
  • 更强大的能力
  • 原生的体验
  • 易用且安全的微信数据开放
  • 高效和简单地开发

# 基本原理-双线程模型

微信小程序的渲染层与逻辑层分别由两个线程管理

  1. 渲染层的界面使用 webview 进行渲染
  2. 逻辑层采用 JSCore运行JavaScript代码