Grayson.Shang 发表于 2022-10-27 20:45:31

干货必读提升性能:五、你真的会用ODATA吗

本帖最后由 Grayson.Shang 于 2022-11-16 18:01 编辑

相信,来这个专题学习的小伙伴们,不是已经使用活字格已经深入骨髓的大佬,要不就是即将使用活字格开发新项目,又很有远见的新一代大佬了。





今天的课程很简单,主要讲的就是ODATA的使用,内容是请谨慎使用ODATA,讲完了~~~


当然不是了,其实关于ODATA使用的道理,大家使用活字格时间长了都懂,但是对这个问题有没有一个比较深刻的印象呢,今天在这个帖子中,就会为大家解密我们ODATA使用不当到底会在使用性能上带来多大的影响,说实话,我之前也没有想到会这么大。

先说说简单对于ODATA性能的查询
1个ODATA,花费时间,慢的时候400ms,快时50ms,这个和查询条件的设置有关

12个ODATA,平均每个ODATA200ms,12个,2s


50个ODATA,平均每个ODATA 50ms,50个,2.5s


表格中ODATA到底会执行多少次
再来看一下我这边使用查询条件筛选了3行数据,在50个字段的情况下会出现什么样的火花

表格中,除了最后一列是绑定字段ID,其他的数据都是通过ODATA根据ID进行查询的数据,可以看到表格中每一个单元格除了绑定字段ID,都执行了ODATA数据查询。也就是这样的命令会执行150次,是不是很震惊


接下来主要测试的是在表格中使用ODATA的性能,这个为了简单使用的都是简单的ID,比如1~100(这会导致单次查询时间比较短)

一个表50个字段,只获取一行数据
这样想一下,当你想要在页面查看主子表关系的时候,若你的主表有100个字段,而这100个字段你都是用0DATA来获取数据的,那么获取这100个字段最快也要50*100ms,也就是5s,要是慢的话,200*100,是20s,但为什么我们平时在使用过程中没有感知到有这么长的时间呢,这个原因主要是因为异步执行,关于异步执行,有兴趣的小伙伴可以度娘。
上面提到的这种情况,在异步请求的情况下我尝试了一下,只有300ms就可以完成,当然不完全准,有时100ms,有时200ms,不过差不多就是几百毫秒级的


一个表50个字段,获取10行,和100行数据
若是你有50个字段,而且在表格中,有10行数据,且都是使用ODATA查询的,在异步的情况下时间是0.35s,这还是在异步的情况下特别是当数量多到一定程度之后,也不可能完全异步,还会分批同步,想要当这样的数据不需要多,只要有100行就会在页面感受到明显的延迟,我这边测试已经有2s钟了。而且这个数据还是我刷新了之后浏览器有缓存了,时间越来越短。


当然上面都是我模拟的场景,真实的场景比这个还要复杂,我这还是根据当前数据表的ID查询当前数据表的字段信息,ID本身就是主键,是有索引的,我们活字格的小伙伴们,的场景可是超级丰富的,通过当前数据表的某一个字段取另一个数据表查询数据,而这个值在那个数据表中还没有索引,像我现在这种100行数据,每行50个字段,2s就可以出来,当时有一个客户,不到40行数据,十几个字段硬是加载了十几秒没出来结果,所以大家应该懂了吧。

最后总结一下ODATA的使用:
1. ODATA很好用,但请不要把他放进表格,在表格中,谁也不清楚数据表会存多少行数据,估计他也不喜欢成群结队,能使用绑定字段就是用绑定字段
2. 页面中出表格的地方可以使用ODATA吗,可以但也要慎用,最好使用有索引的字段作为查询条件,最好是主键,若不是,可以试着增加索引。
3. 外联库ODATA更要谨慎使用,因为ODATA获取数据并不是本身慢,而是容易出现多次请求,外联库请求一次请求上花的时间可能比内联库多(这我猜的)

当然,我们在很多时候不建议使用ODATA,那我想要查询对应的值的话我该怎么用,我这里提供几点我的建议
1. 组合框,加组合框的查询条件,因为组合框只会请求一次后端,就是数据很多,也不会造成性能问题,不过若是访问应用的设备内存比较小,比如PDA,那么此方法禁用,在不多的情况下使用ODATA可能会更好
2. VLOOKUP+表格,这是是在表格中查找数据最好的办法,因为表格请求数据只有一次,而VLOOKUP查询是在当前页面表格上查,不会存在发送http请求的情况,这样性能也会有很大的提升
3. 设置变量命令+设置单元格属性,为什么说这个算是ODATA的上位替代呢,因为页面上公式刷新的时机会受到各种情况的影响,比如页面布局变动,特别是在流失布局中,其实并不需要刷新公式,但是也会刷新,而设置变量命令+设置单元格属性,触发事件是有自己控制的,所以也会提高一些性能








页: [1]
查看完整版本: 干货必读提升性能:五、你真的会用ODATA吗