jQuery 和 Prototype 的 Cheat SheetDecember 20, 2007

本人一直在“偷懒”使用 jQuery 框架。同时我也认识到 Prototype 这个 Javascript 框架似乎也不错(不过已经能使用 jQuery 解决问题了,那么就别无所求了)。

无意间看到篇文章,是讲述 Prototype 和 jQuery 两个“阵营”的,作者说的非常的有道理,引用一下:

造成代码风格的这种差异,其实是两个 framework 的开发者不同的代码哲学造成的。
对于 prototype 来说,非常类似 Java 的处理方式:将一系列的功能封装到一个类
之中,比如 Math 类。而对于 jQuery 来说,其哲学理念是将所有的 HTML 节点都
视为一个 Object , 通过调用这个 Object 上面不同的方法向这个 Object 发送不
同的消息,来让 Object 自己实现不同的功能,产生不同的表现。

我个人而言,不管怎么样,这两个 Javascript 框架都是非常优秀的。有兴趣的朋友可以选择自己喜欢的学习之。但我发现原文的两张大图链接由于某些原因不能下载,于是我将其做了一个“镜像”方便大家使用。

http://files.gracecode.com/2007_12_20/1745166417.jpg

http://files.gracecode.com/2007_12_20/1366687851.jpg

还是按照传统,在这里可以 ZIP 打包下载 ,或者访问我的 Yupoo 相册 获得。

另,免费出售 MySQL Cheat Sheet 中文版一张,欲抢从速。

jQuery1.2 参考(CHM 格式)下载December 16, 2007

感谢 awflasher 兄弟的分享,这份 CHM 文档正是我目前开发所必须的。我对 awflasher 兄弟对于 jQuery 见解非常的赞同(详见他的 Blog):

我认为,原型开发者(Prototype Developer)肯定更加喜爱 jQuery 这套框架,
没有 Yui-Ext 的庞杂,没有 Prototype(框架)的 OOP 语法。jQuery 的“哲
学”(philosophy,或者叫“理念”吧)无不映射着一种“简单、朴实”之美:
Find things, do stuff(我姑且理解为“物尽其用”)

希望大家能认识 jQuery 这个优秀的 Javascript 框架。我本人也写过一些用 jQuery 做的小东西,同时再推荐下我以前转自某博客的一篇 jQuery 相关的文档,非常的有用。

废话不多说,这里是 Zip 格式打包下载

更新 JavaScript 数组的 uniq 方法December 11, 2007

上次写的一篇《JavaScript 数组的 uniq 方法》,发现代码的问题还是存在。比如如果数组内有 undefined 元素就无法过滤等。

昨天看见 Lazy 兄弟重新更新了函数,现在他是这样子写的:

Array.prototype.uniq = function() {
    var resultArr = [],
        returnArr = [],
        origLen = this.length,
        resultLen;

    function include(arr, value) {
        for (var i = 0, n = arr.length; i < n; ++i){
            if (arr[i] === value) {
                return true;
            }
        }

        return false;
    }

    resultArr.push(this[0]);
    for (var i = 1; i < origLen; ++i) {
        if (include(resultArr, this[i])) {
            returnArr.push(this[i]);
        } else {
            resultArr.push(this[i]);
        }
    }

    resultLen = resultArr.length;
    this.length = resultLen;
    for (var i = 0; i < resultLen; ++i){
        this[i] = resultArr[i];
    }

    return returnArr;
}

按照他的说法:“这种解法在整个过程对原有数组的改变只有两次,效率比其他两种高了2个数量级左右!”,我实测了下此函数的效率,的确如此(测试连接点这里)。

我也重新编写和更新了我的函数,现在看起来是这个样子的:

Array.prototype.uniq = function() {
    var tmp    = new Array;
    var length = this.length;

    for(var i = 0; i < length; i++) {
        var push = true;
        for(var j = i + 1; j < length; j++) {
            if(this[j] === this[i]) {
                push = false;
                break;
            }
        }

        if(push) {
            tmp.push(this[i])
        }
    }

    this.length = tmp.length;
    for (var i = 0; i < tmp.length; i++) {
        this[i] = tmp[i];
    }

    return tmp;
}

由同一个页面测试所得,效率还是 Lazy 兄弟的稍许快些。经过一点思考以后,我有了些一点点我的心得:

  1. 我的函数 for 嵌套可以用一个函数独立(就如 Lazy 兄弟的 include 函数一样)。在上述的情况下,调用函数会比循环判断效率要高一些。
  2. 数组的循环读写操作在数据量大的情况下应格外的注意效率问题

Lazy 兄弟的结论:

对数组的改变开销巨大,如果可能,尽量在不改变原有数组的情况下进行操作。
如最终需要改变数组自身,可将结果赋予原有数组来操作。另外,对于 length
的计算,似乎效率并未受其影响。

Lazy 兄弟的 resultArr 数组按照他这样的写法就可以保存同样的值,在这里赞一个(虽然我的函数经过一点小的修改也可以实现)。感兴趣的朋友可以去 Lazy 的页面去看看。

最后,推荐阅读一下王元涛兄弟的 JavaScript 数组的 uniq 方法,万分感谢。

  1. 1
  2. ...
  3. 21
  4. 22
  5. 23
  6. 24
  7. 25
Yahoo 统计