jde*_*ard 5 php bootstrapping frameworks
这不是一个PHP问题,但我的专业知识是PHP框架.
许多框架都有自举(加载类和文件)机制.(Drupal,Zend Framework仅举几例)
每次发出请求时,都需要重复完整的引导加载过程.并且可以通过自动缓存一些中间代码来使用APC进行优化
一般问题是:
对于任何语言,有没有办法不加载完整的自举过程?有没有什么方法可以在引导过程结束时"缓存"状态(或者开始)以不再加载所有内容?(也许答案是在其他一些语言/框架/模式中)
它看起来非常低效.
一般来说,每个进程很有可能执行一次引导/初始化代码,而不必为每个请求重新加载它。在您的具体情况下,我认为 PHP 不可能做到这一点(但我对 PHP 的了解有限)。我知道我经常将此视为对 PHP 架构的批评……但公平地说,它并不是唯一这样做的语言或框架。要详细说明...
“为每个请求运行所有内容”的风格来自“CGI”脚本(参见通用网关接口),这些脚本本质上只是程序,每当请求传入与文件匹配时,网络服务器就会将其作为单独的进程执行,并预定义将设置环境变量以提供元信息。该文件基本上可以是用任何语言编写的任何可执行文件。由于这基本上是人们想到的第一种进行服务器端脚本编写的方法,因此许多最早集成到 Web 服务器中的语言都使用了 cgi 接口,其中包括 Perl 和 PHP。
为了消除您发现的低效率问题,设计了第二种方法,它使用 Web 服务器本身的插件......对于 Apache,这包括用于 Perl 的 mod_perl 和用于 Python 的 mod_python (后者现在被用于 Python 的 mod_wsgi 取代)。使用这些插件,您可以配置服务器来识别每个进程加载一次的程序,然后执行必要的初始化,将其持久状态加载到内存中,并提供一个函数供服务器在有请求时调用。这可能会导致一些非常快的框架,以及诸如简单的数据库连接池之类的事情。
设计的另一个解决方案是用所需的语言编写一个 Web 服务器(通常是精简的),然后使用真正的 Web 服务器充当复杂请求的代理,同时仍然直接提供静态文件。Python 也经常使用此路径(通常通过“Paste”项目提供的服务器)。Java 也通过 Tomcat Web 服务器使用它。这些服务器反过来提供与我在上一段中提到的大致相同的界面。