QWrap Selector解密之五:小结
Selector自从被jquery带到js中来,它在js中就一直是一个使用频率最高的东西之一。
作为使用者,也没必要去详细了解。不过通过写selector来了解selector与提高自己的js水平,还是一件不错的事。我想,在为数不多的写过selector的同学里,大部分也应该只是练练手而已,而没有刻意追求使用性。
前面几篇文章只是粗略的介绍了下selector的写法、querySelector顺序、matchSelector概要、自选器转换,它们是selector中几个容易误解或走岔的地方,了解了这些,selector就会变得简单。再也不必听别人怎么神话化sizzle,或许是历史的原因,sizzle也有功能不全,也有理论缺陷、也有实现漏洞、也有效率极限与坑坑、等等,只是,它看它的代码有点累,所以大家都没有细心了解罢了。
2010年底,QWrap决定开源,最后选择了使用自己的selector,因为:QW.Selector能提供更多的功能(例如filter等),也在理论上更严谨、并且代码量也很小、性能也足够达标,…………。
在这里,也提一些QW.Selector没做或没做好的几个地方:
1。抛弃sizzle的isXml参数。----这个是无情的抛弃,不知道要说什么原因。
2。选择器群组的除重与排序。----这个sizzle做了,但是会导致query选择器群组时效率风险大了很多。权衡之后,决定放弃除重与排序。
3。使用原生querySelectorAll时只是用它来作一些基本的查询,没有用到全部。----没做全面测试,不够信任。另外,性能既然能在ie6下没问题,在其它所谓的现代浏览器里,就更不用考虑了。
4。Selector.one(selector,context)方法,目前只是用“return Selector.one(selector,context)[0];”这是一个偷懒的做法,效率有损失。
5。没有为提高效率作cache。----因为目前的效率已经挺满意了,所以懒得去为了提高效率加些什么cache。
6。Selector.filter(els,selector,refEl)中的selector参数不支持以+~关系符打头。----也是一个理论问题,等有人有需要的时候再考虑吧。
7。……
结语:QW.Selector系列文章就写到这里了,更细节的实现问题,欢迎到QWrap的QQ群里讨论。
附:QWrap网址:http://www.qwrap.com