呈现 dijit 小部件的最快方法是什么? 我知道编程方式比声明方式更快。 ( Some reference )
我有一个加载速度太慢的自定义小部件(它是一个带有组合框、按钮和其他用于添加过滤器等的小型 dijit 小部件的数据网格)。
查看源代码,我发现所有 dijit 小部件都是以编程方式创建的,但是插入它们的 DOM 节点也是以编程方式创建的。
这是“正确”的方式吗?
我正在尝试加速这个小部件的渲染,目前我的选择是结合一个速度模板(我的公司使用struts2 + velocity)来创建DOM节点,用< strong>以编程方式创建小部件(使用 placeAt 和类似方法将小部件插入已构建的 DOM 节点)。
它会很好地工作,但遗憾的是所有的 css 类都被 dijit 覆盖,所以我必须再次覆盖它们,这会导致合理的开销。
在模板中我这样写:
<input id="idOfAnExistingDomNode" class="myCssClass" />
要在该 DOM 节点中插入 FilteringSelect,我必须这样写:
var fieldSelect = new dijit.form.FilteringSelect({
store : jsonStore,
searchAttr : "caption",
labelAttr : "caption",
selectOnClick : true,
value : "Content"
}, "idOfAnExistingDomNode");
fieldSelect.domNode.className += " myCssClass";
最后一行是必要的,因为 myCssClass 在创建 FilteringSelect 的过程中被覆盖了。
有什么办法可以避免这个问题吗?
或者,也许,我正试图以错误的方式做这件事?我不完全确定“速度模板”的事情。
注意:Dojo 版本是 1.5,不,遗憾的是我们不能将它升级到更新的版本。
请原谅我糟糕的英语。
最佳答案
通常,一种更快的实例化小部件的方法是在临时 div 中创建它们,然后将该 div 移动到 DOM 上。您是否尝试过分析此实例化中到底慢了什么?我的一部分想知道是否花太多时间等待数据,因为一些小部件 + 具有合理页面大小参数的网格应该不会花费很长时间来加载。
关于你的类(class)问题,奇怪的是道场没有混入现有类(class)。也就是说,您可以先在节点上进行查找,获取类属性,然后将其指定为 创建 FilteringSelect 时混合对象中的类属性。如果这样做,请确保将类用引号引起来,否则较旧的 IE 会拒绝它。
关于css - 呈现 dijit 小部件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953631/