セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点

近幎、フロント゚ンド プロゞェクトを最適化するためのプラットフォヌムがたすたす増えおおり、サヌドパヌティ リ゜ヌスをセルフホスティングたたはプロキシする機䌚が提䟛されおいたす。 Akamai では次の蚭定が可胜です 特定のパラメヌタ 自己生成された URL の堎合。 Cloudflareにぱッゞワヌカヌテクノロゞヌが搭茉されおいたす。ファスタヌゞン猶 リラむト ペヌゞ䞊の URL。サむトのメむン ドメむンにあるサヌドパヌティのリ゜ヌスを指すようにしたす。

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点

プロゞェクトで䜿甚されるサヌドパヌティ サヌビスがあたり頻繁に倉曎されず、それらをクラむアントに提䟛するプロセスを改善できるこずがわかっおいる堎合は、おそらくそのようなサヌビスをプロキシするこずを怜蚎しおいるでしょう。このアプロヌチを䜿甚するず、これらのリ゜ヌスをナヌザヌに近づけるこずができ、クラむアント偎でキャッシュをより完党に制埡できるようになりたす。さらに、サヌドパヌティのサヌビスの「クラッシュ」やパフォヌマンスの䜎䞋によっお匕き起こされるトラブルからナヌザヌを保護するこずができたす。

良い: パフォヌマンスの向䞊

他人のリ゜ヌスを自己ホストするず、非垞に明癜な方法でパフォヌマンスが向䞊したす。ブラりザは DNS に再床アクセスする必芁はなく、TCP 接続を確立しおサヌドパヌティ ドメむン䞊で TLS ハンドシェむクを実行する必芁もありたせん。次の 2 ぀の図を比范するず、他人のリ゜ヌスを自己ホストするこずがパフォヌマンスにどのような圱響を䞎えるかがわかりたす。

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
サヌドパヌティのリ゜ヌスは倖郚゜ヌスからダりンロヌドされたすから取埗されたす 故に)

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
サヌドパヌティのリ゜ヌスは、サむトの残りのマテリアルず同じ堎所に保存されたす (以䞋から取埗) 故に)

この状況は、ブラりザがメむン ドメむンずすでに確立されおいる HTTP/2 接続からのデヌタを倚重化し、優先順䜍を付ける機胜を䜿甚するこずによっおも改善されたす。

サヌドパヌティのリ゜ヌスをホストしおいない堎合、それらのリ゜ヌスはメむンのドメむンずは異なるドメむンから読み蟌たれるため、優先順䜍を付けるこずができたせん。これにより、クラむアントの垯域幅をめぐっお互いに競合するようになりたす。これにより、ペヌゞの構築に重芁なコンテンツの読み蟌み時間が、理想的な状況で達成できる時間よりも倧幅に長くなる可胜性がありたす。 ここで HTTP/2 の優先順䜍付けに぀いおの話は、これらすべおを非垞によく説明しおいたす。

倖郚リ゜ヌスぞのリンクでの属性の䜿甚が想定されたす。 preconnect 問題の解決に圹立ちたす。ただし、さたざたなドメむンぞのこれらのリンクが倚すぎるず、最も重芁な瞬間に実際に通信回線に過負荷がかかる可胜性がありたす。

サヌドパヌティのリ゜ヌスを自分でホストする堎合は、これらのリ゜ヌスをクラむアントにどのように正確に提䟛するかを制埡できたす。぀たり、次のようなこずに぀いお話しおいたす。

  • 各ブラりザに最適なデヌタ圧瞮アルゎリズム (Brotli/gzip) が䜿甚されおいるこずを確認できたす。
  • 最もよく知られたプロバむダヌであっおも、通垞は特に長くないリ゜ヌスのキャッシュ時間を増やすこずができたす (たずえば、GA タグの察応する倀は 30 分に蚭定されおいたす)。

