小程序 | 3-架构和配置

基于以下内容整理:


1 配置

小程序的很多开发需求都是通过配置文件来实现。这样可以提高开发效率且能保证小程序的基础风格一致。

配置文件的类型如下:

配置文件名称说明
project.config.json项目配置文件,如项目名称、appid 等
sitemap.json小程序内搜索相关的配置
app.json全局配置
page.json页面配置

前两种很少需要修改。

1.1 project.config.json

project.config.json 对应的是 "详情" 中的配置内容,修改时通常从 "详情" 配置面板中修改 。该文件存在的意义是方便不同电脑之间环境配置的同步。更换电脑时,直接拷贝该文件,这样新电脑就具备了旧电脑的环境信息。

1.2 sitemap.json

sitemap.json 的作用是配置我们的程序是否可以让用户通过微信搜索查找到我们的程序或程序内的内容。默认允许所有页面内容允许被搜索到。

1.3 app.json

app.json,应用的全局配置。

最常用的三个配置项

属性类型是否必须描述
pagesstring[]页面路径列表,小程序中的所有页面都必须在此处配置
windowObject全局的默认窗口表现
tabBarObject底部 tab 栏的表现

window 相关的设置:

注意:下拉刷新的内容在此处设置的话,所有页面都将具备下拉功能。我们通常是在需要下拉功能的页面的 json 文件中配置。

tabBar 的相关设置:

补充:代码格式化的快捷键-alt+shift+F ,window 和 mac 一致。

1.4 page.json

page.json 单个页面的配置项。每个页面都有自己的配置文件。

1.4.1 页面配置

1.4.2 自定义编译模式

我们在 app.json 中指定了小程序首页为 about 页面:

{
  "pages": [
    "pages/about/about",
    "pages/index/index",
    "pages/logs/logs"
  ]
}  

所以,默认情况下, 我们修改完代码内容并点击 ctrl+s 保存内容之后,IDE 的预览界面就会跳转到 about 页面。如果我们想保存之后直接展示 index 页面, 就可以通过自定义编译模式实现。主要步骤如下:

2 小程序的双线程模型

微信客户端是小程序的宿主。宿主提供了执行小程序的各种文件:wxml 文件、js 文件、wxss 文件。并为小程序提供了双线程模型

WXML 模板和 WXSS 样式运行与渲染层,渲染层使用 WebView 线程渲染(一个程序有多个页面,会使用多个 WebView 的线程)。

JS 脚本(app.js、xxPage.js)运行于逻辑层,逻辑层使用 JsCore 运行 JS 脚本。

这两个线程都会经由微信客户端(Native)进行中转交互。

2.1 界面渲染过程-wxml 和 DOM 树

wxml 等价于一棵 DOM 树,也可以使用一个 JS 对象来模拟(虚拟 DOM):

上图中,左上角的嵌套 view 可以使用右侧的树形结构表示,而右侧的树形结构又可以使用左下角的 JS 对象来表示。

2.2 界面渲染过程-初始化渲染

WXML 可以先转成 JS 对象,再渲染出真正的 DOM 树。

上图中,左上角是 wxml 文件内容,左下角是对应的 js 文件,两者会转成中间的 js 对象,js 对象会转成 DOM, 最终在最右侧渲染。

2.3 界面渲染过程-数据变化

通过 setData 把 msg 数据从 "Hello World" 变成 "Goodbye":

  • 产生的 JS 对象对应的节点就会发生变化
  • 此时可以对比前后两个 JS 对象,得到变化的部分
  • 然后把这个差异应用到原来的 DOM 树上

从而达到更新 UI 的目的,这就是 数据驱动 的原理。

2.4 界面渲染的整体流程总结

  • 在渲染层,宿主环境会把 WXML 转化成对应的 JS 对象
  • 将 JS 对象再次转成真实 DOM 树,交由渲染层线程渲染
  • 数据变化时,逻辑层提供最新的变化数据,JS 对象发生变化就会触发 diff 算法对比
  • 将最新变化的内容反映到真实的 DOM 树中,更新 UI。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnPeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值