westore icon indicating copy to clipboard operation
westore copied to clipboard

可否提供使用原生 setData 和 westore 的性能比较数据?

Open i7soft opened this issue 7 years ago • 6 comments

可否提供使用原生 setData 和 westore 的性能比较数据?这样比较直观理解westore 的性能优异

i7soft avatar Oct 31 '18 01:10 i7soft

对于从无到有的数据,update的方法其实慢于setData,不精确的测试的结果是大概170ms vs 200ms这样。

aeroxy avatar Nov 01 '18 10:11 aeroxy

对于从无到有的数据,update的方法其实慢于setData,不精确的测试的结果是大概170ms vs 200ms这样。

对于已有的数据呢,因为update每次都需要遍历的diff一遍,然后还需要判断是否当前页面的数据而决定给多少个页面setData。

我这边关心的是diff是否真正有用,因为setData是黑盒,所以假如内部是在jscore的上层就构建virtualDom来diff,来判断哪些传给native层通知webview线程渲染的话,diff后最小颗粒度的setData可能并没有意义

WebGuHui avatar Nov 01 '18 12:11 WebGuHui

我的理解跟你差不多 @WebGuHui 我的理解是,不管 setData 是否经过 diff,page 每次都需要拿到完整的 data 来渲染整个virtualDom,然后此virtualDom和前一个进行 diff。由于 setData 是异步的,我也想不出什么方式才测试性能~

i7soft avatar Nov 01 '18 12:11 i7soft

update + diff 可以随意操作数据,并且保证小白随意 update 也写不出慢的程序。westore proxy 版本是最终形态,diff都没有,更改数据直接可以拿到 path。

dntzhang avatar Nov 01 '18 12:11 dntzhang

稍微研究过小程序在开发工具的appserver代码,setData 是每次操作后把数据放到一个队列的,之后再统一合并,并不会每次 setData 都 render 一次,这个有点类似 react.js 的 setState,所以分开写多个 setData 和一次性 setdata 理论上应该不差多少~~~

只是技术探讨,希望能在项目中尽快集成这么好的东西~~~

i7soft avatar Nov 01 '18 13:11 i7soft

setData 还是可以写成同步的,利用regeneratorRuntime可以这样写:

setDataSync = async (obj) => {
  const that = this
  return await new Promise(resolve => that.setData(obj, resolve) )
}

aeroxy avatar Nov 01 '18 14:11 aeroxy