将 PHP 与全栈框架用于高负载项目是个坏主意吗?
Is using PHP with full-stack framework for highload project a bad idea?
我知道 PHP 代码被编译为字节码并在每个 运行(即每个页面请求)上重新执行。所以引擎应该在每次请求时重新定义所有使用的类、函数、变量等。
当使用像 Laravel 或 CakePHP 这样的全栈框架时,这也意味着在每次请求时,相同的引导工作会一次又一次地完成,比如解析配置文件、注册路由、自动加载类,等等
这似乎不是处理此类问题的最佳方式。甚至缓存,无论是 OPcache 还是框架缓存系统,都不够有用,因为脚本仍然需要执行。
另一方面,基于 NodeJS 或 Ruby 等引擎的应用程序在启动期间仅编译和引导一次。所以我想他们应该比 PHP.
有更好的可扩展性
但是 PHP 非常受欢迎,甚至 Facebook 都在使用它。所以我想知道,对于一个可能会遇到高负载的网站来说,什么是正确的选择?为此目的使用 PHP 和全栈框架是个坏主意吗?
I know that PHP code is compiled to the bytecode and reexecuted on every run (i.e. on every page request). So engine should redefine all used classes, functions, variables, etc. on every request.
从 PHP 5.5 开始,opcode cache comes default. Prior, APC could be used. You can also use something like HHVM 通过 JIT 编译进一步提高性能(PHP 7 将包括类似的改进)。
When using full-stack frameworks like Laravel or CakePHP this also means that on every request the same bootstrapping work is done again and again, like parsing configuration files, registering routes, autoloading classes, etc.
Laravel(我不能代表 CakePHP)只在使用时加载 类 - 你的大部分 类 永远不会在平均请求中加载。大多数关于使用像 Symfony/Laravel 这样的更大框架的偏执狂只是 - 偏执狂。
This seems to be very unoptimal way of handling such stuff. And even caching, be it OPcache or framework caching system, is not helpful enough, because script still needs to be executed.
操作码缓存和框架缓存(文件、Redis 等)提供了巨大的好处,您在这里可以轻率地忽略这些好处。是的,每个请求都需要执行代码(尽管像 Varnish 这样的东西甚至可以减少)——但这样的事情对于任何语言和任何框架都是正确的。
我知道 PHP 代码被编译为字节码并在每个 运行(即每个页面请求)上重新执行。所以引擎应该在每次请求时重新定义所有使用的类、函数、变量等。
当使用像 Laravel 或 CakePHP 这样的全栈框架时,这也意味着在每次请求时,相同的引导工作会一次又一次地完成,比如解析配置文件、注册路由、自动加载类,等等
这似乎不是处理此类问题的最佳方式。甚至缓存,无论是 OPcache 还是框架缓存系统,都不够有用,因为脚本仍然需要执行。
另一方面,基于 NodeJS 或 Ruby 等引擎的应用程序在启动期间仅编译和引导一次。所以我想他们应该比 PHP.
有更好的可扩展性但是 PHP 非常受欢迎,甚至 Facebook 都在使用它。所以我想知道,对于一个可能会遇到高负载的网站来说,什么是正确的选择?为此目的使用 PHP 和全栈框架是个坏主意吗?
I know that PHP code is compiled to the bytecode and reexecuted on every run (i.e. on every page request). So engine should redefine all used classes, functions, variables, etc. on every request.
从 PHP 5.5 开始,opcode cache comes default. Prior, APC could be used. You can also use something like HHVM 通过 JIT 编译进一步提高性能(PHP 7 将包括类似的改进)。
When using full-stack frameworks like Laravel or CakePHP this also means that on every request the same bootstrapping work is done again and again, like parsing configuration files, registering routes, autoloading classes, etc.
Laravel(我不能代表 CakePHP)只在使用时加载 类 - 你的大部分 类 永远不会在平均请求中加载。大多数关于使用像 Symfony/Laravel 这样的更大框架的偏执狂只是 - 偏执狂。
This seems to be very unoptimal way of handling such stuff. And even caching, be it OPcache or framework caching system, is not helpful enough, because script still needs to be executed.
操作码缓存和框架缓存(文件、Redis 等)提供了巨大的好处,您在这里可以轻率地忽略这些好处。是的,每个请求都需要执行代码(尽管像 Varnish 这样的东西甚至可以减少)——但这样的事情对于任何语言和任何框架都是正确的。