我使用的Web应用程序项目延迟加载树; 但是,我碰到一些奇怪的行为。 似乎只有3个级别的一个简单的树引起的根部结构7名的请求。 看官方JRS树测试之后,我不知道这是否正常。
看看这个例子: http://download.dojotoolkit.org/release-1.6.1/dojo-release-1.6.1/dijit/tests/tree/Tree_with_JRS.html
当我访问它,我的浏览器,使根的结构5个请求。 我唯一的问题是为什么呢?
编辑 :值得一提的是,这并不与道场1.5或以下发生。
下面是它看起来像在检查器(Chrome):
终于我发现道场利益解决这个问题,感谢这个帖子: thisisalink 。
基本上,使用Dojo 1.6的dijit.tree.ForestStoreModel用一些新的钩状功能(我猜是因为用的TreeGrid所做的工作)扩展。 其中的一个, onSetItem
一旦树节点展开被称为(因此会形式预加载使用惰性加载店时,满载)。 在基本实现,这个函数调用_requeryTop()
这再次查询所有根项目。
我们的应用程序,我们可以简单地替换dijit.tree.ForestStoreModel
与我们的实现digicult.dijit.tree.ForestStoreModel
,其中onSetItem
和onNewItem
不叫this._requeryTop
。
可悲的是它是不够的子类ForestStoreModel,因为有this.inherited(arguments);
电话中不能轻易更换的功能,所以我们不得不复制整个类(副本类,重命名,注释掉两行 - 在很长一段时间:-)最简单的解决) - 这可能迫使我们重新设计类我们再次更新道场一个更新的版本。
我也有过用10000+节点树时,一次全部装在最高层所面临的性能问题的dijit树,用〜3000项。 树只有一个,它加载在通过Ajax调用第一次点击整个树虚拟根节点。
在这种情况下,树创建了超过1分钟加载,我得到了“停止运行此脚本”对话框弹出的IE8。
将几个优化步骤后,树现在所有主流浏览器在2秒钟内加载(包括IE8-IE11)。
我用的是所做的第一个优化dijit/tree/ObjectStoreModel
作为树的模型和dojo/store/Memory
作为数据存储。
这加快了插入Ajax响应JSON节点到树的数据存储。
第二个优化有关创建慢的树的节点。 这花了更多的努力来解决:
我不得不延长dijit/Tree
和覆盖setChildItems()
函数(它的一部分调用_createTreeNode()
函数)。
我不停的整个逻辑setChildItems()
不变,只是增加了使用该技术创建树节点的并行化:
http://www.picnet.com.au/blogs/Guido/post/2010/03/04/How-to-prevent-Stop-running-this-script-message-in-browsers.aspx
希望它能帮助,如果需要的话,我可以张贴我的解决办法的源代码