近期都在做小程序,Taro 最大的特性也是适配了小程序的 react-like 轮子,官方链接里也放出了跟 mpvue 和 wepy 的对比。
先说结论吧:个人比较看好 Taro,因为 mpvue 需要很多手工优化,天花板也更明显,可能只适合简单业务场景。wepy 则学习成本略高,但至少性能目前是最好的?因为 taro 还没细看…
再说说表现:近期半移植 + 半研发一个现有业务的「复杂多级多选联动的筛选器+分页列表」,在 webview 中好好的逻辑,到 mpvue 的小程序项目里一下点击要卡 2 秒!!!
初看有 2 个原因:vue 的内核是一边 diff 一边 patch 的,在不同的 platform 用 node-ops 来适配到 render 层,这导致 mpvue 里 diff 结果完全被浪费了。详情可以看看下图的源码比对,左边是调用 DOM API 的 web 端,中间是 weex 右边是小程序,可以看到函数都是白执行的…上来就延迟了 50 ms,感受一下
当然这块不是没优化空间,要 hack 的话,得自行维护一个待 patch 的 object 对象,等 diff 完「差量」 data 后,一次性批量 setData。然而 vdom 的 diff 和 data 的 diff 并不通用,不方便直接通过 node-ops 适配。或许,基于未来的 vue 3.0 会有更好方案…
2. vue 的数据模