如果我们研究PHP和JS框架的编写方式,你会发现很大的不同。 JavaScript通常具有可能需要不确定时间的操作的回调/承诺。即使PHP有可能将函数作为参数传递,但它并不常用。
我想以数据库操作为例说明我的情况:
PHP的雄辩:
$organization = Organization::where('name', '=', 'test')->first();
Node.JS Sequelize:
Organization.findOne({where: {name: 'test'}})
.then(function (organization) {
// Organization has been fetched here
}
);
正如你所看到的,Sequelize使用promises来使操作异步。但是,PHP的Eloquent没有。
除了框架基准之外,这是否意味着Node.JS更快/更高效,因为它没有阻塞?或者这是因为JS是单线程的?也许我有错误的看法,这种模式是否同样用两种语言实现?
答案 0 :(得分:3)
可以编写阻塞node.js代码,并且可以编写异步PHP代码(参见libevent扩展,amphp项目或ReactPHP项目)。这两者都不是真实的。这意味着它是非典型的,除了专门的用例外,可能不推荐。
PHP可以同步工作,因为在典型的Web服务器中,有许多PHP进程同时运行。每次处理1个HTTP请求。
每种型号都有利弊。例如,如果您正在进行CPU绑定工作,那么在node.js中执行多项操作会更困难;而在PHP中,您可能需要更多内存使用以获得更高的并发性,因为通常您可能在等待PHP中的IO,因此大多数情况下都是如此。你的PHP进程可能会等待。因此,您的CPU使用率最低,并且您有很多PHP进程等待IO,而所有这些都在内存中都有您喜欢的Web框架的副本。
Node.js允许构建某些类型的应用程序,这些应用程序在PHP中更难做,因为没有共享内存空间。但是,一旦你的node.js应用程序需要超越单个进程,那么这种优势可能最终变得不那么重要了。
无论如何,这是一个非常广泛的问题。在某些方面,node.js和PHP都可以解决类似的用例,但是当你的用例变得更具异国情调时,其中一个可能会更好。
如果您主要是构建一个Web应用程序,那么您不会期望大规模的扩展,它可能并不重要。您可以选择它。
所以最终哪个更好的选择取决于你的用例。