第一章 微信小程序与微信之间的关系
在2017年以前,微信公众号(主要是服务号)是作为企业/商家私域流量的主阵地。
公众号服务器端API结合Webview-JSAPI的微信生态接入,让用户与公众号间实现了多种形式的交流与沟通(网页多媒体呈现,模版消息,支付,卡包操作等)。
那么问题来了,在基础功能差异不大的前提下,为何微信要重新开辟一个名为“小程序”的新产品形态呢?
下面,我就通过技术和业务两个角度去阐述这个问题。
一、微信小程序到底是不是Webview+框架
UI是,但不全是。
先上图:
图1 微信小程序的概略实现架构
和大部分框架不同,微信小程序其实同时运行着两套javascript引擎,一套只负责逻辑,一套负责UI的渲染。
其中通过setData(obj)方法进行数据传递。
反之web渲染层通过指定方法名的方式,调用逻辑层暴露的方法(主要用于操作UI事件的逻辑响应,比如点击监听等)。
例:将学生list,传递给页面
this.setData({
students:[{
name:a,
age:6
}]
})
<text>学生姓名:{{students[0].name}}</text>
例2:界面的监听实现
<button bindtap="submitFunc">提交</button>
page({
submitFunc(){
//do something
},
//...
});
如此,微信小程序从技术上解决了Webview带来的几大痛点:
1、因为浏览器脚本引擎的限制(JS引擎只有一个阻塞状态),导致对于JS驱动的动态Web应用而言,UI和逻辑二者是无法真正分开线程的(严格上讲,动态Web应用就不存在“多线程”这个概念)。
这也就导致了首次加载慢等问题,而微信小程序通过两套引擎,提升了首次加载的速度。
2、因为逻辑层在native(原生)应用的引擎中,所以数据和逻辑相对更安全,更可信。也正因为如此,微信小程序在微信数据开放相关的能力相比公众号更强,也更激进。
3、能够调用更多的native(原生)能力。
那么问题来了,代价呢?请听下回分解。