本人一直在“偷懒”使用 jQuery 框架。同时我也认识到 Prototype 这个 Javascript 框架似乎也不错(不过已经能使用 jQuery 解决问题了,那么就别无所求了)。
无意间看到篇文章,是讲述 Prototype 和 jQuery 两个“阵营”的,作者说的非常的有道理,引用一下:
造成代码风格的这种差异,其实是两个 framework 的开发者不同的代码哲学造成的。
对于 prototype 来说,非常类似 Java 的处理方式:将一系列的功能封装到一个类
之中,比如 Math 类。而对于 jQuery 来说,其哲学理念是将所有的 HTML 节点都
视为一个 Object , 通过调用这个 Object 上面不同的方法向这个 Object 发送不
同的消息,来让 Object 自己实现不同的功能,产生不同的表现。
我个人而言,不管怎么样,这两个 Javascript 框架都是非常优秀的。有兴趣的朋友可以选择自己喜欢的学习之。但我发现原文的两张大图链接由于某些原因不能下载,于是我将其做了一个“镜像”方便大家使用。


还是按照传统,在这里可以 ZIP 打包下载 ,或者访问我的 Yupoo 相册 获得。
另,免费出售 MySQL Cheat Sheet 中文版一张,欲抢从速。
感谢 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 方法》,发现代码的问题还是存在。比如如果数组内有 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 兄弟的稍许快些。经过一点思考以后,我有了些一点点我的心得:
- 我的函数 for 嵌套可以用一个函数独立(就如 Lazy 兄弟的 include 函数一样)。在上述的情况下,调用函数会比循环判断效率要高一些。
- 数组的循环读写操作在数据量大的情况下应格外的注意效率问题
Lazy 兄弟的结论:
对数组的改变开销巨大,如果可能,尽量在不改变原有数组的情况下进行操作。
如最终需要改变数组自身,可将结果赋予原有数组来操作。另外,对于 length
的计算,似乎效率并未受其影响。
Lazy 兄弟的 resultArr 数组按照他这样的写法就可以保存同样的值,在这里赞一个(虽然我的函数经过一点小的修改也可以实现)。感兴趣的朋友可以去 Lazy 的页面去看看。
最后,推荐阅读一下王元涛兄弟的 JavaScript 数组的 uniq 方法,万分感谢。