Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) · Pelajaran

Pertukaran antara Masa Jalan Node dan Edge

Pilih Node atau Edge bagi setiap laluan berdasarkan permulaan sejuk, API yang tersedia dan kependaman geografi.

Pelajaran 2 daripada 413 langkah

Pertukaran antara Masa Jalan Node dan Edge ialah pelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan), dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) merangkumi sejumlah 4 pelajaran.

Dua Runtime, Satu Pengendali Laluan

Dalam Next.js 15, setiap Pengendali Laluan (app/api/.../route.ts) berjalan pada salah satu daripada dua runtime: runtime Node.js (lalai) atau runtime Edge.

  • Runtime Node — pelayan Node.js penuh. Akses kepada semua API Node, pakej npm, sistem fail dan soket TCP.
  • Runtime Edge — persekitaran ringan berasaskan V8 (API Web sahaja) yang digunakan di banyak lokasi berhampiran pengguna anda.

Anda memilih runtime bagi setiap laluan dengan satu eksport, jadi titik akhir yang berbeza dalam aplikasi yang sama boleh menggunakan runtime yang berbeza.

// app/api/hello/route.ts
import { NextResponse } from 'next/server';

// Opt this route into the Edge runtime
export const runtime = 'edge';

export async function GET() {
  return NextResponse.json({ message: 'Hello from the Edge' });
}

Lalai Ialah Node

Jika anda tidak menetapkan runtime, pengendali berjalan pada runtime Node.js. Ini ialah lalai yang selamat untuk kebanyakan kerja fullstack kerana ia menyokong pemacu pangkalan data, ORM (Prisma, Drizzle) dan mana-mana pustaka npm anda.

Anda hanya memilih Edge apabila manfaat khususnya (laten rendah, permulaan sejuk yang pantas dan pengagihan geografi) lebih penting daripada API yang perlu anda lepaskan.

// app/api/users/route.ts
import { NextResponse } from 'next/server';
import { db } from '@/lib/db'; // e.g. Prisma / Drizzle

// No runtime export => Node.js runtime (default)
export async function GET() {
  const users = await db.user.findMany();
  return NextResponse.json(users);
}

Permulaan Sejuk: Mengapa Edge Terasa Lebih Pantas

Permulaan sejuk ialah kelewatan apabila fungsi tanpa pelayan perlu dimulakan sebelum mengendalikan request.

  • Fungsi Node memulakan proses Node.js — permulaan sejuknya lebih berat dan perlahan (selalunya berpuluh hingga beratus milisaat).
  • Fungsi Edge berjalan pada pengasing V8 yang bermula dalam kira-kira satu milisaat — hampir tiada permulaan sejuk.

Untuk laluan dengan trafik rendah atau trafik yang datang secara mendadak (webhook, semakan auth dan ubah hala), Edge mengelakkan penalti “request pertama lambat” yang boleh dialami fungsi Node.

Laten Geografi

Fungsi tanpa pelayan Node biasanya berjalan di satu rantau (rantau tempat anda membuat deployment). Pengguna di Tokyo yang mengakses fungsi di Virginia perlu menanggung perjalanan pergi balik merentasi seluruh dunia.

Fungsi Edge direplikasi secara global dan berjalan di lokasi yang paling hampir dengan pengguna. Untuk kerja yang sensitif terhadap laten dan ringan dari segi pengiraan, ini mengurangkan masa respons dengan ketara.

Perhatian: jika fungsi Edge anda kemudiannya memanggil pangkalan data di satu rantau yang jauh, anda hanya memindahkan laten tersebut. Edge paling berkesan apabila ia memerlukan sedikit atau tiada data asal, atau berkomunikasi dengan stor data yang diedarkan secara global.

Perkara yang Tidak Boleh Dilakukan oleh Edge

Runtime Edge hanya menyediakan API standard Web (fetch, Request, Response, crypto.subtle, TextEncoder, ...). Ia tidak menyertakan binaan terbina dalam Node.

  • Tiada fs, tiada net dan tiada soket TCP mentah.
  • Pakej tambahan asli/C++ tidak akan berjalan.
  • Banyak pemacu pangkalan data yang menggunakan TCP (iaitu pg dan mysql2 lalai) tidak akan berfungsi secara terus.

