PHP:改进面向对象类的加载时间

时间:2012-12-10 04:36:43

标签: php oop design-patterns

注意:这个问题有点长

我有一个基于PHP的系统,其Service-Dao-Model结构如下:

Service Factory > Foo Service > Core Service > Abstract Service > Service Interface
Dao Factory > Foo Dao > Core Dao > Abstract Dao > Dao
Foo > Core Model > Abstract Model

让我逐一解释。我首先通过在 Abstract&中定义抽象函数来集中代码。接口类,然后在核心服务,核心Dao和核心模型中实现默认行为。

然后,自定义函数用 Foo Service,Foo Dao和Foo Model 编写。最后,服务工厂& Dao Factory 负责在Factory Pattern中创建对象。

其他信息:所有课程都在log4php附加__construct()个对象。

在当前的开发状态中,我在初始化阶段加载了大约65个PHP类。通过添加计时器(由microtime(true)计时),我发现PHP在加载类时花费大部分时间(0.02119s),接下来是将DB结果集转换为对象值(0.00608s),最后是DB查询时间( 0.00223s)。不能相信类加载时间是DB查询时间的10倍!

问题:如何在加载类时改善PHP初始化时间?

版本:PHP 5.2.16,通过MySQLi PHP扩展连接到MySQL 5.1 localhost服务器

更新 eAccelerator已预先安装在共享主机中! Zend Engine v2.2.0 with eAccelerator v0.9.6.1

P.S。如果需要,可以共享代码。

1 个答案:

答案 0 :(得分:0)

如果类加载时间太慢,我会假设您正在使用某种自动加载方式。考虑一种类似于Symfony的APC类加载器的方法:

http://symfony.com/doc/current/components/class_loader.html https://github.com/symfony/ClassLoader

它背后的想法是它在APC中缓存类路径,因此不会为每个请求遍历自动加载的包含路径。无论如何我认为如果实际的php加载比DB慢,那么有一些架构问题,如果它比ORM层慢,那就更多了......从我的经验来看,加载时间通常是另一种方式。 PHP的哪些部分特别慢。你可以使用的另一种方法也是symfony的一个想法,你有一个部署脚本,在部署时将所有类合并到一个文件中,减少文件系统调用,但我不知道这是否在你的情况下甚至是实用的,它绝对是提高速度。基本上每次你有一个文件系统操作它死得很慢,所以尽量避免它..