web-dev-qa-db-ja.com

スピードとスケーラビリティのためのコハナベースのウェブサイトの最適化

私がコハナで構築したサイトは昨日膨大な量のトラフィックで非難されたため、一歩下がってデザインの一部を評価させられました。コハナベースのアプリケーションを最適化するためのいくつかの標準的なテクニックは何ですか?

ベンチマークにも興味があります。すべてのページの実行時間を確認するために、コントローラーメソッドごとにBenchmark::start()Benchmark::stop()をセットアップする必要がありますか、それともグローバルかつ迅速にベンチマークを適用できますか?

今後、キャッシュライブラリを使用する予定ですが、現時点では気づいていないことができることがたくさんあるので、より多くの提案を受け入れることができます。

80
Sampson

XDebugWinCacheGrind または WebCacheGrind を使用して、遅いコード実行のプロファイルを作成して分析します。

WebCacheGrind
(ソース: jokke.dk
WinCacheGrind

6
Alix Axel

コハナは、データベースオブジェクトを使用する場合を除いて、非常に高速です。 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;
}

これにより、パフォーマンスも劇的に向上します。上記の2つの手法により、サイトのパフォーマンスが80%向上しました。

ボトルネックがどこにあると思われるかについて、もう少し情報を提供していただければ、より良いアイデアを提供できると確信しています。

その他のパフォーマンスのヒントについては、yslow(google it)も確認してください。

5
ae.

XDebug を使用したプロファイルコード。

大量のキャッシュを使用します。ページが比較的静的な場合は、リバースプロキシが最適な方法である可能性があります。

5
Kornel

コハナに厳密に関連している(おそらくすでにこれを行っているかどうか):

プロダクションモード:

  1. 内部キャッシュを有効にします(これは、Kohana :: find_fileの結果のみをキャッシュしますが、これは実際には非常に役立ちます。
  2. プロファイラーを無効にする

ちょうど私の2セント:)

1
Tamás Pap

XDebugとキャッシングの回答に完全に同意します。最大の速度とスケールのボトルネックを特定するまで、最適化のためにコハナレイヤーを調べないでください。

XDebugは、ほとんどの時間を費やしたことを通知し、コード内の「ホットスポット」を識別します。このプロファイリング情報を保存して、パフォーマンスの改善のベースラインと測定を行えるようにします。

問題と解決策の例:毎回データベースから高価なオブジェクトを構築しているのに、それほど頻繁に変化しない場合は、memcachedまたは別のメカニズムを使用してそれらをキャッシュすることを検討できます。これらのパフォーマンス修正はすべて時間がかかり、システムが複雑になるため、修正を始める前にボトルネックを確認してください。

0
Ozten