-2

注意:这个问题有点长

我有一个基于 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 & Interface 类中定义抽象函数来集中代码,然后在Core Service、Core Dao 和 Core Model中实现默认行为。

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

其他信息:所有类都log4php附有对象__construct()

在目前的开发状态下,我在初始化阶段加载了大约 65 个 PHP 类。通过添加计时器(timed by 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

如果需要,可以共享 ps 代码。

4

1 回答 1

0

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

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

它背后的想法是它将类路径缓存在 APC 中,因此不会为每个请求遍历用于自动加载的包含路径。无论如何,我认为如果实际的 php 加载比 DB 慢,则存在一些架构问题,如果它比 ORM 层慢,则更是如此……根据我的经验,加载时间通常是相反的。特别是 PHP 的哪些部分最慢。您可以使用的另一种方法也是 symfony 的一个想法,您有一个部署脚本,该脚本在部署时将所有类合并到一个文件中,减少文件系统调用,但我不知道这在您的情况下是否实用,它肯定速度提升。基本上每次你有一个文件系统操作它都非常慢,所以尽可能避免它..

于 2012-12-10T04:49:54.757 回答