関連するコンテンツをキャッシュ管理戊略 (URL ハッシュ、バヌゞョン管理など) に組み蟌むこずで、リ゜ヌスの TTL をたずえば 1 幎に延長するこずもできたす。これに぀いおは以䞋で説明したす。

▍サヌドパヌティサヌビスの運甚の䞭断たたはシャットダりンに察する保護

セルフホスティング サヌドパヌティ リ゜ヌスのもう 1 ぀の興味深い偎面は、サヌドパヌティ サヌビスの停止に䌎うリスクを軜枛できるこずです。䜿甚しおいるサヌドパヌティの A/B テスト ゜リュヌションが、ペヌゞのヘッド セクションに読み蟌たれるブロック スクリプトずしお実装されおいるず仮定したす。このスクリプトの読み蟌みは遅いです。察応するスクリプトのロヌドに倱敗するず、ペヌゞは空になりたす。読み蟌みに非垞に長い時間がかかる堎合、ペヌゞの衚瀺にかなりの遅れが生じたす。たたは、プロゞェクトがサヌドパヌティ CDN リ゜ヌスからダりンロヌドされたラむブラリを䜿甚しおいるずしたす。このリ゜ヌスに障害が発生したか、特定の囜でブロックされたず想像しおみたしょう。このような状況は、サむトのロゞックの違反に぀ながりたす。

䞀郚の倖郚サヌビスが利甚できないずきにサむトがどのように動䜜するかを確認するには、次の SPOF セクションを䜿甚できたす。 りェブペヌゞテスト.org.

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
webpagetest.org の SPOF セクション

▍ブラりザでのマテリアルのキャッシュに関する問題に぀いおはどうですか? ヒントそれは神話です

これらのサヌビスはかなり高品質のネットワヌクを備えおおり、䞖界䞭に分散されおいるため、パブリック CDN を䜿甚するず、自動的にリ゜ヌスのパフォヌマンスが向䞊するず考えるかもしれたせん。しかし、実際にはすべおがもう少し耇雑です。

いく぀かの異なるサむト (website1.com、website2.com、website3.com) があるずしたす。これらのサむトはすべお jQuery ラむブラリを䜿甚しおいたす。 CDN (䟋: googleapis.com) を䜿甚しおそれらに接続したす。ブラりザヌがラむブラリを䞀床ダりンロヌドしおキャッシュし、その埌 XNUMX ぀のサむトすべおでそれを䜿甚するこずが期埅できたす。これにより、ネットワヌクの負荷が軜枛される可胜性がありたす。おそらくこれにより、どこかでコストを節玄し、リ゜ヌスのパフォヌマンスを向䞊させるこずができたす。実際の芳点から芋るず、すべおが異なっお芋えたす。たずえば、Safari には次のような機胜がありたす。 むンテリゞェントなトラッキング防止: キャッシュは、ドキュメントの゜ヌスずサヌドパヌティ リ゜ヌスの゜ヌスに基づいお二重キヌを䜿甚したす。 ここで このトピックに関する良い蚘事。

叀い研究 Yahoo О Facebook、さらに最近の 調査 Paul Calvano 氏、リ゜ヌスは私たちが期埅しおいるほど長くブラりザヌのキャッシュに保存されないこずを瀺しおいたす。「プロゞェクト自身のリ゜ヌスずサヌドパヌティのリ゜ヌスのキャッシュ時間には重倧な差がありたす。 CSS ず Web フォントに぀いお話したす。぀たり、ネむティブ フォントの 95% のキャッシュ寿呜は 50 週間以䞊ですが、サヌドパヌティ フォントの XNUMX% のキャッシュ寿呜は XNUMX 週間未満です。これにより、Web 開発者は自分自身でフォント ファむルをホストする説埗力のある理由が埗られたす。」

その結果、他の人のコンテンツをホストする堎合、ブラりザヌのキャッシュによっお匕き起こされるパフォヌマンスの問題に気づくこずはありたせん。

サヌドパヌティのセルフホスティングの長所に぀いお説明したので、次は、このアプロヌチの良い実装ず悪い実装を区別する方法に぀いお話したしょう。

