我正在创建一个包含许多很多小部件的HTML页面" (可以是1000的大小,display:none
可以通过用户交互动态修改的.data()
。
每个小部件都必须包含一些有关它的信息。
目前我一块一块地构建DOM,并为每个小部件添加一个jQuery innerHTML
。但是这个小块的构建太慢了(在Parse HTML上花了很多时间),所以我想切换到一种新的方法,我首先构建一个包含所有小部件的字符串,然后用.data()
将其添加到DOM中一气呵成。但是这不允许我在构建过程中使用.data()
。
由于所有小部件都有唯一的ID(目前只存储在id
...),我可以想到两个明显的解决方案:
data-widgetid
属性,窗口小部件ID为内容id
属性(与此同时,我有一个很大的JavaScript哈希,它将widget-id链接到每个widget数据。)
我更喜欢哪种方法?
性能和资源是一个问题(也在移动设备上) 根据{{1}}属性我干扰了DOM,因此我不知道这是否会产生任何负面影响。 (例如,可能是浏览器开始为内部构建一个额外的查找结构,我可以避免这种情况。我不是浏览器开发人员,所以我不知道是否是这种情况)
答案 0 :(得分:3)
使用ID。如果要保护DOM的ID名称空间,请使用前缀。例如,其中“123”是唯一ID。如果您的应用程序由数据库驱动,则主键可方便地提供非冲突的ID值。否则,请使用客户端计数器生成唯一ID。
通过document.getElementById可以更快地按ID访问元素。现代浏览器允许这种访问非常快。与自定义属性相比,内部存储也更有效。要访问自定义属性,您必须遍历所有匹配的节点,并将它们与自定义属性的值进行比较。一些旧IE也不支持自定义属性。
答案 1 :(得分:1)
如果您不需要按id
获取这些元素,并且只使用它来将数据与元素相关联,我建议您不要使用id
。
由于id
是唯一的,因此浏览器会构建一个哈希表,以便id
快速检索元素。
因此,将id
添加到许多不需要它们的元素中会不必要地增加哈希表的大小。
平均而言,哈希表中的搜索是O(1)
,因此大小无关紧要。但是,在最坏的情况下,它是O(n)
,所以如果可以,最好有一个小桌子。
这样,如果您使用document.getElementById
来获取其他元素,则可能会更快。