Cara Next.js mempercepat navigasi dengan pengambilan data rute dan cara menyesuaikannya.
Dalam postingan ini, Anda akan mempelajari cara kerja perutean di Next.js, cara pengoptimalannya untuk kecepatan, dan cara menyesuaikannya agar paling sesuai dengan kebutuhan Anda.
Komponen <Link>
Di Next.js, Anda tidak perlu menyiapkan perutean secara manual.
Next.js menggunakan pemilihan rute berbasis sistem file, yang memungkinkan Anda membuat file dan folder
di dalam direktori ./pages/:

Untuk menautkan ke halaman yang berbeda, gunakan komponen
<Link>, mirip dengan cara Anda
menggunakan elemen <a> lama:
<Link href="/margherita">
<a>Margherita</a>
</Link>
Saat Anda menggunakan komponen <Link> untuk navigasi, Next.js akan melakukan sedikit lebih banyak hal untuk Anda. Biasanya, halaman didownload saat Anda membuka link ke halaman tersebut, tetapi
Next.js otomatis melakukan pengambilan data awal JavaScript yang diperlukan untuk merender halaman.
Saat Anda memuat halaman dengan beberapa link, kemungkinan besar saat Anda mengikuti link, komponen di baliknya sudah diambil. Hal ini meningkatkan responsivitas aplikasi dengan mempercepat navigasi ke halaman baru.
Di aplikasi contoh, halaman index.js ditautkan ke margherita.js dengan
<Link>:
Gunakan Chrome DevTools untuk memverifikasi bahwa margherita.js telah di-prefetch:
1. Untuk melihat pratinjau situs, tekan Lihat Aplikasi. Kemudian tekan
Layar Penuh
.
- Buka Chrome DevTools.
- Klik tab Jaringan.
- Centang kotak Nonaktifkan cache.
- Muat ulang halaman.
Saat Anda memuat index.js, tab Network menunjukkan bahwa margherita.js juga didownload:

Cara kerja pengambilan data otomatis
Next.js melakukan pengambilan data terlebih dahulu hanya untuk link yang muncul di area tampilan dan menggunakan Intersection
Observer API
untuk mendeteksinya. API ini juga menonaktifkan pengambilan data terlebih dahulu saat koneksi jaringan lambat
atau saat pengguna telah mengaktifkan
Save-Data. Berdasarkan pemeriksaan ini, Next.js menyisipkan tag <link
rel="preload"> secara dinamis untuk mendownload komponen untuk navigasi berikutnya.
Next.js hanya mengambil JavaScript; tidak menjalankannya. Dengan begitu, browser tidak akan mendownload konten tambahan yang mungkin diminta oleh halaman yang telah di-prefetch hingga Anda membuka link tersebut.
Menghindari pengambilan data terlebih dahulu yang tidak perlu
Untuk menghindari download konten yang tidak perlu, Anda dapat menonaktifkan pengambilan data sebelumnya untuk halaman yang jarang dikunjungi dengan menyetel properti prefetch pada <Link> ke false:
<Link href="/pineapple-pizza" prefetch={false}>
<a>Pineapple pizza</a>
</Link>
Di aplikasi contoh kedua ini, halaman index.js memiliki <Link> ke
pineapple-pizza.js dengan prefetch disetel ke false:
Untuk memeriksa aktivitas jaringan, ikuti langkah-langkah dari contoh pertama. Saat
Anda memuat index.js, tab Jaringan DevTools menunjukkan bahwa margherita.js telah
didownload, tetapi pineapple-pizza.js belum:

Melakukan pengambilan data dengan perutean kustom
Komponen <Link> cocok untuk sebagian besar kasus penggunaan, tetapi Anda juga dapat membuat
komponen sendiri untuk melakukan pemilihan rute. Next.js mempermudah hal ini dengan
API router yang tersedia di next/router.
Jika Anda ingin melakukan sesuatu (misalnya, mengirimkan formulir) sebelum membuka
rute baru, Anda dapat menentukannya dalam kode perutean kustom.
Saat menggunakan komponen kustom untuk perutean, Anda juga dapat menambahkan pengambilan data sebelumnya ke komponen tersebut.
Untuk menerapkan pengambilan data sebelumnya dalam kode perutean, gunakan metode prefetch dari
useRouter.
Lihat components/MyLink.js dalam contoh aplikasi ini:
Pengambilan data dilakukan di dalam hook
useEffect. Jika properti
prefetch pada <MyLink> ditetapkan ke true, rute yang ditentukan dalam
properti href akan diambil sebelumnya saat <MyLink> tersebut dirender:
useEffect(() => {
if (prefetch) router.prefetch(href)
});
Saat Anda mengklik link, perutean dilakukan di handleClick. Pesan akan
dicatat ke konsol, dan metode push akan membuka rute baru
yang ditentukan dalam href:
const handleClick = e => {
e.preventDefault();
console.log("Having fun with Next.js.");
router.push(href);
};
Di aplikasi contoh ini, halaman index.js memiliki <MyLink> ke margherita.js dan
pineapple-pizza.js. Properti prefetch disetel ke true di /margherita
dan ke false di /pineapple-pizza.
<MyLink href="/margherita" title="Margherita" prefetch={true} />
<MyLink href="/pineapple-pizza" title="Pineapple pizza" prefetch={false} />
Saat Anda memuat index.js, tab Network menunjukkan bahwa margherita.js didownload dan pineapple-pizza.js tidak:

Saat Anda mengklik salah satu link, log Console akan menampilkan "Having fun with Next.js". dan membuka rute baru:

Kesimpulan
Saat Anda menggunakan <Link>, Next.js otomatis melakukan pengambilan data awal JavaScript yang diperlukan untuk merender halaman yang ditautkan, sehingga navigasi ke halaman baru menjadi lebih cepat. Jika menggunakan perutean kustom, Anda dapat menggunakan Next.js Router API untuk menerapkan pengambilan data terlebih dahulu sendiri. Hindari mendownload konten yang tidak perlu dengan menonaktifkan pengambilan data awal untuk halaman yang jarang dikunjungi.