Jika laluan mengimport pustaka yang memerlukan semua ini, kekalkan laluan tersebut pada Node.

// This FAILS on the Edge runtime:
// import fs from 'node:fs';   // 'fs' is not available
// import { Pool } from 'pg';  // raw TCP socket not supported

// Edge-friendly work uses Web APIs only:
export const runtime = 'edge';

export async function GET() {
  const data = await fetch('https://api.example.com/feed').then(r => r.json());
  return Response.json(data);
}

Pangkalan Data pada Edge

Oleh sebab Edge tidak boleh membuka sambungan TCP mentah, anda mengakses pangkalan data melalui pemacu berasaskan HTTP.

  • Pemacu tanpa pelayan Neon (@neondatabase/serverless) — Postgres melalui HTTP/WebSocket.
  • Vercel Postgres / Turso (libSQL) / Upstash Redis — semuanya berasaskan HTTP-Fetch.
  • Prisma dengan Accelerate atau penyesuai tanpa pelayannya.

Jika susunan anda menggunakan sambungan TCP terkumpul klasik, laluan itu sepatutnya berjalan pada Node.

// app/api/count/route.ts
import { neon } from '@neondatabase/serverless';

export const runtime = 'edge';

const sql = neon(process.env.DATABASE_URL!); // HTTP-based, Edge-safe

export async function GET() {
  const rows = await sql`SELECT count(*) AS total FROM visits`;
  return Response.json({ total: rows[0].total });
}

Penstriman dan Kerja Berpanjangan

Kedua-dua masa jalan boleh menstrim respons, tetapi had pelaksanaannya berbeza.

  • Edge dioptimumkan untuk respons yang pendek dan pantas serta penstriman (sangat sesuai untuk memproksikan strim token AI). Ia mempunyai had yang lebih ketat pada masa CPU dan saiz himpunan.
  • Node boleh menjalankan pengiraan yang lebih lama dan berat serta pepohon kebergantungan yang besar, dan lebih baik menyokong corak yang sesuai untuk kerja latar belakang.

Laluan yang memproses muatan besar, menjana PDF atau menjalankan pustaka berat hendaklah kekal pada Node.

// Streaming a response works on either runtime
export const runtime = 'edge';

export async function GET() {
  const stream = new ReadableStream({
    start(controller) {
      const enc = new TextEncoder();
      controller.enqueue(enc.encode('chunk-1\n'));
      controller.enqueue(enc.encode('chunk-2\n'));
      controller.close();
    },
  });
  return new Response(stream, { headers: { 'Content-Type': 'text/plain' } });
}

Coretan Web Tulen yang Boleh Anda Jalankan

Kod Edge hanya menggunakan Web API, yang bermaksud logik terasnya ialah TypeScript biasa yang boleh dijalankan di mana-mana. Berikut ialah contoh kendiri yang menggunakan crypto.subtle dan TextEncoder — tepat seperti kod yang selamat untuk Edge kerana tidak memerlukan binaan terbina dalam Node.

