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

Boost Your Web Performance with Hyperdrive

chimame
March 07, 2025

Boost Your Web Performance with Hyperdrive

Cloudflare Workers Tech Talks in Osaka #2

chimame

March 07, 2025
Tweet

More Decks by chimame

Other Decks in Programming

Transcript

  1. 目次 • Cloudflare Workersのメリット ◦ メリットのおさらい ◦ メリットから発生する課題 • Hyperdrive

    ◦ Hyperdriveとは ◦ 設定の解説 ◦ 計測 • 導入例 ◦ 初期おすすめ設定 ◦ 実例 • まとめ
  2. 計測 import postgres from "postgres"; async function executeSqlQuery(sql: any) {

    for (let i = 0; i < 10; i++) { await sql`SELECT 1`; } } export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { … const client = await postgres(connectionString); await executeSqlQuery(client); return new Response('ok'); }, } satisfies ExportedHandler<Env>; コネクションだけを変更する
  3. 計測 Service Region 1回目 2回目 3回目 Direct Supabase Japan 0.18

    s 0.18 s 0.19 s Supabase Virginia 2.83 s 2.91 s 2.78 s Neon Singapore 1.66 s 1.67 s 1.68 s Hyperdrive Supabase Japan 0.25 s 0.26 s 0.22 s Supabase Virginia 2.13 s 2.20 s 2.08 s Neon Singapore 1.07 s 0.98 s 0.99 s 日本から大きく離れたリージョンへの速度は早くなるが、逆に近いリージョン は若干遅くなるという結果
  4. 実例 GoogleBotのレスポンス速度 Hyperdrive有  + コード改善前 Hyperdrive無 + コード改善前 Hyperdrive無  +

    コード改善後 Hyperdrive有  + コード改善後 コードやSQL自体の実行回数に左右されるが、通信経路を変えるだけで 効果がかなりある
  5. 実例 import postgres from "postgres"; export default { async fetch(request:

    Request, env: Env, ctx: ExecutionContext): Promise<Response> { … const country = request.headers.get("CF-IPCountry"); const client = createClient( country === "JP" ? context.env.DIRECT_DATABASE_URL : context.env.YOUR_HYPERDRIVE.connectionString, ); … return new Response('ok'); }, } satisfies ExportedHandler<Env>; データベースへの接続をリクエスト毎に変更する - 接続元によって接続経路変える - 実行SQLによってHyperdrive を使用する etc DBクラスターやHypedriveのキャッシュを無効化した場合など 複数のHyperdriveを用意して制御するとよい
  6. Thanks! • name: chimame / rito • job: Webエンジニア •

    field: Cloudflare, GCP, AWS, Ruby, Node.js, TypeScript, React, Next.js, Remix, Docker etc • company: Goens株式会社( https://about.goen-s.com ) • twitter: @chimame_rt • GitHub: chimame