01 它是干嘛的
小程序是运行在微信内部的一种轻应用形态:它不用下载安装,扫码或搜索即可打开,用完不必卸载,同时又能调用摄像头、定位、支付等接近原生应用的能力。它解决的是「下载一个 App 只为用一次」这个尴尬,也给商家提供了微信内从触达到交易的完整通道。
02 为什么会有它
为了用一次服务,先下载 80 兆的 App,值吗
在手机应用时代,用户要使用一个服务,标准动作是去应用商店搜索、下载、安装,往往还要注册登录。问题在于,很多服务他一年可能只用一两次——比如某家餐厅的点餐、某个景区的购票、某场活动的报名。为了这一次使用,他要下载一个 App,用完以后既舍不得删又占着空间,下一家店又得再来一遍。
对商家来说也同样难受:开发一个原生 App 成本高,还要常年维护两个平台的版本,最后却发现绝大多数用户装完就再没打开过,投入和收益严重不匹配。
微信的思路是「让应用不必被安装」:把轻量应用直接跑在微信里,用户扫码或搜索就能打开,用完关掉,下次需要再打开,不需要经历下载和卸载。它同时把微信自己的账号、支付、社交关系开放出来,于是商家不必再操心注册登录与收款,开发者也不必维护独立 App。这样「用完即走、再找得到」的形态,就是小程序。
03 它怎么工作
小程序把界面渲染和业务逻辑拆到两个独立的线程里:渲染层负责把页面画出来,逻辑层负责处理数据与业务,两者不能直接互相调用,只能通过一个叫 setData 的通道传递数据。
为什么小程序不能像网页那样直接改页面:双线程架构
- 1① 渲染层负责画面
渲染层由一个个 WebView 承担,负责把页面的结构和样式显示出来,但它并不执行你的业务代码,也不让你拿到页面元素直接修改。
- 2② 逻辑层负责数据与逻辑
逻辑层运行在一个独立的 JavaScript 引擎里,你写的所有页面逻辑都跑在这里,它只持有数据,不直接触碰界面。
- 3③ 两层之间通过 setData 通信
逻辑层想更新界面时,只能调用 setData 把新的数据送过去;渲染层据此重新绘制。这条通道是异步的,还要经过序列化,因此有开销。
- 4④ 为什么不做成网页那样直接操作 DOM
网页里脚本可以直接改动任何页面元素,灵活但也危险:一次死循环就能让整个页面卡死,第三方脚本还可能篡改别人的内容。小程序用双线程把这两件事隔开,逻辑层的卡顿不会直接冻结界面,也让平台能对渲染做统一优化与安全管控。
- 5⑤ 这套设计的取舍
好处是性能更可控、体验更稳定、更安全,坏处是每次界面更新都要跨线程传数据,setData 传得越多越慢。因此小程序开发的核心纪律是「只更新必要的字段、不要频繁大范围刷新」。
04 谁在用它
顾客扫桌上的二维码即可点单,不必下载应用,店家也不用在门口发号码牌。
依托微信的社交关系做拼团与分享,搭配微信支付完成从看到买到付款的一条龙。
预约、开票、充值、积分查询等高频轻服务,用小程序承接最合适。
记账、计算、词典、查询等小而专的工具,用完即走,用户下次仍能搜到。
配合企业微信,做成员工使用的打卡、审批、报销入口,不必再单独发一个应用。
05 怎么用
需要会一点 JavaScript,但不要求懂服务端;官方提供了完整的开发工具,从写代码到预览都在一个软件里完成。
- 01在微信公众平台注册一个小程序账号,完成主体认证,拿到 AppID。
- 02下载并安装微信开发者工具,用 AppID 新建一个项目。
- 03在 pages 目录下编写页面,每个页面由结构、样式、逻辑三个文件配合组成。
- 04用逻辑里的数据驱动界面,需要更新界面时调用 setData 把数据送过去。
- 05在开发者工具里实时预览,也可以用真机扫码查看实际效果。
- 06开发完成后提交审核,通过后发布,用户即可通过搜索或扫码使用。
// pages/index/index.js —— 逻辑层运行,负责数据与业务逻辑
Page({
data: { count: 0 },
onTapAdd() {
// 不直接操作页面元素,只更新数据;
// setData 会把变化跨线程送到渲染层,由它重新绘制
this.setData({ count: this.data.count + 1 })
}
})
// pages/index/index.wxml —— 渲染层只负责把数据画出来
// <view>当前计数:{{count}}</view>
// <button bindtap="onTapAdd">加一</button>避坑提示
- !setData 是跨线程通信,开销不低:只传真正变化的字段,避免把整份大对象反复送过去。
- !主包体积有上限,图片和音视频等大文件不要打进代码包,放进云端存储再从网络加载。
- !小程序的每个页面都需要在配置里声明,新增页面忘了登记是新手最常犯的错之一。
- !正式上线前务必在真机上测一遍:开发者工具的模拟环境与真实手机在性能、网络、权限上都有差异。
06 关键概念
- 双线程架构
- 把界面渲染和业务逻辑放在两个互相独立的线程里,彼此不能直接调用,只能靠数据通信。
- 渲染层
- 负责把页面画出来的那一层,由 WebView 承担,它不执行你的业务代码。
- setData
- 逻辑层把数据送到渲染层的唯一通道,界面想变化就必须经过它,用得越多开销越大。
- AppID
- 小程序在微信平台上的唯一身份标识,开发和调用微信能力时都要用到。