找回密码
 立即注册

QQ登录

只需一步,快速开始

bytcib
金牌服务用户   /  发表于:2020-5-19 09:53  /   查看:7063  /  回复:10
1金币
本帖最后由 bytcib 于 2020-5-19 09:58 编辑

在一个sheet表中,现有1044行数据,表中有一列为结构类型,共有4种类型:预算项目组、预算项目、预算动因、预算参量,现在访问请求为根据结构类型列筛选,但是很慢才能把数据渲染到spreadJS中。
从一个json中按条件筛选数据很慢这个可以理解,但是能不能做一个懒加载,我先处理200行数据,然后就把结果返回给spreadJS渲染,并呈现给用户,然后在后台再悄悄地继续处理,每处理200行数据就把数据追加到spreadJS中,直到处理完成,反馈一个提示信息:加载完成,这个提示信息停顿3秒后消失,当然,这个提示信息是我们自己用JS做的,与spreadJS无关,我只是在描述产品。

这样,对于用户来说,看到的是数据一点一点出来的,虽然在最后出现加载完成提示前用户仍然不能使用,但是感觉会好一些,比面对一个遮罩层:正在筛选数据,请等待要强。


请问,要实现这个功能要如何做?

最佳答案

查看完整内容

您把数据查询回来放到前台展示,是在页面进行数据绑定了把?要实现每次加载200行,只需要在数据源中放200行数据,不断往数据源中追加数据。

10 个回复

正序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-5-20 17:42:37
11#
我测试了一下fromJSON这个操作会花费6S左右的时间,虽然没有咱们这么慢,但6S确实也不能接受。这里会当做问题提交上去。
另外咱们也可以对比一下我测试的demo看一下咱们比6S慢这么多的原因在哪里您可以用附件demo中的导入ssjson来导出咱们提供的ssjson看一下花费时间。
这个demo您替换一下引用的js文件为您本地的spreadjs相关引用即可使用,

IO_Template_01 - 副本.html

10.93 KB, 下载次数: 64

回复 使用道具 举报
bytcib
金牌服务用户   /  发表于:2020-5-20 13:01:31
10#
本帖最后由 bytcib 于 2020-5-20 13:02 编辑

image.png282636718.png
这是我们查到的另一个贴子报的问题,我们的问题和这个类似,但是那个贴子也没有什么结果

贴子在这里:

https://gcdn.grapecity.com.cn/showtopic-38415-1-1.html
回复 使用道具 举报
bytcib
金牌服务用户   /  发表于:2020-5-20 12:55:18
9#
本帖最后由 bytcib 于 2020-5-20 13:04 编辑

时间长是长在paint那里
另外,6秒到10秒之间有4秒的停顿,不知道在发什么呆呢
回复 使用道具 举报
bytcib
金牌服务用户   /  发表于:2020-5-20 12:53:52
8#
image.png336142882.png
回复 使用道具 举报
bytcib
金牌服务用户   /  发表于:2020-5-20 11:43:27
7#
ClarkPan 发表于 2020-5-20 09:19
那这样,您先提供一下您的ssjson,我们看一下为什么这么慢吧, 按我们的测试如果是纯数据50W行20列的数据在 ...

附件是我从数据库字段里粘出来的

懒加载问题.json

5.29 MB, 阅读权限: 100, 下载次数: 2

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-5-20 09:19:43
6#
那这样,您先提供一下您的ssjson,我们看一下为什么这么慢吧, 按我们的测试如果是纯数据50W行20列的数据在一个一般的PC机上渲染是秒开的级别。
所以推测您的ssjson中可能还有其他影响性能的内容或者可能在使用方式上看有什么可以优化的地方。总而言之您先提供一个能重现问题的ssjson我们先分析一下慢的原因
回复 使用道具 举报
bytcib
金牌服务用户   /  发表于:2020-5-19 16:20:37
5#
Fiooona 发表于 2020-5-19 14:00
您把数据查询回来放到前台展示,是在页面进行数据绑定了把?要实现每次加载200行,只需要在数据源中放200行 ...

我是把spreadJS的json整体放到数据库中的,数据库是PostgreSQL,支持json数据类型,这个大json大概是5-6M,我是一次性从数据库中把这个大json取出来的,取出来就已经是spreadJS能处理的json了,所以我不存在向数据源请求的问题,我不是从一个关系型的数据库的数据表中取数据。
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-5-19 14:09:27
4#
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
大白菜
中级会员   /  发表于:2020-5-19 14:03:32
3#
这个我有个想法,但是不一定最好,最好见官方。
我觉得你们可以大概设定外部承载的dom大小来判断,比如dom高度 600 px的。你可以放个30行,你就加载30行,超出30行你在继续加载。

可以通过监听TopRowChanged 事件来实现。  仅供参考。

sheet.bind(GC.Spread.Sheets.Events.TopRowChanged, function (sender, args) {
  //这里你可以拿到总的行数 然后在加载。
}

评分

参与人数 1金币 +333 收起 理由
Fiooona + 333 赞一个!

查看全部评分

回复 使用道具 举报
最佳答案
最佳答案
Fiooona
论坛元老   /  发表于:2020-5-19 09:53:12
来自 2#
您把数据查询回来放到前台展示,是在页面进行数据绑定了把?要实现每次加载200行,只需要在数据源中放200行数据,不断往数据源中追加数据。
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部