php – 是否有可能在每次调用时都不加载bootstrapping机制?

这不是一个PHP问题,但我的专业知识是PHP框架.

许多框架都有自举(加载类和文件)机制. (Drupal,Zend Framework仅举几例)

每次发出请求时,都需要重复完整的引导加载过程.并且可以通过自动缓存一些中间代码来使用APC进行优化

一般问题是:

对于任何语言,有没有办法不加载完整的自举过程?有没有什么方法可以在引导过程结束时“缓存”状态(或者开始)以不再加载所有内容? (也许答案是在其他一些语言/框架/模式中)

它看起来非常低效.

解决方法:

通常,每个进程执行一次bootstrap / init代码非常有可能,而不必为每个请求重新加载它.在您的具体情况下,我认为这不可能用PHP(但我对PHP的了解有限).我知道我已经把这看作是对PHP架构的经常批评……但是为了公平对待PHP,它不是唯一以这种方式做事的语言或框架.详细介绍……

“为每个请求运行一切”的风格来自于“CGI”脚本(参见Common Gateway Interface),这些脚本基本上只是当网络服务器在匹配文件和预定义环境变量时作为单独的过程执行的程序将设置提供元信息.该文件基本上可以是任何语言编写的任何可执行文件.由于这基本上是任何人想出服务器端脚本的第一种方式,因此许多第一种集成到Web服务器的语言使用了cgi接口,其中包括Perl和PHP.

为了消除你发现的低效率,设计了第二种方法,它将插件用于Web服务器本身…对于Apache,这包括用于Perl的mod_perl和用于Python的mod_python(后者现在用Python的mod_wsgi替换).使用这些插件,您可以配置服务器以识别每个进程加载一次的程序,然后执行必要的初始化,将其持久状态加载到内存中,并为服务器提供单个函数,以便在有请求时进行调用.这可以导致一些非常快速的框架,以及诸如简单的数据库连接池之类的事情.

设计的另一个解决方案是以所需语言编写Web服务器(通常是剥离的),然后使用真实的Web服务器充当复杂请求的代理,同时仍然直接提供静态文件. Python也经常使用这条路径(通常通过’Paste’项目提供的服务器). Java也通过Tomcat webserver使用它.反过来,这些服务器提供与我在上一段中提到的大致相同的接口.

上一篇:Android 面试知识点之 - 谈谈你对 Context 的理解(3-5)


下一篇:开发PHP数据导入框架的最佳实践是什么?