JavaScript征服了服务器

Node.js的, Jaxer, EJScript, RingoJS, and AppengineJS combine the familiarity of JavaScript, low overhead, blazing speed, and unique twists

1996年,当没有人相信苹果公司和美国在线被认为最有可能成功的时候,网景把它闪亮的、新的JavaScript语言从浏览器中取出,并把它嵌入到网景企业HTTP服务器中。这可能是第一次有人试图让JavaScript成为后台服务器的通用语言,但不是最后一次。在Netscape溶入Mozilla之后,新的JavaScript栈来了又去,因为真正的信众一次又一次地尝试。

15年后的今天,服务器上的JavaScript再次流行起来。最近一轮的信众认为JavaScript是“新的Ruby”,其原因与Netscape开始这一趋势的原因是一样的。对客户端和服务器使用相同的代码可以使每个人的工作更轻松——您永远不知道什么时候需要将例程从一个例程转移到另一个例程。我已经记不清有多少次我试图确保在服务器上运行的SHA256哈希算法的Java版本与在客户机上运行的JavaScript版本产生相同的输出。

[也在InfoWorld:在企业中掀起波澜的13个开源开发项目]。看到“开源编程工具正在兴起“|,保持了与关键应用程序的开发见解致命的异常的博客开发者世界通讯。]

但这次有些事情有所不同。早期的许多工作都是围绕像Rhino这样提供完全可接受的性能的非常好的JavaScript引擎构建的。现在我们有一些新的JavaScript引擎比如谷歌的V8,它的速度快得多,并且使用了许多及时编译的思想,这些思想多年来一直支撑着Java的虚拟机。突然之间,JavaScript的速度足够快,以至于人们认为使用它是为了速度,而不是方便。浏览器引擎上的所有艰苦工作完全有可能使JavaScript成为最快的动态语言,并成为服务器端编程的最佳选择之一。

要了解的热情最新的破灭,我花了一些时间来安装更有趣的JavaScript服务器的几个,建设一些基本的网站。这些工具都是耐人寻味的,彻底的乐趣,并渗出 - 软件相当于一个新鲜的,乳胶漆干净的外套。这种新奇有利有弊,不过,因为一些文件的非常粗略,许多示威比吐出没有复杂得多的“hello world”。

我喜欢重新思考我所知道的关于服务器的一切所带来的挑战和刺激,但我仍然发现自己在把这些新想法推进得太快或太远时犹豫不决。这些服务器刚从实验室出来,是为试验而设计的,而不是为祖母构建用于检查cd利息的应用程序。对于一个公司来说,理想的项目可能是一个临时的网站,为一个一到两天的活动做准备,这个活动在一瞬间就结束了。现在,享受创造一些新的和有趣的东西,而不是赌你的生意。

JavaScript服务器:node . js最火的明星是不可否认的Node.js的一个简单的包装吸引了人们的注意,导致推出了术语“粉丝”。博客等如何节点当人们试图弄清楚他们到底能把这个工具推多远的时候,这些提示和建议就会被填满。关于这个项目已经召开了一个会议,人们使用“node”这个词作为动词,意思是编写node .js代码。明年冬天,这种语言还会存在吗?我们还会用它来制造关于“节点中的坏代码”的双关语吗?我相信这些创意还会在这里,因为它们很强大,但名字可能会变成别的东西,因为在这个领域有大量的再创造。

最厉害的想法是,Node.js的是光,而替代品如Java较重。该工具的成功的秘诀似乎在于一个仿真陈述通常由Node.js的恋人重复:Java服务器使用的RAM 2MB只是创建一个线程。作为标准的Java Servlet容器创建为每个请求一个线程,很明显,有,一个相当沉重的服务器说,自由RAM 8GB只能处理8000人。当然线程经常使用更多的内存,这进一步切入开销和位置8000为上限。

线程被认为是处理器处理工作负载的轻量级方式,当人们对处理数千个并发用户感到满意时,它们肯定是成功的。但是当人们开始计算越来越大的网站的开销时,一些人开始考虑是否有更好的方法。

Node.js的是一个很好的解决方案。它仅使用一个线程在它的服务器,一切运行。当请求到达飞,Node.js的把他们一个在调用服务器时所指定的单一功能的时间和双手它们。如果你认为一个Java服务器页面,Java Servlet中,或PHP文件正在建设一个网站的一个轻量级的方式,你会用这种效率印象深刻:

什么?如果您要指出JSP或PHP文件可能就像“hello world”这样简单,请立即停止。您必须深入思考,记住Java Servlet容器或PHP服务器为您所做的一切。您可以在JSP中编写“hello world”,但是Java将消耗2MB的RAM来创建一个线程,该线程将支持最终输出线程“hello world”的代码。JSP看起来可能很简单,但事实并非如此。

js除了抓取传入的请求,调用函数网站,然后将结果发送出去之外,只做很少的事情。这种专一性使它能够处理在端口上敲打的所有请求,并快速分派它们。

我见过标准发行的桌面机器可以轻松地或多或少同时处理数千个请求。数据像闪电一样进出,因为一切都在RAM中处理,可能也在缓存中。简单的网站效率高得惊人。

但重要的是要认识到,这种闪电般的速度部分来自于忽略其他特征。在一个线程中运行所有内容意味着如果线程重载,所有内容都可以备份。如果一个线程要花很长时间才能完成,那么Java花费在把干净、干净的床单铺在床上的所有工作都是值得的。

