さて、最適化やプロファイリングなどにどのようなツールを使用できるかを理解しています...これで、すべてのボトルネックがわかりました。しかし、それらを無限に最適化することはできません。私が意味したのは ?たとえば、スポット A が主なボトルネックで、最適化を適用した後、CPU 時間、メモリ時間などが小さくなりましたが、プロジェクト全体に関してはまだボトルネックです。つまり、どのプロジェクトでも常にボトルネックがあるということです。最適化を停止する必要がある最終ポイントはどこですか?
3 に答える
コードの特定の部分がボトルネックの原因となっている場合、おそらく最善の方法は、一歩下がって全体像、つまり全体的な設計を確認することです。修正不可能なボトルネックを解消する最善の方法は、デザインパターンを再考することである場合があります。
ここにいくつかの良い情報源があります
修正すると、30%の時間を節約できる「ボトルネック」を見つけたとします。たとえば、時間は10秒から7秒になります。
次に、それを修正すると、7の30%、つまり2.1を節約する別のものを見つけたとします。これにより、時間が4.9秒に短縮されます。
いくつかのことに注意してください。
2番目の問題は元の10の21%にすぎなかったため、元々はそれほど大きな問題ではありませんでしたが、最初の問題を修正した後、2番目の問題はパーセントで大きくなりました。
スピードアップ率として見てください。最初の問題を修正すると、10/7または1.43xのスピードアップ率が得られました。2番目のものを修正すると、7/4.9または1.43xの比率が得られました。合計スピードアップ率は10/7x7 / 4.9で、これは10/4.9または2.04xに相当します。プログラムの速度が2倍以上になりました。
これらの2つの問題は、元の10の30%と21%を占めました。さらに2つあり、14.7%と10.3%を使用すると、プロファイルではかなり小さく見えます。しかし、4つすべてを修正すると、プログラムの速度が4倍になります。それらのいずれかを見逃しても、見逃すことはありません。
それがどうなるかです。あなたが本当に底を打つまで、あなたはいつでもプログラムをより速くすることができます、そして最初は取るに足らないように思われるかもしれない問題は後で価値があります。あなたが得る最終的なスピードアップ率はあなたを驚かせることができます。
すべてのプロファイラーがすべての問題を見つけるわけではありません。問題の1つがプロファイラーが見つけられない問題である場合、可能な限り最適化したと思うところまで到達しますが、そうではありません。
その時点を超えて進歩したい場合は、すべての問題を見つけるプロファイリング技術が必要です。 これが私のやり方です。
私の見解では、それは要件に依存します。ユーザーがページの読み込みを数秒待っていれば問題ありません。ただし、ユーザーがチャット中に数秒間待機している場合は、最適化が必要でした。Googleにログインすると5秒以上(長い)かかりますが、その後は速いです。しかし、チャット中に同じ時間がかかる場合は、他のメール ID を優先します。一般的に、mysql、web サービス、ループなどで最適化が必要です。google 画像で検索するときのように画像がたくさんある場合は、時間がかかります。ユーザーはそれを待つことができます。ページに移動し、ページを読み込んでいるときに自分が何を感じているかを確認してください。長いですか?長い場合は、最適化が必要です。