===================================================== 76:シンプルに実装しパフォーマンスを計測して改善しよう ===================================================== コードの処理速度が予想以上に遅いことはよくあることです。 :doc:`../DjangoORMとの付き合い方/60-Django_ORMでどんなSQLが発行されているか気にしよう` では、データ量に比例して遅くなる典型例をいくつか紹介しました。 他にも、特定の2種類のリクエストを同時に受信したときだけ遅くなることもあり、原因を見つけるのがなかなか難しい問題です。 パフォーマンスの問題が発生したとき、闇雲に当たりをつけてコードを書き換えて問題が解決することは、まずありません。 運良く問題が解決できても、次に似たような問題が起きたときに解決できるかどうかは運次第となってしまいます。 .. index:: ボトルネック また、あらかじめ「ボトルネックが発生しないように実装する」のもオススメしません。 ボトルネックが起こる場所を予測するのは難しく、机上では見つけづらいものです。 実装時に局所的な数百ミリ秒の速度改善をしても、その改善が原因で別のボトルネックを産んでしまうことすらあります [#Knuth1974]_ 。 .. [#Knuth1974] 「早すぎる最適化は諸悪の根源である」『文芸的プログラミング』(ドナルド・E.クヌース著、ASCII刊、1994年) ベストプラクティス ======================== シンプルに実装して、速度を計測して、ボトルネックを改善しましょう。 計測した速度が想定範囲内であれば、多少遅くてもそれ以上改善するべきではありません。 他の有意義なことに時間を使いましょう。 速度を改善する必要がある場合、開発環境やより本番に近いデータを持つ検証環境などで実行時の情報を収集し、複数の仮説を立て、可能性を排除していく必要があります。 Webアプリケーションの場合それ自体での処理の他、フロントのWebサーバーとデータベースでの処理のどこに時間がかかっているのかを見極める必要があり、これはログやリソース監視を調査することで切り分けできます。 ボトルネックの見つけ方については、『Webエンジニアが知っておきたいインフラの基本』(馬場 俊彰著、マイナビ刊、2014年12月)で詳しく解説されています。 .. omission::