优化基于Kohana的网站以提高速度和可扩展性

时间:2009-08-11 12:48:09

标签: php optimization performance scalability kohana

我与Kohana建立的网站昨天遭到了巨大的流量冲击,导致我退后一步并评估一些设计。我很好奇什么是优化基于Kohana的应用程序的标准技术?

我也对基准测试感兴趣。我是否需要为每个控制器方法设置Benchmark::start()Benchmark::stop()以查看所有页面的执行时间,或者我是否能够全局且快速地应用基准测试?

我将在未来的时间内更多地使用Cache-library,但我愿意接受更多建议,因为我确信我能做很多事情,我现在根本不知道。

6 个答案:

答案 0 :(得分:211)

答案 1 :(得分:6)

使用XDebugWinCacheGrindWebCacheGrind来分析和分析代码执行速度慢。

WebCacheGrind
(来源:jokke.dk
WinCacheGrind

答案 2 :(得分:5)

使用XDebug的个人资料代码。

使用大量缓存。如果您的页面是相对静态的,那么反向代理可能是最好的方法。

答案 3 :(得分:5)

除了使用数据库对象外,Kohana开箱即用非常快。引用Zombor“您可以通过确保使用数据库结果对象而不是结果数组来减少内存使用量。”这使得HUGEE在被抨击的网站上的性能差异。它不仅使用更多内存,还会减慢脚本的执行速度。

此外 - 您必须使用缓存。我更喜欢memcache并在我的模型中使用它:

public function get($e_id)
{
    $event_data = $this->cache->get('event_get_'.$e_id.Kohana::config('config.site_domain'));

    if ($event_data === NULL)
    {
        $this->db_slave
            ->select('e_id,e_name')
            ->from('Events')
            ->where('e_id', $e_id);

        $result = $this->db_slave->get();
        $event_data = ($result->count() ==1)? $result->current() : FALSE;

        $this->cache->set('event_get_'.$e_id.Kohana::config('config.site_domain'), $event_data, NULL, 300); // 5 minutes
    }

    return $event_data;
}

这也将大大提高性能。上述两种技术将网站性能提高了80%。

如果你提供了一些关于你认为瓶颈在哪里的更多信息,我相信我们可以给出一些更好的想法。

另请查看yslow(google it)以获取其他一些性能提示。

答案 4 :(得分:1)

与Kohana严格相关(你可能已经这样做了,或者没有):

在生产模式中:

  1. 启用内部缓存(这只会缓存Kohana :: find_file结果,但这实际上可以提供很多帮助。
  2. 禁用探查器
  3. 我的2美分:)

答案 5 :(得分:0)

我完全赞同XDebug和缓存答案。在确定最大的速度和规模瓶颈之前,不要深入了解Kohana层进行优化。

XDebug将告诉您,您是否花费了大部分时间并在代码中识别“热点”。保留此分析信息,以便您可以基准和衡量性能改进。

示例问题和解决方案: 如果您发现每次都在从数据库中构建昂贵的对象,而这些对象并不经常更改,那么您可以使用memcached或其他机制来查看它们。所有这些性能修复都需要花费时间并增加系统的复杂性,因此在开始修复之前一定要确定瓶颈。