对于我们的网络游戏,我们已经写吨PHP类和职能按主题分组,在文件和随后的文件夹。最后,我们有现在我们所有的后端编码(逻辑和数据库访问层)中的一组文件,我们呼 我们包括我们的库在我们GUI(网页,介绍层)使用 include_once('pathtolib/文件。公司').

问题是,我们已经偷懒有内含物,包括最发言,在我们的库文件造成,从各个网页,每次我们有包括任何库文件,我们实际上载整个库,文件通过的文件。

这具有重大影响的性能。因此,什么是最好的解决方案吗?

  • 删除所有包括发言的库文件,而只有通话的必要从一个网页吗?
  • 做些别的事情?

服务器使用一个经典的灯堆(PHP5).

编辑:我们有一个简单的功能(遗产的原因,大多数代码)和课程。所以自动加载不够的。

有帮助吗?

解决方案

  • 管理所有包括手动,只有在需要的地方
  • 设置你的包含路径下,只有在它已被默认是类似的东西。:/usr/lib/梨/:/usr/lib/php,它指的只在那里,php.net/set_include_path
  • 不要用自动加载,这是缓慢和使APC和相当缓存的工作很难
  • 你可以关闭的"统计"作APC,但是然后你必须清除高速缓存手你每次更新该文件

其他提示

如果你做你的方案编制面向对象的方式,可以使用 自动加载 功能,这将负荷类从他们的来源文件-求你给他们打电话。

编辑:我注意到,有人downvoted两个答复,称自动加载.我们是错误的吗?是的开销__自动加载功能太高使用性能的目的?如果有什么我没有意识到有关这种技术,我是真的很有兴趣知道它是什么。

如果你想获得真的很难核、做一些静态的分析,并找出到底是什么图书馆都需要时,只包括那些。

如果你使用 include 而不 include_once, 然后有一点点的速度节约有作为。

所有这一切说,马特的回答关于Zend优化器是正确的金钱。如果你想尝试高级PHP高速缓冲存储器(APC),这是一个操作码缓,而且免费。它应该是在PECL库。

你可以使用spl_autoload_register()或__自动加载()创造的任何规则你需要包括文件需要的类别,然而自动加载介绍其自己的业绩费用。你会需要确保不论使用的是预先考虑到所有gui页使用php.ini setting或apache配置。

对于您的文件,与通用的职能,我建议你将它们包装在一个实用工具类和做一个简单的发现和替换,以取代你的所有职能()呼吁与率::功能(),这将使你能够自动加载这些职能(同样,没有引入的开销要求的方法,而不是一个全球性的功能)。

基本上最好的事情要做的就是回去过你的代码和支付您设计的债务通过固定包括的问题。这将给予你最高性能,并且它将让你做的最优化喜欢eAccelerator,Zend平台和APC

这里是一样的方法载入动态的东西

public static function loadClass($class)
{
    if (class_exists($class, false) ||
        interface_exists($class, false))
    {
        return;
    }

    $file = YOUR_LIB_ROOT.str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';

    if (file_exists($file))
    {
        include_once $file;
        if (!class_exists($class, false) &&
            !interface_exists($class, false))
        {
            throw new Exception('File '.$file.' was loaded but class '.$class.' was not found');
        }
    }
}

是你想找的是 自动映射PECL扩展.

它基本上允许自动加载只有一个小的开销,载有预算的地图文件。你也可以子鸿沟的地图文件如果你知道一个特定的目录只会拉从某些PHP文件。

你可以读取更多关于它 在这里,.

它已经有一段时间,因为我使用php,但不应该Zend优化或缓存在这种情况下帮助?不php仍然负载和汇编的每一个包括文件,再次对每一请求?

我不确定如果自动加载是答案。如果这些文件都包括在内,他们可能需要在该类包括它,所以他们仍然会被自动加载。

使用一个字节的代码的高速缓冲存储器(理想的情况APC)使PHP不需要分析图书馆的每一页上的负荷。要知道使用自动加载会否定的好处,使用一个字节的代码的高速缓冲存储器(你可以读取更多关于这个 在这里,).

使用 探查.如果你尽量优化而具有的措施,你是盲目的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top