Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オリジンサーバに手を付けないパーフォマンス改善

AijiUejima
December 15, 2023

 オリジンサーバに手を付けないパーフォマンス改善

「オリジンサーバに手を付けないパーフォマンス改善 ~HTMLRewriterの活用方法~」
Workers Tech Talk #2 (https://workers-tech.connpass.com/event/300546/)の発表資料です

AijiUejima

December 15, 2023
Tweet

More Decks by AijiUejima

Other Decks in Technology

Transcript

  1. © 2023 Ateam Inc. Cloudflare には多くのコンテンツ最適化機能がある 5 The modern way

    to load third-party tools and tags Webフォントのパフォーマンスを改善 (プライバシーへの対処) 103 Early Hintsレスポンスでの⾃動応 答によるパフォーマンス改善 3rd partyスクリプトのパフォーマンス 改善 (プライバシーへの対処)
  2. © 2023 Ateam Inc. これらの仕組み 6 The modern way to

    load third-party tools and tags HTML内からWebフォント⽤のlinkを検知 し、Cloudflare がホスティングするものを 代替使⽤するようHTMLを書き換える HTML内からpreload, preconnectのlinkを 検知し、103 Early Hintsレスポンスとして 返却する 専⽤のスクリプトをHTMLに挿⼊し、GTM やPixelなどの3rd partyスクリプトの処理 環境をエッジに移す
  3. © 2023 Ateam Inc. これらの仕組み 7 The modern way to

    load third-party tools and tags HTML内からWebフォント⽤のlinkを検知 し、Cloudflare がホスティングするものを 代替使⽤するようHTMLを書き換える HTML内からpreload, preconnectのlinkを 検知し、103 Early Hintsレスポンスとして 返却する 専⽤のスクリプトをHTMLに挿⼊し、GTM やPixelなどの3rd partyスクリプトの処理 環境をエッジに移す HTMLから特定パターンを探索‧検知 HTMLを書き換え‧HTMLに挿⼊ という処理をCDNで⾏っている
  4. © 2023 Ateam Inc. HTMLRewriter 10 HTMLRewriter: HTMLの解析‧変換が可能なAPI セレクターにマッチする要素に対し、 置換‧挿⼊‧削除などの処理を施す

    element以外にコメントやテキストも ハンドリング可能 > new HTMLRewriter().on('selector', handler).transform(res)
  5. © 2023 Ateam Inc. 改善⽅法の例 17 https://www.flawlessappdesign.com/latest-flutterflow-features-in-may-2023/ Instagramを例に上げると 低画質な画像を先に表⽰し、 その後で⾼画質画像を表⽰している

    ※リサイズ‧webp変換などの⼿法もあるが、 あえて今回はこの⽅法で改善してみる (実⽤性はともかくその⽅がおもしろそうなので)
  6. © 2023 Ateam Inc. ちょっと外れた話 28 WASMを書けば⼀応⾃⼒で画像処理をするための Workerが⽤意できる (という記事が⼀昨⽇公開されていた) 画像処理ができるということは、画像内から何

    点か特徴⾊を取り出し、Worker上でハッシュ化 して、クライアントでSVGで表⽰するようなもの も作れそう(BlurHashのようなもの) https://zenn.dev/sora_kumo/articles/wasm-image-optimization https://blurha.sh/
  7. © 2023 Ateam Inc. 解決⼿段 33 https://github.com/BuilderIO/partytown Builder.io製のライブラリ 3rd party

    scriptsの処理をWeb Workerに退避するす ることで、メインスレッドのブロックを回避できる (3rd partyに限らない任意のスクリプトも退避できる) Partytownのスクリプトを読み込ませた上で、 各種スクリプトのtypeを次のように変更することで Web Workerに退避することができる 例えばGTMとかPixelを利⽤する際にheadに埋め込むスクリプト Partytown
  8. © 2023 Ateam Inc. HTMLRewriter使えば他にも⾊々なことができそう 47 yusukeさんもこのトピックを記事にされている https://zenn.dev/yusukebe/articles/54a26f1bcb22a0 - CSS/JS

    をリストアップしてエッジでダウンロードしてインライン化 - リソースドメインをリストアップしてlink preconnectとして書き込む - SVGのインライン化 - etc...