我多年来一直在编写PHP,并且已经在阳光下使用了每个框架,但有一件事总是让我感到烦恼......那就是每当有人告诉我的服务器时,整个血腥的东西都必须被解释和执行他们想要提供的页面。
我已经尝试过缓存,FastCGI,Zend作业队列(和类似的symfony插件 - 以及我自己的基于数据库的解决方案,实现System_Daemon类来运行后台进程)我已经管理过使用所有这些东西让我的应用程序相当快......但是我无法克服我的设置文件,系统/环境检查功能以及所有应该只加载ONCE的所有东西......有人打我的页面的时间。
所以,我的漫步导致以下Q -
是否有一些方法/技术可以将PHP的某些方面加载到RAM中,以便在请求该页面时,所有我的settings.yml文件,系统检查,框架文件,缓存页面等都可以直接从内存加载而无需触摸高清...或需要每天50,000次通过相同的加载机制来启动程序?
如果PHP中没有任何内容......是否有其他可以通过这种方式编译的“网络”语言,以允许真正的init-once应用程序?
答案 0 :(得分:9)
如果您正在谈论缓存数据,我认为您应该尝试memcached。我认为如果你在apache中使用像mod_php这样的东西(在请求之间没有死的话),PHP对缓存已编译的php页面非常熟练。
答案 1 :(得分:8)
看看APC (Alternative PHP Cache),它保存了编译文件的缓存(PHP操作码),并且还允许您使用apc_fetch,apc_store将随机变量存储在内存中。
安装非常简单,它确实提升了性能。
答案 2 :(得分:2)
在ram磁盘上创建一个完整页面缓存,并使您的Web服务器从那里为该页面提供服务。这是wordpress supercache插件使用的一种方法,如果您的网站适合整页缓存,它的效果很好。你甚至没有调用PHP解释器。
对于已登录的用户(具有打开的会话),您可以创建重写条件,将其请求重定向到PHP引擎。
另外,总是使用像APC这样的操作码缓存并将其用于缓存配置文件(memcache也很好)。
答案 3 :(得分:1)
如果您要求像应用程序服务器这样的JVM / Tomcat,那么答案很可能就是答案。据我所知,PHP没有这样的(可用的)存在。 PHP使用无共享架构,因此在设计中所有请求都设置了所有内容。但实际上,这使得PHP的规模相当不错。
至于加快应用程序的速度,请尝试使用memcached和code accelerator。也许请查看Zend Server以获得完整的包。
答案 4 :(得分:0)
关于你的上一个问题,我相信至少大多数Python和Ruby Web框架都是这样的。
现在构建了Ruby Web应用程序,以便每个服务器进程只初始化一次应用程序。当请求进入时,服务器(例如Apache)将它们传递给在后台运行的Web应用程序(通过Rack接口)。
这是基于Rack的Web框架的工作方式。旧版本的Ruby on Rails是相似的,尽管他们使用不同的界面与Web服务器通信。
答案 5 :(得分:0)
我会密切关注Facebook工程ppage(http://www.facebook.com/notes.php?id=9445547199),他们偶尔会发布有关如何保持快速/优化/扩展的帖子。我认为他们使用php是非常令人印象深刻的。