Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

执行setData后,wxs函数的响应情况有点问题 #208

Open
202225feng opened this issue Oct 25, 2024 · 2 comments
Open

执行setData后,wxs函数的响应情况有点问题 #208

202225feng opened this issue Oct 25, 2024 · 2 comments

Comments

@202225feng
Copy link

微信小程序只开启glass-easel框架时有些问题。代码中使用wxs模块中的函数处理js中setData变更的数据时,实际执行情况不符合代码逻辑:1、调用wxs中处理函数的范围不符合预期,没有数据变更的wxs函数也会被调用。2、Android和Windows上这种半glass-easel平台上,setData一次wxs函数会响应两次。
小程序代码片段示例:https://developers.weixin.qq.com/s/NAli9tmo7KU3
代码功能是点击change计数,其中setData变更了计数1的参数。
代码截图:
wxml:
图片2
wxs:
图片3
js:
图片4
实际运行情况:
开发工具上,从初始界面到点change按钮3次的结果:
微信截图_20240926190621
Android端,从初始界面到点change按钮3次的结果:
微信截图_20240926190648
发现的问题:
1、 setData变更的数据时,JSData对应的只有wxs函数中的COUNT函数,但在变更JSData没变更JSData2的情况下,与JSData2对应的COUNT2函数也会被调用。感觉这应该是旧框架的bug。开启Skyline引擎后,就只有变更数据对应的wxs函数被调用,符合预期。但仅仅开启glass-easel框架时还会有这个bug。
2、 开发工具上点击一次计数加一,Android和Windows上从第二次开始点击一次计数加2。经测试发现在Android端和Windows端这些半开启glass-easel框架的平台上,逻辑层执行一次setData,渲染层会响应两遍:第一遍和使用WebView引擎时一样,同时也会有WebView的bug,数据没变更的函数也会被调用。第二遍和使用Skyline引擎时一样,只有数据变更的函数会响应,但这一遍只改变数据并没有将变化显示在界面上,因此第二次点击时这个数据变化才会体现,这导致第二次及之后每次点击计数加二。感觉响应两遍也是bug,正常应该是保留后面一遍。

@202225feng
Copy link
Author

我原本想在wxs模块中实现点击计数,但发现只在wxs函数中改变数据界面不会跟着变化。所以用js函数响应点击事件,并在函数中执行setData触发渲染层刷新界面内容。结果发现这个执行结果不符合代码逻辑。这代码的写法可能不常用,但我感觉肯还是有可能用上的。并且调用wxs函数两遍且没变化的也全部调用一遍的话,即使最后数据一样,也会导致性能下降。

@LastLeaf
Copy link
Member

LastLeaf commented Oct 28, 2024

glass-easel 不保证何时会调用模板表达式里的函数、何时不会(旧框架其实也是)。相对而言, glass-easel 更倾向于更少调用,但不是说不变更数据项就一定不会调用了,有些位置的表达式,即使不变更也需要被调用。

关于连续调用两次的问题,参见 #205 的讨论。

我原本想在wxs模块中实现点击计数

这是不可以的。因为 wxs 中的全局量是线程全局的(小程序的冷/热启动都会带来表现上的差异),非常难控制。即使模板更新完全处理的如你预期,依旧会有很多意外情况。最典型的一个例子是,如果小程序被 reLaunch 重启动了, wxs 的量并不会被重置(#209)。而且目前我们认为, wxs 的性能在小脚本上是更差的,综合考虑上看不应该为了代码执行性能本身选用 wxs 。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants