微信小程序采用了类似于 Web 的 WXML 和 WXSS 语言来描述页面结构和样式,但是却没有提供直接操作 DOM 的 API。
这是因为小程序本身是在一个 JavaScript 环境中运行的,其选用的是 JavaScriptCore 引擎,而不是浏览器中常见的 V8 引擎。
渲染线程:负责渲染界面,包括解析 WXML 和 WXSS、样式计算、布局排版和绘制视图等操作。
逻辑线程:负责运行 JavaScript 代码,包括数据绑定、事件处理、路由跳转等操作。
通过双线程协同工作,可以实现小程序的高性能和流畅体验。当界面需要进行更新时,渲染线程会优先响应,避免造成卡顿;而逻辑线程则负责处理复杂的业务逻辑,不会对界面渲染产生影响。这种设计可以有效地提高小程序的运行效率,同时也能够更好地满足用户对于小程序的使用需求。
微信小程序主要采用的是 MVVM(Model-View-ViewModel)架构模式 微信小程序的架构分为四层:

微信小程序的生命周期分为三个阶段:
页面跳转参数传递
使用 wx.navigateTo、wx.redirectTo 等跳转页面时,可以通过 url 的 query 参数传递数据。目标页面可在 onLoad 方法的参数中获取。
全局变量(App 实例)
可以将数据存储在 App() 实例上,通过 getApp() 获取全局数据,实现页面间共享。
本地存储
使用 wx.setStorageSync、wx.getStorageSync 等 API,将数据存储到本地,其他页面可随时读取。
事件总线(自定义事件) 通过第三方库(如 mitt、eventemitter3)或自定义事件机制,实现页面间的消息通知和数据传递。
页面栈直接访问
通过 getCurrentPages() 获取页面栈,可以直接访问前一个页面的实例,进而操作其数据。
全局状态管理 使用如 MobX、Redux 等状态管理库,将数据统一管理,实现多页面间的数据同步。
云开发数据库 通过云开发数据库存储和读取数据,实现页面间的数据共享(适合复杂场景)。
常用场景举例:
相同点: 都是点击事件 不同点: bindtap 不会阻止冒泡,catchtap 可以阻止冒泡。
单位支持不同
WXSS 新增了 rpx(响应像素)单位,适配不同屏幕宽度,CSS 没有 rpx 单位。
兼容性不同 WXSS 只支持 CSS 的部分语法和属性,不支持如伪类选择器(:hover)、部分高级选择器等。
全局样式与局部样式 小程序支持全局样式(app.wxss)和页面级样式(每个页面的 wxss),而 CSS 没有这种强制区分。
样式隔离机制 小程序每个页面的 WXSS 默认样式隔离,互不影响;CSS 默认是全局作用域。
@import 语法
WXSS 支持 @import 导入其他 wxss 文件,CSS 也支持,但 WXSS 只支持本地文件,不支持网络文件。
部分属性不支持 WXSS 不支持部分 CSS3 新属性,如动画、部分布局属性等。
WXSS 选择器支持差异 不支持属性选择器 不支持级联选择器(如 div p) 通配符 '*' 作用范围有限 预处理器 WXSS 不支持 Sass/Less 等预处理语法(需依赖构建工具转换)
总结: 小程序 WXSS (WeiXin Style Sheets) 与标准 CSS 在核心概念上保持一致,但在具体实现上有一些差异。 1rpx ≈ 0.5px @750px 设计稿标准
rpx 转 px 原理
适配不同屏幕密度
总结: 开发时统一用 rpx,微信小程序会自动转换为对应设备的 px,实现多屏幕和高密度设备的适配。