2024-08-27 10:08:47 +08:00

48 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WXS
https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/
> 官方介绍:
>
> WXSWeiXin Script是小程序的一套脚本语言结合 `WXML`,可以构建出页面的结构。
>
> WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。
那么**这个 WXS 究竟要解决什么问题**呢?
在前面讲架构篇的时候,我们有讲过微信小程序的架构分为 app-service 和 page-frame分别运行于不同的线程。
你在开发时写的所有 JS 都是运行在 app-service 线程里的,而每个页面各自的 WXML/WXSS 则运行在 page-frame 中。
app-service 与 page-frame 之间通过**桥协议**通信(包括 setData 调用、canvas指令和各种DOM事件涉及消息序列化、跨线程通信与evaluateJavascript()。
<img src="https://xiejie-typora.oss-cn-chengdu.aliyuncs.com/2023-02-17-030526.png" alt="image-20230217110526036" style="zoom:50%;" />
这个架构的好处是:分开了业务主线程和显示界面,即便业务主线程非常繁忙,也不会阻塞用户在 page-frame 上的交互。一个小程序可以有多个 page-frame webview页面间切换动画比SPA更流畅。
但是,这样的架构也不是说没有缺点,该架构的缺点就在于在 page-frame 上无法调用业务 JS。**跨线程通信的成本很高**,不适合需要频繁通信的场景。业务 JS 无法直接控制 DOM。
因此,针对微信小程序架构的缺点,微信团队推出了 WXS。
WXS 就是在 page-frame 中运行的 JS可以对 view 数据做一些变换。
WXS 对性能的贡献就只有一点:与 WXML 是在同一个线程运行的,**避免了跨线程通信的开销**
简单来说就是可以在 WXML 里使用 JavaScript。
查看整个官方文档,可以看到官方文档在介绍 WXS 时分为了如下几个部分:
- [WXS 模块](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/01wxs-module.html)
- [变量](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/02variate.html)
- [注释](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/03annotation.html)
- [运算符](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/04operator.html)
- [语句](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/05statement.html)
- [数据类型](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/06datatype.html)
- [基础类库](https://developers.weixin.qq.com/miniprogram/dev/reference/wxs/07basiclibrary.html)
虽然官方强调 **WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致**,但是我们可以看出基本上就是 JavaScript。