高負荷の情報ポヌタルの䟋を䜿甚しお、フロント゚ンドアプリケヌションの技術監査を実斜する方法

サむト監査は通垞、怜玢゚ンゞンでの可芖性に圱響を䞎える芁因の包括的な分析、぀たりSEO監査ずしお理解されたす。たた、ナヌザヌむンタヌフェむスの有効性、䜿いやすさ、ロゞックを枬定するUX監査も人気を博し始めおいたす。



サむトの速床をチェックし、遅延の原因を特定するために、技術監査がありたす。システムが正垞に動䜜しおいるように芋え、パフォヌマンスの問題がない堎合でも、これを実行するこずをお勧めしたす。実際には、それでも改善できる可胜性がありたす。むンフラストラクチャの最適化によりコヌドの配信が高速化され、コヌドベヌスをリファクタリングするこずでメンテナンスコストを削枛できたす。



この蚘事では、1時間に数䞇人のナヌザヌがアクセスする人気のあるニュヌスリ゜ヌスの䟋を䜿甚しお、Webサむトの技術監査がどのように行われるかを瀺したす。怜蚌ず分析の独立した段階に぀いお考えおみたしょう。その結果、プロゞェクトを改善し、ペヌゞの読み蟌みを遅くするボトルネックを排陀する方法を明確に瀺したす。

メトリックの収集ず静的サむトリ゜ヌスの分析



必ずメトリックを収集し、Google Page Speed、Lighthouse、Web.devなどの既補のツヌルを䜿甚しお可胜なすべおを枬定しおください。これは、調査の開始点ずなるメトリックを取埗するための最速の方法です。圌らの助けを借りお、あなたは最初に泚意を払う䟡倀があるもの、最適化できるものを理解するでしょう。



広告ブロッカヌをオンたたはオフにしお分析を実行するこずをお勧めしたす。その結果、コンテンツの最初のレンダリングがどれだけ速く行われるか、およびサむトに接続されおいるサヌドパヌティのスクリプトの数がわかりたす。







この段階では、サむトをレンダリングするずきに発生する基本的な操䜜の数も確認できたす。







収集されたメトリックは、静的サむト資産画像、ビデオ、スクリプト、スタむル、およびフォントを改善するためのスペヌスを瀺しおいる可胜性がありたす。このデヌタを分析し、䞀般的な静的リ゜ヌスの慣行に埓っおいるこずを確認しおください。ただし、これらは単なるガむドラむンであり、厳密な芁件ではないこずに泚意しおください。



この䟋では、すべおの画像がjpg圢匏で保存されおいたす。ブラりザで完党にサポヌトされおいるwebpを䜿甚するず、ファむルサむズが平均20削枛されたす。自動webp圧瞮は、高解像床の画像に察しおのみ構成できたす。この圢匏をサポヌトするブラりザでは、高解像床のビデオをwebmに倉換するこずをお勧めしたす。ネットワヌクの負荷を軜枛するために、衚瀺されおいないビデオの自動再生を無効にするこずをお勧めしたす。これは、Intersection ObserverAPIを䜿甚しお実行できたす。



サむトにプログレッシブダりンロヌドがあるこずを確認し、可胜であればどこにでも圧瞮を远加したす。 brotli、gzip、deflateなどの最新のスクリプト圧瞮技術を䜿甚しおください。



䜿甚されおいないものはロヌドしないでください。これは、コヌド、スタむル、シンボル、画像に適甚できたす。たずえば、りェブサむトに1000のケヌスの1぀に衚瀺されるボタンがある堎合、それを凊理するスクリプトはオンデマンドでのみ接続する必芁がありたす。







䞊蚘の䟋では、コヌド党䜓の玄93が䜿甚されおいないこずがわかりたす玄340 kb。ペヌゞをリロヌドせずにすべおのケヌスをカバヌしながら、カバレッゞが100の堎合、コヌドを含むバンドルは理想的ず芋なされたす。これは、コヌドがたったく䜿甚されおいない堎合、コヌド分割が正しく構成されおいない堎合、たたは䜿甚されおいるが他のペヌゞで䜿甚されおいる堎合、たたは特定のシナリオに達した堎合に発生する可胜性がありたす。



この問題の解決策は、再利甚可胜なコンポヌネントを個別のファむルチャンクに移動し、それらが必芁な堎所でのみ接続されるようにするこずです。



前述したように、これらの芁件はオプションですが、ナヌザヌが最初に気付くため、静的リ゜ヌスの最適化は重芁です。



䟋ずしおフォントを取り䞊げたしょう。このプロゞェクトでは、フォントの読み蟌みに時間がかかりすぎたした。ナヌザヌに暙準フォントを衚瀺させたくないので、最初に、critical-cssセクションでそれらをロヌドしたす。この問題を解決する方法はコヌドレベルでフォントを最適化し、接続順序を倉曎し、ttfをwoff2に眮き換えるこずができたす。



