服务器端JavaScript框架

6

我希望能够用更好的东西来替代PHP(似乎每个人都说PHP很不好,对吗?),并考虑使用服务器端JavaScript。

Node.js似乎非常流行,但我担心会因为异步处理而感到疯狂。在node下是否可能编写普通(同步)代码?

我的愿望:Web和命令行脚本,良好的性能(在计算机语言基准测试中,V8似乎比PHP快一个数量级),最好由某些公司或社区开发,这样它将不会被抛弃,用户社区有一个像样的模块库。

我不考虑基于Rhino的各种框架,因为Rhino运行在Java中,而我不熟悉Java,也知道它的内存占用情况,将JavaScript编译成Java的整个想法对我来说毫无意义。

花了一些时间搜索,找到了许多项目:Myna、Meteor、GromJS、APE、GLUEscript、v8cgi、silkjs、wakanda、GPSEE、sorrowjs、ejscript、Persevere、PhantomJS。

有人对这些有任何经验吗?欢迎任何建议。


1
如果你还没准备好使用异步模型,那么你是正确的:Node.js会让你发疯。 - Pointy
@Sandman4... 我能理解你的问题。我曾经寻找过适用于我的简单实现的新奇东西,但现在除非它有商业目的,否则我不再这样做了。花哨的实现的挑战在于长期维护。如果你的组织拥有足够的PHP技能,就用PHP吧.. 或者简单的.NET(我知道.NET并不简单:D).. 或者使用Node,如果你的组织将沿着这条路线建立能力! - Hasith
Rhino不会编译成Java,它会编译成字节码。 - Dave Newton
1
不想听起来像一个追随者,但 PHP 被认为是“邪恶”的想法更多地是一种时尚。它仍然是迄今为止最常用的 Web 开发语言。人们往往认为微软也是邪恶的,但至少有 90% 的人在他们的电脑上安装了双重启动或引导启动 Windows。 - JSON
5个回答

6

如果你问我,Node.JS 是一个好的选择。你可以编写同步代码,但只有在命令行脚本中才能这样做。在编写 Web 服务器时,你必须走异步路线,否则由于JavaScript 是单线程的,一切都会停止。

Node.js 如此之快的原因是异步 I/O。

你会习惯回调和事件,一段时间后你就不想回头了。

Node.js 是构建快速、可伸缩的网络应用程序的平台,基于 Chrome 的 JavaScript 运行时。Node.js 使用事件驱动、非阻塞 I/O 模型,使其轻巧高效,非常适合在分布式设备上运行的数据密集型实时应用程序。


2
我认为JavaScript并不是单线程的,它只是一种单线程的实现方式。但我不确定这是node.js还是V8本身的限制。 - Sandman4
JavaScript本质上是并行的,因为它使用异步调用。问题在于它运行在通常是单线程的解释器上。 - Andrew Rhyne
JavaScript的使用方式与通常使用方式相同(惊喜)。它有一个主线程,执行解释的JavaScript,在非阻塞环境中工作,并且有多个工作线程在阻塞IO环境中工作。这可以在Node.js(JavaScript和C++模块)中清楚地看到,但实际上所有(主要)浏览器也都是如此(毕竟Node.js使用V8引擎)。考虑到这一点,你可以将其称为单线程或多线程。 - Pijusn

5

Meteor。基于Node.js构建且发展迅速

在Meteor中,您的服务器代码以每个请求一个线程的方式运行,而不是典型的Node异步回调风格。我们认为线性执行模型更适合Meteor应用程序中的典型服务器代码。

更新 一年后 - 为什么选择Meteor


4

我花了整整一天时间在谷歌搜索,当然,我看到了维基百科。我的想法不仅仅是关注性能(尽管benchmark game中的基准测试看起来很令人印象深刻),只是想尝试一些不同于PHP的东西,也许更加“有序”的东西。 - Sandman4

4
Nodejs在许多方面都是非常好的选择。但是你可能会担心它的异步性质。
对此有两点需要注意:
1.如果你没有执行"阻塞IO",那么你永远不用担心异步,并且可以像使用PHP一样从顶部到底部编写你的应用程序。
2.如果你正在执行"阻塞IO",比如读取数据库或访问文件系统,那么你将需要处理异步。幸运的是,有很好的方法可以做到这一点,而无需太多改变你的编码实践。

3
感谢您提供的“众多项目”列表。我们目前正在使用自1996年以来提供服务端JavaScript实现的Microsoft ASP 3.0(“Classic ASP”,随IIS一起提供)-它快速、成熟,由于COM技术而非常可扩展。如果您没有固定在开源上,那么这值得一看。对于我们的开源策略,我们将仔细研究SilkJS。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接