前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序 | 3-架构和配置

小程序 | 3-架构和配置

作者头像
CnPeng
发布2021-04-26 11:19:59
5040
发布2021-04-26 11:19:59
举报
文章被收录于专栏:CnPengDevCnPengDev

基于 https://www.bilibili.com/video/BV1Kt411V7rg?p=7 整理

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,应用的全局配置。

最常用的三个配置项

window 相关的设置:

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

tabBar 的相关设置:

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

1.4 page.json

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

1.4.1 页面配置
1.4.2 自定义编译模式

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

代码语言:javascript
复制
{
"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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CnPeng 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 配置
    • 1.1 project.config.json
      • 1.2 sitemap.json
        • 1.3 app.json
          • 1.4 page.json
            • 1.4.1 页面配置
            • 1.4.2 自定义编译模式
        • 2 小程序的双线程模型
          • 2.1 界面渲染过程-wxml 和 DOM 树
            • 2.2 界面渲染过程-初始化渲染
              • 2.3 界面渲染过程-数据变化
                • 2.4 界面渲染的整体流程总结
                相关产品与服务
                云开发 CloudBase
                云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档