Javascript—从对DOM集合排序中获得的好处
我正在做我的个人项目,那就是创建一个javascript选择器引擎。引擎将使用CSS2-CSS3语法来选择元素节点。我正在将我的引擎的选择结果与其他选择器引擎的结果进行比较(主要是Sizzle)。我还将其与名为querySelectorAll(QSA)的本机选择器方法进行了比较。我注意到一个区别 文档的HTML结构如下所示:Javascript—从对DOM集合排序中获得的好处,javascript,sorting,css-selectors,Javascript,Sorting,Css Selectors,我正在做我的个人项目,那就是创建一个javascript选择器引擎。引擎将使用CSS2-CSS3语法来选择元素节点。我正在将我的引擎的选择结果与其他选择器引擎的结果进行比较(主要是Sizzle)。我还将其与名为querySelectorAll(QSA)的本机选择器方法进行了比较。我注意到一个区别 文档的HTML结构如下所示: 我使用的选择器是: “span,代码” 当我使用Sizzle或QSA进行选择时,得到的结果是: [..,] 当我使用选择器引擎时,结果是: [,..] 看起来,Sizzl
我使用的选择器是:
“span,代码”
当我使用Sizzle或QSA进行选择时,得到的结果是:
[..
,]
当我使用选择器引擎时,结果是:
[,..
]
看起来,Sizzle和QSA根据元素在文档上的位置对集合进行排序。我的选择引擎不这样做。我发现,使用ComparedDocumentPosition和数组排序方法可以实现排序。显然,这会对性能产生一些影响,尽管我还没有测试它。(来源:)
我想知道排序节点是否比“未排序”节点有一些好处。例如,当元素被排序时,将css样式添加到集合的节点(在循环中,即)是否更有效。是否有其他情况下,使用排序集合可能更好
示例(elementNodes包含选择结果):
for(var i=0,il=elementNodes.length;i首先,我喜欢您在这里所做的工作,尤其喜欢您与其他开源引擎进行比较 实际上,这两个例子的“排序”完全不同
除非你找到一个令人信服的理由(我想不出一个)将你的分类方式与sizzle相同,否则不要这样做。只要您清楚地了解自己的引擎的顺序,并且其他人也能理解它,那么这才是最重要的。首先,我喜欢您在这里所做的工作,尤其喜欢您与其他开源引擎进行比较 实际上,这两个例子的“排序”完全不同
除非你找到一个令人信服的理由(我想不出一个)将你的分类方式与sizzle相同,否则不要这样做。只要你清楚地了解自己引擎的顺序,其他人也能理解,那么这才是最重要的。我相信对节点进行排序所能获得的唯一优势是可预测性,这是不可嗅探的…@FlorianMargaine什么的源代码?对元素集合进行排序的方法可以从我提供的链接中找到(这是John Resig很棒的博客中的一篇文章),我很羞愧地没有展示我的选择器引擎中的代码:D我不太擅长编写漂亮的代码。好吧,你是说你有一些比QSA或Sizzle更快的代码要选择,我想看看:-)。如果太糟糕了,也许可以让它变好?这只会对你有好处:-)我的选择引擎可能没有QSA那么快。它比Sizzle快(根据jsPerf),但是我的有更多的bug和更少的特性。我刚开始重写它,因为我有了一个更好的想法应该怎么做。也许有一天,当它处于更好的状态时,我会展示它:P当QSA不受支持时,我将使用它作为后备。我相信通过对节点进行排序可以获得的唯一优势是可预测性,这是不可嗅探的…@FlorianMargaine什么的源代码?对元素集合进行排序的方法可以从我提供的链接中找到(这是John Resig很棒的博客中的一篇文章),我很羞愧地没有展示我的选择器引擎中的代码:D我不太擅长编写漂亮的代码。好吧,你是说你有一些比QSA或Sizzle更快的代码要选择,我想看看:-)。如果太糟糕了,也许可以让它变好?这只会对你有好处:-)我的选择引擎可能没有QSA那么快。它比Sizzle快(根据jsPerf),但是我的有更多的bug和更少的特性。我刚开始重写它,因为我有了一个更好的想法应该怎么做。也许有一天,当它处于更好的状态时,我会展示它:P当QSA不受支持时,我将使用它作为后备。
elementNodes[i].style.height = '100px';
elementNodes[i].style.width = '100px';
elementNodes[i].style.background = 'red';