最適化したくない世界でコードを最適化する

公開: 2019-11-22

時期尚早の最適化はすべての悪の根源です。

これは開発者の間で一般的なことわざです。 それは理にかなっている。 時期尚早に最適化することは、作業をやり直すことを意味する可能性があり、時間は開発者の最も有限のリソースです。 これは、製品のユーザーにとってまだ存在していないシナリオの最適化に貴重な時間を費やすことを意味する場合があります。 これは、パフォーマンスが不明確になり、理解しにくいコードを書くことを意味する場合があります。

約1年前にWordPressテーマレビューチームに参加しているときに、私はそのアドバイスの塊にもう一度出くわしました。 時期尚早の最適化はすべての悪の根源です。 返信は、テーマをロードするために必要なスクリプトの数と重みを減らしたいと考えていたテーマ作成者への返信でした。 一方では、テーマの作成者は、依存関係のない1.29 kbのスクリプトをロードして、作業を完了することができます。 もう1つのオプションは、コアWordPressに含まれているjQuery依存のスクリプトを合計105 kbで使用することでした。これは、「ほとんどの」WordPressサイトがとにかくjQueryを読み込んでいるためです。

私にとって、答えは簡単でした。 コアスクリプトがフロントエンドにすでにロードされていない限り、小さいスクリプトを使用してください。 時期尚早の最適化という観点からは考えていませんでした。 私はそれを、昔ながらの、ありふれた、日常の最適化だと思っていました。

開発者は、時期尚早の最適化を、プロセスの早い段階でスマートな設計上の決定を行うという概念と混同しないでください。 また、開発の最終段階で最適化を開始するまで待つ必要もありません。最適化は、製品をエンドユーザーに提供することに重点が置かれている時期です。 これは、製品設計プロセスが不十分であることを示しています。

過去1年間、その会話は私にとどまりました。 これは、WordPress開発者コミュニティだけでなく、一般的なWeb開発においても、恐ろしい傾向をよりよく認識するのに役立ちました。 あまりにも頻繁に、開発者は通常のユーザーから遠く離れており、それらのユーザーがその最適化に依存しているテクノロジーは、後から考えたものにすぎません。 代わりに、それは常に開発者の心の最前線にあるべきです。

この誤用された見積もりへの過度の依存は、ページの重みをキロバイトではなくメガバイトで測定する傾向を後押しするのに役立ちました。 これは、本番環境でのファイル圧縮とキャッシュで補いながら、開発フェーズで最適化を行わないための包括的な正当化として頻繁に使用されます。

質の高いコードを書くことの一部は、開発プロセスのすべての段階でそのコードを最適化することです。 それは、ソフトウェアが一緒になるときに不要なものを削減するという難しい決断をすることです。 キャッシングは、他のすべてがクリーンアップされた後の最後の手段である必要があります。

時期尚早の最適化とは、明確な利益がない場合に最適化を試みること、またはソフトウェアの設計をほとんどまたはまったく利益を得ないように変更するマイクロ最適化に取り組むことです。 これは、開発中に明らかなパフォーマンスの向上を見落とすことを意味するものではありません。

誰もがギガビットインターネットを利用しているわけではありません

私が知っているほとんどの開発者は超高速インターネット接続を使用しており、多くの場合、ダウンロード速度は1 Gbpsで、データは無制限です。 そのような状況では、世界の大部分がまだデータキャップとの接続が遅いことを忘れがちです。

何百万人もの人々が2G携帯電話技術を使用している第三世界の国々との遅い接続を関連付ける人さえいるかもしれません。 ただし、米国やその他の先進国には、直接ケーブルやDSL回線がない大規模な帯があり、これらは都市や郊外で一般的に利用できます。

この切断は、他の開発者が私とチャットを開始したときに直接明らかになります。 過去数年間で、彼らがビデオチャットを要求することがますます一般的になっています。 そのようなことが可能かどうかさえ疑問視されていません(ビデオチャットは私にとってせいぜい信頼できません)。 いつでもビデオチャットできるのは当然のことです。

私が住んでいる地域には、衛星またはダイヤルアップの2つのインターネットサービスオプションがあります。 地元の電話会社でさえ、数十年前の電話回線のインフラストラクチャコストのために、この分野でのDSLの提供を拒否しています。 通常はデータ制限が伴う衛星インターネットアクセスの法外なコストのために、多くはダイヤルアップで立ち往生しています。 携帯電話会社は、サービスが信頼できると仮定して、ある程度ゲームを変えていますが、そのルートを進むことには、データやホットスポットの制限を含む可能性のある欠点があります。

そのような技術的に進歩した国にとって、その人々の多くは、他の人々が10年前にいた場所にほとんど追いついていない。

私は幸運にも住んでいる場所を選ぶことができ、引っ越しを妨げるものは何もありませんが、ほとんどの人にはその選択肢がありません。 彼らは彼らが買うことができる最高のもので立ち往生しています。 地方でさえ、インターネットは日常生活の避けられない部分であり、開発者はこれらの人々のためにそれを容易にしていません。

これは逸話的ですが、それは米国のポケットの中での田舎の生活の厳しい現実です。

アラバマの奥地に住むことの利点は、開発者としての私の見方が変わったことです。 それは、私が構築したすべてのプラグインとテーマのすべてのコード決定に疑問を呈する必要があることを意味しました。 データキャップを使用する場合、リソースを使いすぎないようにする必要がありました。

何よりも、データキャップがあると、インターネットの使い方が変わりました。 今、広告ブロッカーを実行しています。 自動読み込みから動画を強制終了する拡張機能があります。 使用する必要のある重いサイトでJavaScriptを無効にします。 いくつかのサイトは面白そうに見えますが、それらはリソースを大量に消費しているため、私はそれらに戻ることはありません。

すべてのバイトが重要な場所に住んでいるときは、それらを無駄にしない傾向があります。

常に成功するとは限りませんが、小さな町の生活に移行して以来、非常に高速なインターネットアクセスを利用できる特権を持たない人々にサービスを提供する方法でアプリケーションを構築しようと試みました。

これを指摘することは、開発者が最適化が重要であることを認識していることを確認することです。 これは、開発プロセスのすべての段階で重要です。 接続が遅く、データの上限があるこれらの人々は、製品を購入し、サービスを使用し、コンテンツを読み、そして人々がWeb上で行う他のすべてのことを行う必要があるため重要です。

そのスライダー、モバイル用のスワイプメカニズム、またはその他の洗練されたガジェットを追加することを考えている開発者の場合は、その機能が読み込まれるのを待たなければならない人のことを考えてください。 その依存関係があまりにも多くの余分なリソースをロードしていないことを確認してください。 より軽量な実装を見つけることができるかどうかを確認するために、いくつかの調査を行ってください。 しかし、最初に、それが必要かどうかを自問してください。

WordPress開発者が構築するテーマとプラグインは、Webサイトのボトルネックになることはありません。 私たちはもっとうまくやることができます。