论坛首页 Web前端技术论坛

Elements! v0.9 速度最快的选择器引擎

浏览 3652 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-28   最后修改:2008-12-28

不知道大家有没有使用过jQuery等javascript框架.

里面的$函数通常都具有这样的功能, 传递一个CSS3规范的选择器就能获得选择器选择到的元素. 使代码更加简洁.

最近的浏览器都在提升javascript的执行效率, 独独IE却一直使用很慢的javascript引擎.

目前网络上已有的选择器引擎在IE下要比其他浏览器下慢上好几倍.
我写的Elements!框架, 目前完成了选择器部分. 使IE在选择器的速度上不落后于其他浏览器, 甚至超过了其他浏览器.

我在IE下执行全套的slickspeed测试, 比firefox下的得分还要高.
Elements!最大的优势就是速度, 在IE下, 速度可以超越其他引擎2至5倍. 而在其他浏览器下速度也是最快的.

为什么Elements!这么快?
主要有几点原因(根据重要性为先后顺序).

1, jit编译技术
2, inline优化

3, 良好的算法
3, Function.prototype.apply
4, 缓存技术

打开测试页面看看你的浏览器跑多快


IE7.0测试结果图


注意测试结果单元格有时候虽然是最快, 但是不是显示为黄绿色是因为有其他引擎出现了错误的结果(要么用时比正确的少,要么找到的结果比正确的多)


Elemens! 目前选用的license是Creative Comons License 3.0 BY-NC-SA

暂时保留商业使用的权利

 

   发表时间:2008-12-29   最后修改:2008-12-29
测试了一下 chrome下 惨不忍睹 全是黑色的错误 ……
倒是Sizzle拿到了第二名
Peppy 0.1 Sizzle Elements EXT 2.2 Dojo 1.2.0 JQuery 1.2.6 MooTools 1.2.1 prototype.1.6.0.3 YUI 2.6.0
47 53 1 77 123 115 116 136 418
0 请登录后投票
   发表时间:2008-12-30  
支持楼主,通过你提供的测试页面 速度确实很优秀,就是在GOOGLE浏览器里有问题
0 请登录后投票
   发表时间:2008-12-30  
joyfun 写道
测试了一下 chrome下 惨不忍睹 全是黑色的错误 ……
倒是Sizzle拿到了第二名
Peppy 0.1 Sizzle Elements EXT 2.2 Dojo 1.2.0 JQuery 1.2.6 MooTools 1.2.1 prototype.1.6.0.3 YUI 2.6.0
47 53 1 77 123 115 116 136 418

javne 写道
支持楼主,通过你提供的测试页面 速度确实很优秀,就是在GOOGLE浏览器里有问题


感谢你们的测试, 我会在下一个版本里加强其他浏览器的支持的.
目前我又找到一个在firefox下可以在速度上拖开其他引擎的地方.
0 请登录后投票
   发表时间:2008-12-31  
今天有时间学习了您的代码.
1, jit编译技术
2, inline优化
真的是至强法宝呀.
我打算使用您的这两项技术.当然代码自己重新写.
应该不存在版权问题吧?
0 请登录后投票
   发表时间:2008-12-31  
achun 写道
今天有时间学习了您的代码.
1, jit编译技术
2, inline优化
真的是至强法宝呀.
我打算使用您的这两项技术.当然代码自己重新写.
应该不存在版权问题吧?


当然没有版权问题, 这两个技术又不是我的专利, 我这个Elements实际只是抛砖引玉而已
CC License只是暂时使用的版本. 正式版本的时候License说不定会换.

不过由于除了IE之外的浏览器都加强了js的运行效率, jit和inline的效果已经不是很明显了.
0 请登录后投票
   发表时间:2009-01-14  
请详细解释一下javascript的jit编译技术!
谢谢!
0 请登录后投票
   发表时间:2009-03-29  
有一bug,不知道现在是否解决了?
不能对同一个selector查询两次以上,否则从第二次开始获得的对象为undefined。
比如
    
<div>
    <div class="demo">
            <div id="cont" class="cont" title="cont"></div>
        </div>
    </div>
    <script type="text/javascript" src="Elements.js"></script>
    <script type="text/javascript">
        var element = document.getElementsBySelector("div[class=cont]")[0];
		// 第一次正常
		alert(element.title.charAt(0));

		var element = document.getElementsBySelector("div[class=cont]")[0];
		// 此时element为undefined
		alert(element.title.charAt(0));
    </script>
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics