是否有可能不在每次通话时加载自举机制?

这不是一个PHP问题,但我的专业知识是PHP框架。 许多框架都有自举(加载类和文件)机制。 (Drupal,Zend Framework仅举几例) 每次发出请求时,都需要重复完整的引导加载过程。并且可以通过自动缓存一些中间代码来使用APC进行优化 一般问题是: 对于任何语言,有没有办法不加载完整的自举过程?有没有什么方法可以在引导过程结束时“缓存”状态(或者开始)以不再加载所有内容? (也许答案是在其他一些语言/框架/模式中) 它看起来非常低效。     
已邀请:
通常,每个进程执行一次bootstrap / init代码非常有可能,而不必为每个请求重新加载它。在您的具体情况下,我认为这不可能用PHP(但我对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 webserver使用它。反过来,这些服务器提供与我在上一段中提到的大致相同的接口。     
简短的回答是:在PHP中没有好的方法可以跳过引导。 (从技术上讲,你可以24/7运行一个PHP服务来运行分叉的孩子来处理请求,但这不会让你的生活变得更好。) 一个好的框架在bootstrapping中不应该做太多。在我使用的个人文件中,它只是为类注册自动加载功能,从MemCache加载配置设置,并连接到数据库。 此时,它解析请求并将其发送到适当的控制器/操作。虽然每次创建新路由器对象都是“浪费”,但无论引导过程是否在请求之间神奇地“缓存”,都需要完成处理请求的实际过程。 所以我会测量启动页面和获取操作方法之间的时间,看看它是否是一个问题。如果框架执行与配置和类加载相关的昂贵事情,您应该能够通过将最终结果存储在memcache中来最小化。 请注意,您应始终在生产中使用操作码缓存(例如APC)和持久性SAPI(例如,php-fpm)。否则,启动和关闭会产生很多开销。     
如果你想处理多个请求,我建议你研究一下FastCGI和C / C ++接口。通常它会带来许多问题(例如数据缓存/刷新,内存泄漏等),但可以将性能提高10-100倍。 PHP更适合Web界面,如果您需要快速处理,那么您可以编写持久处理程序。 另请参阅Java / Tomcat,Python和mod_perl。有些人也建议使用xcache。 对于PHP框架,他们需要支持核心中的多请求结构,而我不知道有任何框架在做这件事。 但是说,我希望有一个项目可以让PHP脚本响应循环内的多个请求。不是同时,而是绕过初始化。 您还可以查看https://github.com/kvz/system_daemon和http://gearman.org/。     

要回复问题请先登录注册