// Standalone: hash a string using only Web Crypto APIs
async function sha256Hex(input: string): Promise<string> {
  const data = new TextEncoder().encode(input);
  const digest = await crypto.subtle.digest('SHA-256', data);
  return Array.from(new Uint8Array(digest))
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

async function main() {
  const hash = await sha256Hex('edge-runtime');
  console.log(hash);
}

main();

Pembantu Membuat Keputusan

Kadang-kadang, pertukaran pilihan lebih mudah difahami jika dikodkan sebagai peraturan ringkas. Fungsi di bawah mengembalikan cadangan masa jalan berdasarkan beberapa fakta tentang sesuatu laluan. Ini hanyalah logik TypeScript biasa yang boleh anda fahami dan jalankan.

type RouteNeeds = {
  usesNodeApis: boolean;     // fs, net, native addons
  usesTcpDatabase: boolean;  // classic pg/mysql driver
  latencySensitive: boolean; // users worldwide, light compute
  heavyCompute: boolean;     // big payloads, PDF, large deps
};

function recommendRuntime(r: RouteNeeds): 'node' | 'edge' {
  if (r.usesNodeApis || r.usesTcpDatabase || r.heavyCompute) return 'node';
  if (r.latencySensitive) return 'edge';
  return 'node';
}

console.log(recommendRuntime({ usesNodeApis: false, usesTcpDatabase: false, latencySensitive: true, heavyCompute: false }));
console.log(recommendRuntime({ usesNodeApis: false, usesTcpDatabase: true, latencySensitive: true, heavyCompute: false }));

Mencampurkan Masa Jalan dalam Satu Aplikasi

Kelebihan besar masa jalan bagi setiap laluan ialah anda boleh mencampurkannya. Aplikasi Next.js 15 yang lazim mungkin mengekalkan:

  • Pemeriksaan pengesahan/sesi, ubah hala, penanda A/B dan proksi ringan → Edge.
  • Penulisan pangkalan data melalui Prisma, pemprosesan fail dan SDK pihak ketiga → Node.

Nota: Server Actions berjalan pada masa jalan Node.js dalam App Router — pilihan Edge yang ditunjukkan di sini terpakai pada Pengendali Laluan dan Middleware, bukan Server Actions.

// app/api/flag/route.ts  -> Edge: fast, global, no DB
export const runtime = 'edge';
export async function GET(req: Request) {
  const country = req.headers.get('x-vercel-ip-country') ?? 'US';
  return Response.json({ promoEnabled: country === 'US' });
}

Membaca Konteks Geo Edge

Edge berjalan berdekatan dengan pengguna, jadi ia ialah tempat semula jadi untuk logik yang peka geo. Di Vercel, data geo tiba sebagai pengepala permintaan (x-vercel-ip-country, x-vercel-ip-city). Anda boleh menyetempatkan kandungan atau membuat ubah hala tanpa perjalanan pergi balik ke pelayan pusat.

Jika anda perlu membuat carian pangkalan data untuk setiap permintaan, kelebihan Edge menjadi lebih kecil — jadi gunakan Edge hanya apabila keputusan boleh dibuat dengan kos rendah dan data berada secara setempat atau dalam cache.

// app/api/welcome/route.ts
export const runtime = 'edge';

export async function GET(req: Request) {
  const country = req.headers.get('x-vercel-ip-country') ?? 'unknown';
  const greeting = country === 'FR' ? 'Bonjour' : 'Hello';
  return Response.json({ greeting, country });
}

Semakan Pantas

Pilih laluan yang paling sesuai untuk masa jalan Edge.

Imbas Kembali: Memilih Mengikut Laluan

Kini anda memilih masa jalan bagi setiap laluan berdasarkan pertukaran pilihan sebenar:

  • Edge — permulaan sejuk hampir sifar, kependaman rendah di seluruh dunia dan Web API sahaja. Terbaik untuk laluan ringan, peka geo dan tidak banyak menggunakan data (penanda, ubah hala, pemeriksaan pengesahan dan proksi strim).
  • Node (lalai) — API Node penuh, pakej npm, pangkalan data TCP, pengiraan berat dan kebergantungan besar.

Buat keputusan dengan soalan yang konkrit: Adakah ia memerlukan API Node atau pemacu pangkalan data TCP? Adakah ia melibatkan pengiraan berat? Jika ya → Node. Adakah ia ringan dan peka terhadap kependaman di seluruh dunia? → Edge. Dan ingat: Server Actions berjalan pada Node; pilihan runtime = 'edge' adalah untuk Pengendali Laluan dan Middleware.

Percuma untuk bermula

Pelajari TypeScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
22
Pelajaran
88

Soalan Lazim

Adakah pelajaran “Pertukaran antara Masa Jalan Node dan Edge” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan), termasuk “Pertukaran antara Masa Jalan Node dan Edge”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pertukaran antara Masa Jalan Node dan Edge”?

Pilih Node atau Edge bagi setiap laluan berdasarkan permulaan sejuk, API yang tersedia dan kependaman geografi. Anda berlatih Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan)?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pertukaran antara Masa Jalan Node dan Edge” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) ini?

Ya. Setiap pelajaran Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan) menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mereka Bentuk Pengendali Laluan RESTful dengan API Permintaan Web
  2. Pertukaran antara Masa Jalan Node dan Edge
  3. Respons Penstriman dan ReadableStream dalam Pengendali
  4. Pengesahan Permintaan dan Respons JSON Bertip dengan Zod
← Kembali ke Tindanan Penuh Next.js 15 (Penghala Aplikasi + Tindakan Pelayan)