为了实现这一点,我创建了一个简单的服务器,它接受一个值“n”,并将1到n之间的所有数字相加。顺便说一下,这是一个纯粹的cpu绑定操作,应该只使用两个寄存器。它不会因为等待RAM或文件系统而挂起。服务器和以前一样快。我不得不在我的低功耗桌面(1.83GHz Intel Core Duo)输入像n=90000000这样的数字后,它才似乎完全停止了工作。这是一个9后面有70个0。答案是16位。

当我喂胖号到服务器,我发现所有的其他请求会得到它后面线。当工作量短,Node.js的似乎是多任务,因为它得到的一切办得这么快。但是,如果你发现重关闭服务器的项目,你可以在它后面排队锁定了一切。

不要害怕。如果发生这种情况,Node.js的爱好者会责怪你,而不是机器。作为一名程序员,您的工作是预测任何延迟,比如对远程Web服务的请求。然后将代码分解为两个函数,就像AJAX程序员在客户机上经常做的那样。当返回数据时,Node.js将调用回调函数。同时,它将处理其他请求。

在右手连接到正确的思维心态,其结果可能是惊人的效率。当程序员花了几分钟,分离前后的延迟之后所做的工作,没有必要为该机从数据库占用RAM来存储状态的线程只是让这将是准备当数据最后显示出来或远程服务器,甚至是文件系统。这对程序员让电脑保持所有的状态不可否认容易,但它是更有效的这种方式。正如企业试图拼命,以避免库存占压资金,程序员的工作是这样想一个厂的老板,对待RAM作为资本,避免消耗任何它。

对于习惯让编译器考虑这些事情的程序员来说,这种思维方式似乎是一种负担,但是JavaScript程序员习惯使用回调函数,因为这就是浏览器沙箱的配置方式。这种细分是他们的第二天性,这就是他们如此相爱的原因。

我认为,Node.js就会快速增长超出了做简单的实验,并开始处理semiserious但重量轻的任务,如网上投票和简单的信息用户之间传递。如果服务器的工作量是简单和短暂的,Node.js的是一个很好的解决方案。该工具是稳定的,至少作为实验,出血边缘代码都和我想到的是熟练的JavaScript编程人员能够编写做一些令人惊讶的事情廉租铁回调的简单链。更大的责任将遵循?我想这是可能的,但现在这已经足够让大家消化。

JavaScript服务器:JaxerJavaScript爱好者的另一个完全不同的选择是Jaxer,从Aptana,谁做了Ruby和PHP一个伟大的,基于Eclipse的IDE中的人一个很好的工具。Aptana的服务器端Java工具是非常不同Node.js的因为它的目标更多地是让程序员的生活更轻松,而不是服务器。Jaxer在幕后处理所有复杂的消息传递,因此编写服务器端代码就像编写客户机代码一样。

为Jaxer编写服务器端脚本就像为Web页面编写脚本一样。区别在于您将runat='server'属性隐藏到脚本标记中。就是这样。其他一切都类似于构建一个支持javascript的Web页面。每当您使用特殊的runat属性调用一个函数时,它将在服务器上执行,而不是在浏览器中。Jaxer处理将参数绑定到AJAX调用中的繁琐工作。一个小属性控制的代码运行,Jaxer处理所有的消息传递和调用。

自由可以是一个有点令人不安的老手在JavaScript编程谁已经花了多年的思考,他们只编程客户端。现在,您可以通过仅仅将runat属性写入数据库或访问遥远的文件。

我发现它很容易使用的技术构建Web页面。任何对AJAX不熟悉的人都会发现,让Jaxer处理绑定和解绑定数据的所有后台工作要方便得多。它几乎都是自动的,甚至比一些AJAX库(如jQuery)使用起来更简单。

目前还不清楚Jaxer享受了多少支持。该服务器过去与Aptana的其他产品捆绑在一起,但现在它被冷落在角落里。我的猜测是,很多人不需要那么多的帮助处理AJAX调用现在图书馆像jQuery简化这个过程。

对Jaxer的理想的工作将是一个地方的大部分工作是在客户端,但一些关键的部分,必须在服务器上运行上完成。这很容易使服务器上运行的代码,但它不是那么容易编写复杂的服务器端代码。有很多这样的工作,和人民编码这些工作时,它说,你可以在一个文件中写一个完整的Web应用程序的Aptana瞄准的人。

JavaScript服务器:EJScript虽然在服务器上使用JavaScript的想法听起来很简单,但是有很多不同的方法来实现它。EJScript和两者有很大的不同吗JaxerNode.js的但在结构上非常类似于经典的服务器设计,如Ruby on Rails和Struts。它是使用纯模型-视图-控制器范例构建的,所以对于使用流行的Ruby或Java框架创建网站的人来说,它非常熟悉。

基本工具是一个命令行可以执行JavaScript或创建一个Web服务器。如果你想使用JavaScript编写你的服务器脚本,基本的shell将这样做。如果你想创建网站,该工具将使用标准的脚手架全部的创建,更新建了网站,并在数据删除(CRUD)操作。

整个过程类似于用Java和各种服务器框架进行编码,部分原因是EJScript包含了一种定义类和子类的方法。如果你问我,这个面向对象的结构是JavaScript的一个很大的增强,但它将不同于任何学习浏览器JavaScript的人。尽管大多数JavaScript程序员都知道如何摆弄原型,但他们可能不太熟悉Java和其他面向对象语言如何构建类型层次结构。

EJScript借鉴了Ruby on Rails,因为搭建的许多部分是由“约定而不是配置”定义的。目录位于标准位置,通常最简单的解决方案是使用正确的名称创建一个文件。为了进一步区别于JavaScript,如果将语句放在单独的行上,则不需要在后面使用分号。Python和CoffeeScript模式正在击败旧的C和Pascal世界观。

相关:
12 第1页
第1页共2页
IT薪资调查:结果在