微信小程序

WeChat Mini Program

不用下载安装、在微信里点开就能用的小应用,用完就走,想再找还能搜到。

平台与商业出现时间 · 2017注册与开发免费;涉及交易时按微信支付的相关费率结算,平台不额外收取小程序的使用费。小程序微信生态免下载即用即走
看官方文档

01 它是干嘛的

小程序是运行在微信内部的一种轻应用形态:它不用下载安装,扫码或搜索即可打开,用完不必卸载,同时又能调用摄像头、定位、支付等接近原生应用的能力。它解决的是「下载一个 App 只为用一次」这个尴尬,也给商家提供了微信内从触达到交易的完整通道。

02 为什么会有它

为了用一次服务,先下载 80 兆的 App,值吗

在手机应用时代,用户要使用一个服务,标准动作是去应用商店搜索、下载、安装,往往还要注册登录。问题在于,很多服务他一年可能只用一两次——比如某家餐厅的点餐、某个景区的购票、某场活动的报名。为了这一次使用,他要下载一个 App,用完以后既舍不得删又占着空间,下一家店又得再来一遍。

对商家来说也同样难受:开发一个原生 App 成本高,还要常年维护两个平台的版本,最后却发现绝大多数用户装完就再没打开过,投入和收益严重不匹配。

微信的思路是「让应用不必被安装」:把轻量应用直接跑在微信里,用户扫码或搜索就能打开,用完关掉,下次需要再打开,不需要经历下载和卸载。它同时把微信自己的账号、支付、社交关系开放出来,于是商家不必再操心注册登录与收款,开发者也不必维护独立 App。这样「用完即走、再找得到」的形态,就是小程序。

03 它怎么工作

小程序把界面渲染和业务逻辑拆到两个独立的线程里:渲染层负责把页面画出来,逻辑层负责处理数据与业务,两者不能直接互相调用,只能通过一个叫 setData 的通道传递数据。

小程序:为什么它不像网页那样直接操作页面① 把点击事件跨线程传过去② 用 setData 把新数据送回去调用平台能力调用你的接口页面你看到的界面渲染层跑在 WebView 里逻辑层跑在独立引擎里,管数据与逻辑平台原生能力登录 / 支付 / 扫码 / 位置你的后端业务接口分享 / 订阅消息在聊天里传播中间隔一层带来两个结果:性能可预测、不会被恶意脚本乱碰页面;但 setData 传数据有开销,不能滥用。两个互不干扰的线程受限能力的调用
看图时盯住中间那条 setData 通道:左边是渲染层(WebView,只画面)、右边是逻辑层(JavaScript 引擎,管数据与逻辑),两者被明确隔开,谁也不能直接操作对方。理解了这条通道的存在,你就理解了小程序为什么不能直接操作页面元素,也理解了为什么 setData 用得越省,体验就越好。

为什么小程序不能像网页那样直接改页面:双线程架构

  1. 1
    ① 渲染层负责画面

    渲染层由一个个 WebView 承担,负责把页面的结构和样式显示出来,但它并不执行你的业务代码,也不让你拿到页面元素直接修改。

  2. 2
    ② 逻辑层负责数据与逻辑

    逻辑层运行在一个独立的 JavaScript 引擎里,你写的所有页面逻辑都跑在这里,它只持有数据,不直接触碰界面。

  3. 3
    ③ 两层之间通过 setData 通信

    逻辑层想更新界面时,只能调用 setData 把新的数据送过去;渲染层据此重新绘制。这条通道是异步的,还要经过序列化,因此有开销。

  4. 4
    ④ 为什么不做成网页那样直接操作 DOM

    网页里脚本可以直接改动任何页面元素,灵活但也危险:一次死循环就能让整个页面卡死,第三方脚本还可能篡改别人的内容。小程序用双线程把这两件事隔开,逻辑层的卡顿不会直接冻结界面,也让平台能对渲染做统一优化与安全管控。

  5. 5
    ⑤ 这套设计的取舍

    好处是性能更可控、体验更稳定、更安全,坏处是每次界面更新都要跨线程传数据,setData 传得越多越慢。因此小程序开发的核心纪律是「只更新必要的字段、不要频繁大范围刷新」。

04 谁在用它

线下门店的点餐与排队

顾客扫桌上的二维码即可点单,不必下载应用,店家也不用在门口发号码牌。

电商与品牌商城

依托微信的社交关系做拼团与分享,搭配微信支付完成从看到买到付款的一条龙。

服务预约与会员运营

预约、开票、充值、积分查询等高频轻服务,用小程序承接最合适。

工具与内容类轻应用

记账、计算、词典、查询等小而专的工具,用完即走,用户下次仍能搜到。

企业内的员工工具

配合企业微信,做成员工使用的打卡、审批、报销入口,不必再单独发一个应用。

05 怎么用

需要会一点 JavaScript,但不要求懂服务端;官方提供了完整的开发工具,从写代码到预览都在一个软件里完成。

  1. 01在微信公众平台注册一个小程序账号,完成主体认证,拿到 AppID。
  2. 02下载并安装微信开发者工具,用 AppID 新建一个项目。
  3. 03在 pages 目录下编写页面,每个页面由结构、样式、逻辑三个文件配合组成。
  4. 04用逻辑里的数据驱动界面,需要更新界面时调用 setData 把数据送过去。
  5. 05在开发者工具里实时预览,也可以用真机扫码查看实际效果。
  6. 06开发完成后提交审核,通过后发布,用户即可通过搜索或扫码使用。
逻辑层通过 setData 驱动界面更新js
// 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
小程序在微信平台上的唯一身份标识,开发和调用微信能力时都要用到。

07 容易混淆的对比

原生 App性能与系统能力最强、不受平台限制,但开发与维护成本高,且需要用户主动下载安装。
H5 网页发布最灵活、不需要审核,但在微信内的调用能力与流畅度不如小程序。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态