0

我知道 PHP 代码被编译为字节码并在每次运行时重新执行(即在每个页面请求上)。所以引擎应该在每个请求上重新定义所有使用的类、函数、变量等。

当使用像 Laravel 或 CakePHP 这样的全栈框架时,这也意味着在每个请求上都会一次又一次地完成相同的引导工作,比如解析配置文件、注册路由、自动加载类等。

这似乎是处理此类事情的非常不理想的方式。甚至缓存,无论是 OPcache 还是框架缓存系统,都没有足够的帮助,因为仍然需要执行脚本。

另一方面,基于 NodeJS 或 Ruby 等引擎的应用程序在启动期间只编译和引导一次。所以我想他们应该比 PHP 有更好的可扩展性。

但是 PHP 如此流行,甚至 Facebook 也使用它。所以我想知道,对于一个可能会承受重负载的网站来说,什么是正确的选择?出于这种目的使用带有全栈框架的 PHP 是一个坏主意吗?

4

1 回答 1

2

我知道 PHP 代码被编译为字节码并在每次运行时重新执行(即在每个页面请求上)。所以引擎应该在每个请求上重新定义所有使用的类、函数、变量等。

从 PHP 5.5 开始,操作码缓存成为默认设置。之前,可以使用 APC。您还可以使用HHVM之类的东西通过 JIT 编译进一步提高性能(PHP 7 将包括类似的改进)。

当使用像 Laravel 或 CakePHP 这样的全栈框架时,这也意味着在每个请求上都会一次又一次地完成相同的引导工作,比如解析配置文件、注册路由、自动加载类等。

Laravel(我不能代表 CakePHP)只在使用类时才加载它们——你的大多数类永远不会在平均请求中加载。大多数关于使用像 Symfony/Laravel 这样的大型框架的偏执狂就是这样 - 偏执狂。

这似乎是处理此类事情的非常不理想的方式。甚至缓存,无论是 OPcache 还是框架缓存系统,都没有足够的帮助,因为仍然需要执行脚本。

操作码缓存和框架缓存(文件、Redis 等)提供了巨大的好处,您在这里相当随意地忽略了这些好处。是的,每个请求都需要执行代码(尽管 Varnish 之类的东西甚至可以减少这种情况)——但是对于任何语言和任何框架都是如此。

于 2015-02-24T16:20:37.350 回答