我有一个用PHP编写的定制的应用程序框架,我的任务就是优化这个框架。这个框架是一个共享的代码库,它加载MVC“模块”来提供各种功能。每个模块都是一个目录,包含用于控制器和模型的多个PHP类和用于视图的PHP文件。
整个框架加载几乎所有请求,包括图像和样式表。这是因为模块被设计为自包含的包,它们可能包含图像、样式表、javascripts或其他静态文件。因此,为通常非常简单的请求提供服务是有开销的,因为系统必须加载所有模块,才能确定可以从哪些模块中提取静态文件。
处理任何给定URI的一般过程如下:
语句填充的文件,用于设置配置变量)
步骤1-7几乎总是完全相同的.除非安装了新模块或更改了配置文件,否则它们总是执行完全相同的操作。我的问题是,如何优化这一过程?理想情况下,我希望以某种方式处理多个请求,类似于KeepAlive请求的工作方式。初始化所有模块的所有开销对于readfile()、单个映像或css文件来说似乎都是一种浪费,只是为了再次使用相同的开销来服务另一个请求。
有没有办法减少这样一个框架的开销?(我甚至不知道是否有人可以帮助我,不学习所有的代码,这可能是一个没有希望的问题)
发布于 2009-08-31 23:38:25
通常,将动态web服务器线程绑定到静态内容中是个坏主意。Apache,IIS,Nginx,et。阿尔。已经做好了提供这些文件所需的一切。如果每个静态资产都位于公共docroot中的某个地方,并且有一个惟一的URL,那么您就不需要担心PHP在加载它们时的作用。
此外,如果您能够确保您的缓存相关的头(ETag,最后修改,等等)正在正确生成,每个客户端只应请求每个文件一次。免费缓存==赢了!
发布于 2009-08-31 23:29:22
是否每个请求都需要加载所有模块的原因?为什么不允许控制器指定需要加载哪些模块,而只加载所请求的模块?
发布于 2009-08-31 23:33:30
为什么不在第5步之前移动第8步?首先检查URL,然后根据结果加载模块。
另一个:
每个模块都被验证为有效且没有语法错误,然后包括在内。
您真的在including()文件之前检查它们的语法吗?若然,为甚麽要这样做呢?
https://stackoverflow.com/questions/1359852
复制相似问题