Entries Tagged ‘jQuery’:

Study jQuery in a Simplified Way

学习复杂代码的最好方法是简化:

(function(win, undefined) {
    var jQuery = function(selector, context) {
            // jQuery 对象就是 init 函数的一个实例
            return new jQuery.fn.init(selector, context);
        },
        document = window.document,
        push = Array.prototype.push,
        slice = Array.prototype.slice;

    jQuery.fn = jQuery.prototype = {
        init: function(selector, context) {
            // 选择器
            var ret = (context || document).querySelectorAll(selector);

            // 转换为普通数组
            ret = slice.call(ret);

            // jQuery API 的奥妙全在下面这句,将选择器获取的元素添加到 jQuery 对象中
            // 使用 push, 速度飞快(当年担心大量 jQuery 对象实例化的性能问题,根本就不是问题)
            // 使用 push, 还能自动更新 length 属性
            push.apply(this, ret);

            return this;
        },
        length: 0,
        // 实例方法
        attr: function(name, value) {
            return access(this, name, value, jQuery.attr);
        }
    };

    // 这句保证了 init 方法里的 this 拥有 jQuery 实例的方法
    jQuery.fn.init.prototype = jQuery.fn;

    // 静态方法
    jQuery.attr = function(elem, name, value) {
        if (value === undefined) {
            return elem.getAttribute(name);
        }
        return elem.setAttribute(name, value);
    };

    // 神奇的 access, 在实例方法和静态方法中建立了一座桥梁
    // 数组批次操作的实现也在这里
    function access(elems, key, value, fn) {
        var length = elems.length;

        if (value !== undefined) {
            for (var i = 0; i < length; i++) {
                fn(elems[i], key, value);
            }
            return elems;
        }

        return length ? fn(elems[0], key) : null;
    }

    win.$ = win.jQuery = jQuery;
})(window);

测试页面:study-jquery-in-simplified-way.html (请在非 IE 浏览器下运行)

源码:jquery~core.js

Tags: , , ,

jQuery 让人恋恋不舍的秘密

jQuery 将马上发布 1.4 正式版,代码也从 googlecode 上迁移到了 github. jQuery 是我接触的第一个 JS 类库,俗话说初恋总是让人难以忘记。一年以前,这种难以忘记仅仅是一种纯感觉,说不出来具体原因。前几天重新看了一遍 github 上的源码。从纯功能上说,jQuery 并没有特别出色的地方。究竟是什么让我如此恋恋不舍呢?

昨天搭建 taskspeed, 检查 jQuery 的测试代码时,突然明晓了一个也许大家都已知道的秘密:

jQuery 最出色最让人恋恋不舍的是它的 API 设计。
阅读全文 »

Tags: , , ,

JavaScript 框架的 DOM 操作性能

克军提醒,在博客上也搭建了个 TaskSpeed:

http://lifesinger.org/labs/taskspeed/

将感兴趣的框架都更新到最新版本。修改了部分 tests.js, 以保证主流浏览器下所有用例都能得到正确结果。

特别修改了 YUI 2.8 的测试文件:yui-tests.js. 原测试文件大量使用YAHOO.util.Selector这个并不推荐使用的类,不符合 YUI 2 的实际使用情况(一般仅使用 yahoo-dom-event, get, anim 等 utilities)。

从测试结果可以看出:

前三甲是 Dojo 1.4, jQuery 1.4, YUI 2.8
MooTools 在 Safari 下表现优异,其它浏览器下有些惨淡。
Prototype 老矣,尚能饭否?
YUI 3 中规中矩,不出色,但也不糟糕。

Tags: , , , , ,

YUI3 DOM Manipulation Performance Test

测试场景:给 table 的 150 个 tr 添加style="color: #ccc", 重复 20 次。
测试页面:dom-manipulation.html

点击每个测试按钮前,都重新启动浏览器。手工记录 10 * 4 * 4 次无明显偏差的数据,取平均值,可得到以下统计结果:
dom manipulation spent time comparison chart

其它 DOM 操作结果类似。

结论:当页面较复杂,DOM 操作较多时,YUI3 会明显增加脚本执行时间,存在性能隐患。
阅读全文 »

Tags: , , ,

对JavaScript框架的再思考

The Ajax Experience at Boston会议中,John Resig和jQuery大放异彩。John Resig做了《JavaScript Libraries》的演讲,这引发了Ajaxian和不少Blog上关于js库的又一次讨论。Aaron Newton写了一篇长文,提出Programming to the Pattern, 指出jQuery无法很好的做到这一点,而MooTools则非常适合。Aaron的这个论点,和我目前的感觉一致。jQuery易用的同时也宠坏了用户,Everyone Is a Noob At Something, But We All Learn Eventually. 刚开始使用jQuery,会感觉非常容易同时很有成就感,成就感能进一步激发兴趣(对于js的推广普及,John Resig劳苦功高,非常值得敬佩)。但随着代码的增多和编程经验的提升,一个好的程序员会开始想resuable, flexible, refactor等概念 阅读全文 »

Tags: , ,

Page 1 of 212