【发布时间】:2012-12-10 04:36:42
【问题描述】:
注意:这个问题有点长
我有一个基于 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
让我一点一点地解释。我尝试通过在抽象和接口类中定义抽象函数来集中代码,然后在Core Service、Core Dao和Core Model中实现默认行为。
然后,自定义函数写在Foo Service、Foo Dao和Foo Model中。最后,Service Factory & Dao Factory负责在Factory Pattern创建对象。
其他信息:所有类都在__construct() 中附加了log4php 对象。
在目前的开发状态下,我在初始化阶段加载了大约 65 个 PHP 类。通过添加计时器(由microtime(true) 计时),我发现PHP 在加载类时花费的时间最多(0.02119s),接下来是将DB结果集转换为对象值(0.00608s),最后是DB查询时间(0.00223s) )。无法相信类加载时间是数据库查询时间的 10 倍!
问题:如何提高加载类时的 PHP 初始化时间?
版本:PHP 5.2.16,通过 MySQLi PHP 扩展连接到 MySQL 5.1 localhost 服务器
更新 eAccelerator 已预先安装在共享主机中! Zend Engine v2.2.0 with eAccelerator v0.9.6.1
附注如果需要,可以共享代码。
【问题讨论】:
-
您有 eAccelerator 或任何其他缓存机制吗?
-
@BenD 没有使用其他缓存机制。将尝试调查 eAccelerator。
-
@Charles 将尝试 xdebug / xhprof 来创建更多的分析细节。
-
短版:升级到 5.4,因为有很大的优化,尤其是 PHP 处理 OOP 代码的方式。另外,仅供参考,工厂方法是一种反模式。它是过程代码,已被面向对象的工具掩盖。如果你想写出好的 OOP 代码,那么它的任何地方都应该没有静态调用。
标签: php oop design-patterns