-
2009年03月07日
开发者更“钟情”PHP - [翻译]
原文地址:http://www.theregister.co.uk/2009/03/05/evans_data_gentlemen_prefer_php/print.html
你打倒了PHP了吗?(还有Ruby)
Evans Data展开的一项调查显示,总的来说,与使用Ruby、Perl, Javascript, Flex, 和 VB script编程的开发者相比,使用PHP的开发者更满意脚本语言。
Evans Data说,他调查了世界范围内的500个开发者和IT专家,让他们排列出自己使用的脚本语言的特性和选择。根据12项特征来判断这些语言,诸如易用性、异常处理、安全、客户端脚本及代码社区。
总的脚本王权倒向了PHP,PHP占据榜首。Ruby因其较高的易用性位居第二,也是赢得大部分开发者青睐的最重要的特点。在扩展性取得高分的Python排在第三位。
调查报告:
总体来讲,大部分语言具有优点和缺点。Ruby用户坚信它最容易使用,用Ruby开发要比其他语言快很多。它支持面向对象和代码可复用性,因此开发者应该能够写出可维护和可扩展的程序。然而,Ruby社区非常小,尽管过去两三年里不乏很多大肆宣传,Ruby市场渗透一直微弱,找到Ruby开发者也不太容易---这是一个潜在的大问题。
Evans Data 认为Python用户“满腔激情”,他说,该语言最好的特点支持相对大型复杂应用程序的建立。虽然Python开发者社区不大,但是在过去的几年里显示出扩大的迹象。还有,Google使用Python,所以毫无疑问地,它非常酷。
但是,Ruby和Python在总分上败给了PHP,PHP拥有仅次于JavaScript的第二大脚本语言社区。市场研究公司给PHP起了个绰号“web里事实上的做粗工者”,它具有强大的工具以及“成堆的、容易找到的”开发者。
最低满意度的是那些使用Microsoft VBScript的用户。

按类别划分的前三种语言是:
- 易用性: Ruby, PHP, Flex
- 异常处理: Ruby, Python, Powershell
- 可扩展性: Python, PHP, Perl
- 可维护性、可读性: Ruby, PHP, Python
- 跨平台移植: PHP, Ruby, Python
- 社区: Ruby, PHP, Javascript
- 工具有效性: PHP, Ruby, VB Script
- 工具的质量: PHP, Flex, Python
- 性能: PHP, Perl, Python
- 内存管理: Python, Perl, Flex
- 客户端脚本: Javascript, Ruby, Windows Powershell
- 安全: Microsoft F#, PHP, Ruby
-
2008年06月04日
google将为开发者托管Javascript - [翻译]
Google公司上周发布了它的Google AJAX 类库API,使开发者借助公司整个基础设施去托管和应用大部分的Javascript类库。
面向开发者程序的Google工程师 Dion Almaer说,“它真正减轻了开发人员的生活,提供了开发效率”。
该API属于内容分布式网络、载入架构。通过Google AJAX API Loader方法,应用程序能够访问开源的JavaScript类库,包括script.aculo.us,dojo,jQuery,MooTools和prototype.
Alamaer说项目只是刚刚开始;Google想增加更多的类库。
“如果我们看到好的用法,浏览器会自动装载这些类库。这样,如果它们遇到了我们正使用的URL,它们能够自动从本地系统下载类库,甚至个别的【即时】类库。”Alamaer说。
这样将根本没有网络命中。浏览器具有避免DNS命中、获取服务的IP地址。长时间的针对JavaScript的专门的浏览器缓存可以使用这些URL。
“底线,我最兴奋的是,如果一切发生了,它意味着什么”,Almaer说。“我们就远离了一直以来不得不重新下载我们的标准类库的负担。”
在该项目上的网页提到该API“解决了JavaScript中使用一堆类库开发mashups的痛苦。”
除了托管类库,缓存头部也被设置了;还有及时的bug修复。自动压缩也是项目的部分功能。
原文地址:http://www.computerworld.com/action/article.do?command=printArticleBasic&articleId=9091878
-
2008年06月03日
关于js函数的几种写法
以下三段代码,由繁到简:
-------第一种-------
function foo() {
alert('hello');
}
foo();-------第二种-------
var foo = function() {
alert('hello');
};
foo();-------第三种-------
(function(){
alert('hello');
})();请看prototype.js中的一段代码:
(function() {
var element = this.Element;
this.Element = function(tagName, attributes) {
attributes = attributes || { };
tagName = tagName.toLowerCase();
var cache = Element.cache;
if (Prototype.Browser.IE && attributes.name) {
tagName = '<' + tagName + ' name="' + attributes.name + '">';
delete attributes.name;
return Element.writeAttribute(document.createElement(tagName), attributes);
}
if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
};
Object.extend(this.Element, element || { });
}).call(window); -
2008年05月15日
Javascript的基于原型的继承 - [翻译]
五年前,我写了《javascript的经典继承》。它介绍了Javascript是一种没有类(class-free)的、原型的语言,具有模仿一个经典系统的超强表达能力,它已经使自己突破了传统模型。
由于JavaScript与其原型天性冲突,我的学习之旅一波三折。在一个基于原型的系统中,对象继承对象。然而,JavaScript缺乏表达这个操作的操作符。作为替代,它有一个new操作符,比如 new f()产生一个对象,继承于 f.prototype.
这种间接关系似乎让传统的、有经验的程序员更熟悉,事实上并没有这样,正如我们看到的Java程序员对JavaScript的不好评论。JavaScript的构造函数形式并没有吸引大多数传统程序员。JavaScript的真正原型天性有点晦涩。结果,很少有知道如何有效使用它的程序员。
幸运地是,一个实现真正基于原型的继承的操作符很容易产生。在我的工具包里,有一个标准的特性,我强烈推荐它都好几年啦。
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
函数object获取了真正基于原型的继承,从而解开了JavaScript构造器模式。它用先前的对象作为参数,然后返回一个继承该对象的空的新对象。如果我们想从此新对象中获取一个成员,那么它的缺少键将由先前的对象提供。对象继承对象。面向对象还能做更多吗?
你不需要产生类,而是造一些基于原型的对象,然后用这个object函数产生新实例。JavaScript的对象很容易改变,因此我们可以通过增加一些新字段和方法来扩大该新实例。它们随后就可以看做更新的对象的原型。我们不必用类产生很多相似的对象。
方便起见,我们可以产生一些调用该object函数的函数,并提供其他个性化的东西,比如用特权函数扩展新对象。我有时调用这些maker函数。如果我们有一个maker函数,它调用另一个maker函数而非调用该object函数,那么我们会有一个寄生继承的模式。
借助这些工具,还有JavaScript的lambdas和object quasi-literals,我写了大型、复杂、高效、结构良好的程序。目前传统的对象模型最受欢迎,但是我认为基于原型的对象模型功能更强、提供更好的表达能力。
学习这些新模式也让我成为一名更好的传统程序员。动态世界的特点可以应用于静态世界。
2006-06-07
这儿是另一个表述:
Object.prototype.begetObject = function () {
function F() {}
F.prototype = this;
return new F();
};
newObject = oldObject.begetObject();
2007-04-02
object的问题在于它是全局的,这非常明显。Object.prototype.begetObject的问题在于它会绊住不合格的程序,当begetObject被覆写时,它会产生意想不到的错误。
因此现在我喜欢这种写法:
if(typeof Object.beget !== 'function') {
Object.beget = function(o) {
function F() {}
F.prototype = o;
return new F();
}
}
newObject = Object.beget(oldObject);
2008-04-07原文地址:http://javascript.crockford.com/prototypal.html