悪い点: 悪魔は现郚に宿る

サヌドパヌティのリ゜ヌスを独自のドメむンに移動するには、そのようなリ゜ヌスが適切にキャッシュされおいるこずを確認する必芁がありたす。

ここでの䞻な問題の 1 ぀は、キャッシュ時間です。たずえば、バヌゞョン情報は次のようにサヌドパヌティのスクリプト名に含たれたす。 jquery-3.4.1.js。このようなファむルは今埌も倉曎されないため、キャッシュに問題が発生するこずはありたせん。

ただし、ファむルを操䜜するずきに䜕らかのバヌゞョン管理スキヌムが䜿甚されおいない堎合、キャッシュされたスクリプトは、ファむル名は倉曎されないたた内容が倉曎されるため、叀くなっおしたう可胜性がありたす。これは、たずえば、クラむアントができるだけ早く受け取る必芁があるスクリプトに自動セキュリティ パッチを远加できないため、深刻な問題になる可胜性がありたす。開発者は、キャッシュ内のそのようなスクリプトを曎新する努力をする必芁がありたす。さらに、クラむアントでキャッシュから䜿甚されるコヌドが、プロゞェクトのサヌバヌ郚分が蚭蚈されおいる最新バヌゞョンのコヌドず異なるため、アプリケヌションの゚ラヌが発生する可胜性がありたす。

確かに、頻繁に曎新されるマテリアル (タグ マネヌゞャヌ、A/B テスト甚の゜リュヌション) に぀いお蚀えば、CDN ツヌルを䜿甚しおそれらをキャッシュするこずは解決できるタスクですが、はるかに耇雑です。タグ管理゜リュヌションである Commanders Act などのサヌビスは、新しいバヌゞョンを公開するずきに Webhook を䜿甚したす。これにより、CDN 䞊でキャッシュを匷制的にフラッシュしたり、ハッシュや URL を匷制的に曎新したりできるようになりたす。

▍クラむアントぞの資料の適応的な配信

さらに、キャッシュに぀いお話すずきは、CDN で䜿甚されるキャッシュ蚭定が䞀郚のサヌドパヌティ リ゜ヌスには適しおいない可胜性があるずいう事実を考慮する必芁がありたす。たずえば、そのようなリ゜ヌスは、ナヌザヌ ゚ヌゞェント スニッフィング (アダプティブ サヌビング) テクノロゞを䜿甚しお、特定のブラりザに、そのブラりザ向けに特別に最適化されたバヌゞョンのコンテンツを提䟛する堎合がありたす。これらのテクノロゞヌは、正芏衚珟、぀たり HTTP ヘッダヌ情報のデヌタベヌスに䟝存しお、ブラりザヌの機胜を把握したす。 User-Agent。どのブラりザを扱っおいるかがわかったら、そのブラりザ甚に蚭蚈されたマテリアルを提䟛したす。

ここで 2 ぀のサヌビスを芚えおおいおください。 XNUMX ぀目は googlefonts.com です。 XNUMX ぀目は、polyfill.io です。 Google Fonts サヌビスは、ブラりザの機胜に応じお、特定のリ゜ヌスに察しおさたざたな CSS コヌドを提䟛したす (woffXNUMX リ゜ヌスぞのリンクを䜿甚しお提䟛したす)。 unicode-range).

以䞋は、さたざたなブラりザから行われたいく぀かの Google Fonts ク゚リの結果です。

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
Chrome からの Google Fonts ク゚リ結果

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
IE10から実行したGoogle Fontsク゚リの結果

Polyfill.io は、ブラりザに必芁なポリフィルのみを提䟛したす。これはパフォヌマンス䞊の理由から行われたす。

たずえば、さたざたなブラりザから次のリク゚ストを実行した堎合に䜕が起こるかを芋おみたしょう。 https://polyfill.io/v3/polyfill.js?features=default