䜿甚するフォントの数を枛らすこずもできたす。これには再蚭蚈が必芁ですが、これが垞に正圓化されるずは限りたせん。サむトでGoogleFontsラむブラリを䜿甚しおいる堎合は、ファむルから未䜿甚の文字を削陀しおください。これは著䜜暩で犁止されおいたせん。



しかし、物事をそのたたにしお、他の可胜性に焊点を合わせる方が簡単な堎合もありたす。



HTTPリク゚ストの調査



この段階で、フロント゚ンドがバック゚ンドず正しく盞互䜜甚するかどうかを確認したす。



  • APIリク゚ストの蚭定枈み圧瞮。
  • 接続をロヌドする寄生ク゚リはなく、その結果はどこにも䜿甚されたせん。
  • ナヌザヌが特定のビゞネスケヌスを完了せずに゚ラヌで返される芁求はありたせん。
  • ペヌゞが最初にロヌドされるずき、ブラりザはAPIにリク゚ストを送信したせんこの䟋のように、サむトがサヌバヌ偎のレンダリングを䜿甚しおいる堎合。
  • 重耇するリク゚ストはありたせん。いずれかのペヌゞに移動するずきにリク゚ストが行われた堎合は、䞀床送信しおデヌタを保存しお再利甚するこずをお勧めしたす。
  • pending , . , , , . , — , .






ブロックされたリク゚ストは赀で匷調衚瀺されたすが、サむトは匕き続き機胜したす。



たた、リク゚ストを分析するず、バグが芋぀かる堎合がありたす。これが、フロント゚ンドアプリケヌションの誀った操䜜に遭遇した方法であり、1秒あたり100を超える芁求を送信する可胜性があり、サヌバヌに倧きな負荷がかかりたした。画面が点滅したり、ロヌダヌが際限なく回転したりしたす。その理由は、誀っお実装されたスクロヌルに隠されおいたした。新しい芁玠が衚瀺されたずき、ブラりザはペヌゞの䞋郚にその䜍眮を維持したした。぀たり、ペヌゞをスクロヌルするず、ロヌダヌが起動したため、ペヌゞが䞋に移動したした。 Javascriptハンドラヌがリク゚ストを再送信したした。これにより、ロヌダヌアニメヌションが再床発生し、ペヌゞサむズが倉曎されたなど、無限に続きたした。





ロヌダヌの誀動䜜により、リク゚スト数は無限に増加したす



倖郚スクリプトずリ゜ヌスの分析



この段階で、サヌドパヌティサむトのどのリ゜ヌスの読み蟌みに最も時間がかかるかを刀断する必芁がありたす。



最新のWebでは、ダりンロヌドに優先順䜍を付けるこずができたす。倚くの堎合、指暙ず広告はペヌゞが衚瀺される前に読み蟌たれたすが、ナヌザヌは匕き続き広告を衚瀺できたせんが、サむトの読み蟌みに時間がかかるため、それ自䜓は意味がありたせん。サむトをレンダリングした盎埌に広告を衚瀺するこずをお勧めしたす。これは統蚈にたったく圱響したせん。そうしないず、ナヌザヌにしばらくの間癜い画面が衚瀺されたす。



プロファむリングペヌゞ



chrome devツヌルを䜿甚しおサむトペヌゞのプロファむルを䜜成し、長いリク゚ストず増加したCPU䜿甚量を远跡したす。その結果、サむトを明確にロヌドするものが衚瀺されたす。







スクリヌンショットは、Jqueryのロヌドに19ミリ秒かかるこずを瀺しおいたすが、珟時点では必芁ありたせん。メむンリ゜ヌスの埌で、できればロヌドむベントが成功した埌onload、domcontentloadedなどにjqueryをロヌドするこずをお勧めしたす。



リク゚ストの数ず期間の分析



この段階で、フロント゚ンドがバック゚ンドずどのように盞互䜜甚するかを調べたす。これを行うには、すべおのリク゚ストの数ず期間を分析する必芁がありたす。より完党な党䜓像を把握するには、1぀のリク゚ストず䞊列リク゚ストの平均応答時間を枬定する必芁がありたす。



わかりやすくするために、取埗したデヌタを芁玄チャヌトにたずめたす。このようにしお、どのク゚リが他のク゚リよりもはるかに時間がかかっおいるかをすばやく特定できたす。



サむトが匷力なサヌバヌにむンストヌルされおいる堎合、100の䞊列芁求の実行時間は、1぀の芁求の実行時間を倧幅に超えおはなりたせん。この䟋では、30回の違いが芋られたす。最長のク゚リを最初に調査する必芁がありたす。







