首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化PHP框架加载

优化PHP框架加载
EN

Stack Overflow用户
提问于 2009-08-31 23:26:17
回答 3查看 278关注 0票数 0

我有一个用PHP编写的定制的应用程序框架,我的任务就是优化这个框架。这个框架是一个共享的代码库,它加载MVC“模块”来提供各种功能。每个模块都是一个目录,包含用于控制器和模型的多个PHP类和用于视图的PHP文件。

整个框架加载几乎所有请求,包括图像和样式表。这是因为模块被设计为自包含的包,它们可能包含图像、样式表、javascripts或其他静态文件。因此,为通常非常简单的请求提供服务是有开销的,因为系统必须加载所有模块,才能确定可以从哪些模块中提取静态文件。

处理任何给定URI的一般过程如下:

  1. 所有的基本系统类都包括
  2. ,全局异常处理程序和一些全局变量被设置,
  3. ,系统范围的配置文件被读取。(这是一个用

语句填充的文件,用于设置配置变量)

  1. 数据库连接是
  2. ,模块文件夹是通过opendir()扫描的,每个模块都被验证为有效且没有语法错误,然后包括在内。
  3. 加载第二个配置文件,为模块
  4. 设置配置每个模块的新实例(调用它的__construct()方法并可能创建其他数据库连接、执行单独的启动例程等)对URI进行检查并传递给适当的模块

步骤1-7几乎总是完全相同的.除非安装了新模块或更改了配置文件,否则它们总是执行完全相同的操作。我的问题是,如何优化这一过程?理想情况下,我希望以某种方式处理多个请求,类似于KeepAlive请求的工作方式。初始化所有模块的所有开销对于readfile()、单个映像或css文件来说似乎都是一种浪费,只是为了再次使用相同的开销来服务另一个请求。

有没有办法减少这样一个框架的开销?(我甚至不知道是否有人可以帮助我,不学习所有的代码,这可能是一个没有希望的问题)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-31 23:38:25

通常,将动态web服务器线程绑定到静态内容中是个坏主意。Apache,IIS,Nginx,et。阿尔。已经做好了提供这些文件所需的一切。如果每个静态资产都位于公共docroot中的某个地方,并且有一个惟一的URL,那么您就不需要担心PHP在加载它们时的作用。

此外,如果您能够确保您的缓存相关的头(ETag,最后修改,等等)正在正确生成,每个客户端只应请求每个文件一次。免费缓存==赢了!

票数 2
EN

Stack Overflow用户

发布于 2009-08-31 23:29:22

是否每个请求都需要加载所有模块的原因?为什么不允许控制器指定需要加载哪些模块,而只加载所请求的模块?

票数 0
EN

Stack Overflow用户

发布于 2009-08-31 23:33:30

为什么不在第5步之前移动第8步?首先检查URL,然后根据结果加载模块。

另一个:

每个模块都被验证为有效且没有语法错误,然后包括在内。

您真的在including()文件之前检查它们的语法吗?若然,为甚麽要这样做呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1359852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档