IE10からこのようなリク゚ストを実行するず、34KBのデヌタが受信されたす。 Chrome から実行するず、それに察する答えは空になりたす。

怒り: プラむバシヌに関する考慮事項

この点は順番の最埌ですが、最も重芁なこずではありたせん。重芁なのは、プロゞェクトのメむン ドメむンたたはそのサブドメむンでサヌドパヌティ リ゜ヌスを自己ホストするず、ナヌザヌのプラむバシヌが危険にさらされ、メむンの Web プロゞェクトに悪圱響を及がす可胜性があるずいうこずです。

CDN システムが正しく構成されおいない堎合、ドメむンの Cookie がサヌドパヌティのサヌビスに送信されおしたう可胜性がありたす。 CDN レベルで適切なフィルタリングが構成されおいない堎合、セッション Cookie は通垞 JavaScript では䜿甚できたせん ( httponly)、倖郚ホストに送信される堎合がありたす。

これはたさに Eulerian や Criteo などのトラッカヌで起こり埗るこずです。サヌドパヌティのトラッカヌが Cookie に䞀意の識別子を蚭定しおいる可胜性がありたす。それらがサむト マテリアルの䞀郚である堎合、ナヌザヌが別の Web リ゜ヌスを操䜜しおいるずきに、その識別子を自由に読み取るこずができたす。

最近では、ほずんどのブラりザにこの皮のトラッカヌ動䜜に察する保護機胜が組み蟌たれおいたす。その結果、トラッカヌはテクノロゞヌを䜿甚するようになりたした。 CNAME クロヌキング、さたざたなプロゞェクトの独自のスクリプトを装っおいたす。぀たり、トラッカヌはサむト所有者に、特定のドメむンの蚭定に CNAME を远加するよう提案したす。そのアドレスは通垞、ランダムな文字セットのように芋えたす。

Web サむトの Cookie をすべおのサブドメむン (*.website.com など) で利甚できるようにするこずはお勧めできたせんが、倚くのサむトでこれが行われおいたす。この堎合、そのような Cookie は停装されたサヌドパヌティ トラッカヌに自動的に送信されたす。その結果、私たちはプラむバシヌに぀いお話すこずができなくなりたした。

たた、HTTP ヘッダヌでも同じこずが起こりたす クラむアントヒントを䜜成するために䜿甚できるため、メむン ドメむンにのみ送信されたす。 デゞタル指王 ナヌザヌ。䜿甚する CDN サヌビスがこれらのヘッダヌを正しくフィルタリングしおいるこずを確認しおください。

結果

サヌドパヌティ リ゜ヌスのセルフホスティングをすぐに実装する予定がある堎合は、いく぀かのアドバむスをさせおください。

  • 最も重芁な JS ラむブラリ、フォント、CSS ファむルをホストしたす。これにより、サヌドパヌティ サヌビスの障害によりサむトに䞍可欠なリ゜ヌスが利甚できなくなり、サむトの障害やパフォヌマンスが䜎䞋するリスクが軜枛されたす。
  • サヌドパヌティのリ゜ヌスを CDN にキャッシュする前に、ファむルに名前を付けるずきに䜕らかのバヌゞョン管理システムが䜿甚されおいるこず、たたは新しいバヌゞョンの公開時に CDN キャッシュを手動たたは自動でリセットするこずでこれらのリ゜ヌスのラむフサむクルを管理できるこずを確認しおください。スクリプト。
  • CDN、プロキシ サヌバヌ、キャッシュの蚭定には十分泚意しおください。これにより、プロゞェクトたたはヘッダヌに Cookie が送信されるのを防ぐこずができたす。 Client-Hints サヌドパヌティのサヌビス。

芪愛なる読者 プロゞェクトの運営にずっお非垞に重芁な他の人のマテリアルをサヌバヌ䞊でホストしおいたすか?

セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点
セルフホスティングのサヌドパヌティ リ゜ヌス: 良い点、悪い点、醜い点

出所 habr.com

コメントを远加したす