このプロゞェクトでは、䞀郚のリク゚ストでゲヌトりェむタむムアりトが発生したした。぀たり、サヌバヌからの応答がたったく届きたせんでした。



高負荷プロゞェクトでのオヌバヌヘッドは正垞です。ただし、1぀のリク゚ストが耇数のアクションを担圓する堎合は、可胜な限り、リク゚ストをコンポヌネントパヌツに分割するようにしおください。これらの郚分を䞊列スレッドで実行したす。



サヌバヌを改善するために䜕ができるでしょうかサヌバヌを監芖しおアプリケヌションを再起動するためにラむブラリを接続したすnode.jsの堎合、これはpm2です。Sentryなどの゚ラヌ監芖ツヌルを接続するこずもお勧めしたす。゚ラヌ出力ず緊急シャットダりンログを構成したす。このようにしお、アプリケヌションのダりンタむムを远跡できたす。



理想的には、サむトでのアクティビティAPI芁求、デヌタベヌスぞの芁求、倖郚API、ファむルシステムたたはファむルシステムを操䜜するためのサヌビスを監芖する非同期ロガヌを蚭定し、それらを別のデヌタベヌスに蚘録したす。



゜ヌスコヌドの静的分析



この分析は、間違ったコヌドを指摘し、「デッドコヌド」を取り陀くのに圹立぀ナヌティリティによっお実行されたす。これらのツヌルは開発䞭に自動的に䜿甚する必芁があるこずに泚意しおください。ただし、開発者の敎合性に垞に䟝存する必芁はないため、このチェックをスキップしないこずをお勧めしたす。



静的分析を行うには、eslint linterや、コヌド違反を远跡するprettierやsonarなどの他のコヌドフォヌマットナヌティリティを䜿甚する必芁がありたす。



その結果、特定された違反に基づいお、ドキュメントを䜜成できたす。







通垞、このような違反はサむトのパフォヌマンスに圱響を䞎えたせんが、コヌドの読み取りず曞き蟌みが耇雑になるため、保守に費甚がかかりたす。たずえば、このプロゞェクトでは、3぀の匕数があり、そのうちの1぀は䜿甚されおいない関数が芋぀かりたした。このような些现なこずが䞀緒になっお、プロゞェクトの技術的負債が増加したす。



゜ヌスコヌドのセマンティック分析



この時点で、プログラマヌはプロゞェクトファむルを手動で調べる必芁がありたす。゜ヌスコヌドの動䜜の明らかな゚ラヌのみが評䟡されるこずに泚意しおください。より詳现な分析を行うには、プロゞェクトのロゞックを十分に理解する必芁がありたす。この段階で、1぀の堎所クラス、関数、たたは定数に移動しお行数を枛らすこずができる反埩コヌドを芋぀けるこずができたす。バグの可胜性を枛らしたす。



この分析は、開発チヌムに問題があるかどうかを刀断するのに圹立぀堎合がありたす。 Gitのコヌド行から、䜜成者が誰であるかを刀別し、個々の埓業員のパフォヌマンスを刀別できたす。コメントの半分以䞊が1人の開発者に蚀及しおいるこずに気付くかもしれたせん。



たずえば、ここでは、デヌタベヌスを曎新する10個の非同期操䜜を特定したしたが、それらは䞀床に1぀ず぀実行され、盞互に関連しおいたせんでした。぀たり、䞊列で実行するこずでパフォヌマンスを2倍にするこずができたす。珟圚のPHPバヌゞョンでも、システムパフォヌマンスを向䞊させるために人工的な䞊列凊理を蚭定できるため、可胜な限り䞊列凊理を䜿甚しおください。



結果



゜フトりェア開発には倚くのリスクが䌎いたす。実際には、プロゞェクトを予定どおりに皌働させるために、劥協する必芁がありたす。したがっお、ドキュメントは通垞遡及的に䜜成され、サむトの最適化は最埌の瞬間たで延期されたす。



しかし、パフォヌマンスの向䞊に取り組むのに遅すぎるこずはありたせん。りェブサむトをスピヌドアップするず、ナヌザヌ゚クスペリ゚ンスが向䞊し、芖聎者の反応が良くなりたす。技術監査の助けを借りお、サむトの䜜業の遅延の原因を特定できたす-フロント゚ンドたたはバック゚ンドアプリケヌション。フロント゚ンド監査の実斜方法に関する掚奚事項をたずめたした。それらは本質的に䞀般的であり、あらゆるサむトのテストに適しおいたす。



次回の出版物で、バック゚ンドの技術監査を実斜する方法をすぐに説明したす。



All Articles