-
Notifications
You must be signed in to change notification settings - Fork 118
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
「微信小程序」剖析(四):原生的实时DOM转Virtual DOM #30
Comments
赞! |
@dingyiming 好快~~,我的文章还没排版好呢。 |
@phodal 哈哈,刚巧,刚刚看到自己github动态第一条就是你的文章 |
一棵探索的心 |
|
@NoraGithub 理论上是可以的,但是成本比较高。就是 wxss 命令 |
@phodal 谢谢答复。我再研究下。 |
额,我现在没法看到楼主写的源码,现在开发者工具下的JS文件全都做了混淆处理,变量名也被简写了。。。现在没法看到里边的运行逻辑。。。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
在之前的几篇文章里,我们讨论了MINA的一些原理。晚上在想着怎么结合Vux + Virtual Dom实现一个名为WINV框架的时候,在探索WCC功能才发现:自己又忽略掉了一个很重要的性能优化细节。这个WCC如果内置在浏览器里,就是可以实时的将DOM转换为以JSON表示的DOM。
先将DOM转换为Virtual Dom,再转换回去的优点是可以分离数据和样式。这也就是为什么React的学习成本高的原因之一了。
Virtual Dom的表现形式
为了将真实的DOM转换为Virtual DOM,我们需要将DOM以一定的形式保存下来,如MINA的:
如:
又或者是React中的:
当然我们也可以自己实现一个比较简单的DOM转为Virtual DOM,如将
转换为接近原生的:
原生的Parser与JS Parser
我会假装你已经知道了浏览器相关的很多细节,我也假装我已经对这些细节很清晰。下图一份Webkit浏览器的早期架构图:
如果我们使用JS实现一个将WXML将换为DOM JSON,我们就需要间接通过JavaScript Engine(即JSCore )来转换这个JSON文件。当有大量的DOM的时候,这就不是一件轻松的事了。所以,在WCC的生成代码里对DOM的数量限制为
16000
。我们可以用原生的接口来将WX DOM转换为JSON,但是我们没有办法用原生的接口来将DOM JSON转换DOM——毕竟我们还有大量的数据和绑定函数。
而这一点对于混合应用来说,就特别有帮助:
如果这个插件可以用在Cordova上,那么它将改善混合应用的性能。
数据绑定
当我们触发了generateFunc方法的时候:
我们调用下面的方法去初始化我们的DOM,并把数据传输进去:
函数绑定
MINA的函数绑定机制是由函数名来决定的,如:
对于其他类型的绑定则是:
PS:我突然就不想看这个if else经过minify以后的代码了,太恶心了。。。
如,我们的wxml:
我们的propKey是bindtap,我们的propValue是bindViewTap,随后我们就会根据当前的函数名去创建相应的事件。
微信小程序」剖析系列
The text was updated successfully, but these errors were encountered: