Kineticjs停止渲染问题

3
在一个信息亭上使用Kinetic JS制作可搜索的目录列表,效果很好!但有一个问题。我在Chrome浏览器中,在侧边栏有一个字母列表(如A、B、C、D等),用户可以点击该列表查找以该字母开头的名字。当单击某个字母时,它会重新渲染整个舞台。这样做10-15次后,舞台就变成了空白,但我仍然可以点击那些名字应该出现的地方并获得其详细信息 "lightbox",或者点击字母应该出现的地方并获得新的列表,但仍然是空白的,即任何矩形或文本都没有填充或颜色。更糟糕的是,如果我转到完全不同的使用KineticJS用于其他内容的信息亭页面,它也不会再次呈现,除非我离开该域(localhost)并转到Google之类的网站并返回,或打开一个新标签页或重新启动Chrome 。现在我完全迷失了方向,如果找不到解决方法,重新设计而不使用Kinetic将会是巨大的损失。
我已经尝试过确保我的内存管理是正确的,并且相当确定了。我的系统内存确实增加了,但Chrome似乎很快就进行了垃圾回收。我甚至尝试在每次重新渲染时调用destroy()来销毁我创建的所有KineticJS对象,但没有成功。

整个阶段需要重新渲染吗?您是否可以只重新渲染图层,或将每个列表作为单独的图层/组,并根据需要隐藏/显示它们?我们需要看一些代码(最好是一个jsfiddle)以进一步帮助。 - projeqht
1
我可能不需要重新渲染整个舞台,但这是一个简单的解决方案,而且效果非常流畅。我的脚本有800多行,包含所有必要的功能(搜索、弹出式键盘(也是kineticjs)、排序等)。我会尽快在jsfiddle中重现并发布。 - Dave_750
不重新渲染舞台似乎解决了这个问题。这是一个很容易的更改,但现在它似乎占用了更多的内存。我会查看文档以确保我正确地重复使用它。感谢您的建议。 - Dave_750
我仍然在想为什么它会在同一网站的完全不同页面之间锁定它? - Dave_750
1
我现在正在使用第一阶段的对象,并且有了很大的改进。我也尝试绘制所有26个(字母)层并显示/隐藏它们,但这也非常昂贵。用户还可以拉起类似于移动键盘的键盘,并搜索名称,匹配项将显示在同一舞台上。我从Active Directory中获取此目录的数据(后端是Django服务器和每晚从AD发布的服务),需要管理近1000个条目。使用这种方式,我没有看到响应性方面的差异,但更多的加载时间会影响可用性。现在它运行得非常好。 - Dave_750
显示剩余4条评论
1个回答

4

2
哥们儿!!!我跟你说,我已经跟这个问题斗争了好久了。它几乎让我的整个项目都失败了。在29上禁用2D画布并转移到30上解决了这个问题。不过,至少现在我的JavaScript绝对是无懈可击的了!!!非常感谢!! - Dave_750
很高兴能帮忙!我也曾经为此苦恼了一段时间。 - jws
谢谢,非常好用!现在,我该如何让所有终端用户都这样做呢? - logic8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接