ホームページ  >  記事  >  php教程  >  時期尚早な最適化は諸悪の根源です。最適化の 7 つの原則を詳しく見てみましょう。

時期尚早な最適化は諸悪の根源です。最適化の 7 つの原則を詳しく見てみましょう。

WBOY
WBOYオリジナル
2016-06-21 08:50:411203ブラウズ

コードの最適化には多くの利点がありますが、すべてのコードを最適化する必要があるという意味ではありません。場合によっては、過剰な最適化は時間がかかり、手間がかかり、報われない結果になる可能性があります。

「現代のコンピューターサイエンスの創始者」ドナルド・クヌースは、かつて「時期尚早の最適化が諸悪の根源である」と述べました。その理由は次のとおりです。 高速なプログラムを正確に作成するよりも、より高速に正しいプログラムを作成する方がはるかに簡単です。

プロジェクト開発では、改善によって価値を追加するのではなく、改善の必要のないコードの改善に貴重な時間を浪費するプログラマーが常に存在します。プロジェクトを最適化する場合、何を最適化する必要があるのか​​、どのように最適化する必要があるのか​​、最適化してはいけないものは何なのか?まず、この記事で説明されている 7 つのことを理解する必要があります。





1. 具体的に何を最適化する必要がありますか?

最適化作業の開始時に、最適化の内容や目的が明確に定義されていないと、誤解に陥りやすくなります。最初は、達成したい結果と、その他の最適化関連のさまざまな問題を明確に理解する必要があります。これらの目標は明確に記述する必要があり (少なくとも技術に精通したプロジェクト マネージャーはそれを理解し、表現できます)、最適化プロセス全体を通じてこれらの目標を堅持する必要があります。

実際のプロジェクト開発では、さまざまな変数が存在することがよくあります。最初はこの側面を最適化することから始めても、後で別の側面を最適化する必要があることが判明する場合があります。この場合、変更を明確に理解し、目標が変更されたことをチーム全員に理解させる必要があります。

2. 正しい最適化インジケーターを選択します

適切なメトリクスを選択することは最適化の重要な部分であり、これらのメトリクスを使用して最適化作業の進行状況を測定する必要があります。インジケーターの選択が不適切だったり、単に間違っていたりすると、努力が無駄になる可能性があります。

たとえ指標が正しいとしても、ある程度の識別力が必要です。場合によっては、実行に最も時間がかかるコード部分に最大限の労力を注ぐことが現実的な戦略となります。ただし、Unix/Linux カーネルはほとんどの時間を空のループで費やすことも忘れないでください。

安易に達成しやすい指標を選択しても、問題の本当の解決にはならないため、あまり役に立たないことに注意してください。目標に近い、より複雑な指標を選択する必要があります。

3. エッジの最適化

これが効果的な最適化の鍵です。プロジェクト内で目標と矛盾する領域 (パフォーマンス、リソース、その他) を見つけて、そこに労力と時間を費やします。

典型的な例を挙げると、Web プロジェクトは比較的遅いです。最適化する際、開発者はデータベースの最適化にほとんどのエネルギーを集中しましたが、最終的に本当の問題はネットワーク接続の遅さにあることがわかりました。

また、簡単に実現できる成果に気を取られないようにしてください。これらの質問は簡単に修正できますが、必要ではない場合や、目標と一致しない場合があります。最適化が簡単だからといって、努力する価値があるとは限りません。

4. 最適化レベルが高いほど良い

一般に、最適化のレベルが高くなるほど、効果も高くなります。この基準によれば、最良の最適化は、より効率的なアルゴリズムを見つけることです。

たとえば、ソフトウェア開発プロジェクトで、重要なアプリケーションのパフォーマンスが低いため、開発チームは最適化を開始しましたが、その後、プロジェクトのスタッフが変わり、新しい開発者がコードをチェックしました。パフォーマンスの問題の核心は、テーブルでのバブル ソート アルゴリズムの使用にあり、その結果、数千の項目が増加したことが判明しました。

それでも、高レベルの最適化は「特効薬」ではありません。すべてをループの外に移動するなど、いくつかの基本的なテクニックでも、最適化効果を生み出すことができます。多くの場合、多数の低レベルの最適化によって、1 つの高レベルの最適化と同じ効果が得られます。

また、高レベルの最適化により一部のコード ブロックが削減されるため、これらのコード ブロックに対して以前に行った最適化は意味がなくなるため、最初から高レベルの最適化を検討する必要があることにも注意してください。

5. 時期尚早に最適化しないでください

プロジェクトの初期段階で最適化を行うと、コードが読みにくくなったり、パフォーマンスに影響を与えたりする可能性があります。一方で、プロジェクトの後半になると、以前に行った最適化が何の効果もなく、時間とエネルギーを無駄にしていたことに気づくかもしれません。

正しい方法は、プロジェクトの開発と最適化を 2 つの独立したステップとして扱うことです。

6. 直感ではなくパフォーマンス分析に頼る

最適化が必要な場所はすでにわかっていると思いがちですが、特に複雑なソフトウェア システムでは、パフォーマンス分析データが最初に来て、直感が最後に来る必要があるため、これは望ましくありません。

最適化の効果的な戦略は、最適化効果への影響に応じて作業をランク付けすることです。作業を開始する前に、最も大きな影響を与える「障害」を見つけてから、より小さな「障害」に対処します。

7. 最適化は万能薬ではありません

最適化の最も重要なルールの 1 つは、同時にすべてを最適化することはできず、2 つの問題を同時に最適化することはできないということです。たとえば、速度を最適化するとリソースの使用率が増加する可能性があり、ストレージの使用率を最適化すると他の場所の速度が低下する可能性があります。どちらが最適化目標に沿っているかを比較検討する必要があります。

英語原文:Code Optimization as a DoubleEdged Sword



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。