8

我已经写 PHP 很多年了,并且使用过所有的框架,但有一件事一直困扰着我……那就是每次有人告诉我的服务器他们想要页面服务。

我已经尝试过缓存、FastCGI、Zend Job Queue(和类似的 symfony 插件——以及我自己的基于 DB 的解决方案,它实现了 System_Daemon 类来运行后台进程),并且我已经设法让我的使用所有这些东西的应用程序相当快......但我无法克服我的设置文件,系统/环境检查功能以及所有应该只真正加载一次的东西......每次都加载某人点击我的页面。

所以,我的闲逛导致了以下问题——

是否有一些方法/技术可以将 PHP 的某些方面加载到 RAM 中,以便在请求该页面时,我的所有 settings.yml 文件、系统检查、框架文件、缓存页面等都可以直接从内存中加载,甚至无需触摸 HD ...或者需要每天通过相同的加载机制 50,000 次来启动程序?

如果 PHP 中什么都没有……是否有任何其他“网络”语言可以以这种方式编译,以允许真正的 init-once 应用程序?

4

6 回答 6

9

如果您正在谈论缓存数据,我认为您应该尝试一下memcached 。如果您在 apache 中使用诸如 mod_php 之类的东西(在请求之间不会死掉),我认为 PHP 在缓存已编译的 php 页面方面相当精通。

于 2009-11-21T09:01:30.637 回答
8

看看APC (Alternative PHP Cache),它保留了编译文件的缓存 (PHP Opcode),还允许您使用 apc_fetch 和 apc_store 在内存中存储随机变量。

安装非常简单,它确实提高了性能。

于 2009-11-21T15:49:50.107 回答
2

在 ram 磁盘上创建一个完整的页面缓存,并让您的 Web 服务器从那里为页面提供服务。这是 wordpress 超级缓存插件使用的一种方法,如果您的网站适合全页缓存,它会非常有用。这就是为什么你甚至没有调用 PHP 解释器。

对于已登录的用户(具有打开的会话),您可以创建一个重写条件,将他们的请求重定向到 PHP 引擎。

此外,始终使用像 APC 这样的操作码缓存并将其用于缓存配置文件(memcache 也可以)。

于 2009-11-21T09:13:25.637 回答
1

如果您要求使用类似 JVM/Tomcat 的应用程序服务器,那么答案可能是否定的。据我所知,PHP 不存在这样的(可用)。PHP 使用无共享架构,因此设计上一切都设置在所有请求上。但实际上,这使得 PHP 可以很好地扩展。

至于加速您的应用程序,请尝试使用memcached代码加速器。也许查看Zend Server以获得完整的软件包。

于 2009-11-21T09:18:41.493 回答
0

关于你的最后一个问题,我相信至少大多数 Python 和 Ruby Web 框架都是这样工作的。

现在构建了 Ruby Web 应用程序,以便每个服务器进程只初始化一次应用程序。当请求进来时,服务器(例如 Apache)将它们传递给在后台运行的 Web 应用程序(通过Rack接口)。

这就是基于Rack的 Web 框架的工作方式。旧版本的 Ruby on Rails 与此类似,尽管它们使用不同的接口与 Web 服务器通信。

于 2009-11-21T11:02:23.977 回答
0

我会关注 Facebook 工程页面(http://www.facebook.com/notes.php?id=9445547199),他们时不时会发布关于如何保持快速/优化/扩展的帖子. 我认为他们对 php 的使用非常令人印象深刻。

于 2009-11-22T01:45:25.100 回答