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

Boost Your Web Performance with Hyperdrive

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for chimame chimame
March 07, 2025

Boost Your Web Performance with Hyperdrive

Cloudflare Workers Tech Talks in Osaka #2

Avatar for chimame

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