qori.dev

Mengganti React dengan Preact pada NextJS

· Qori El-Hafizh

Mengecilkan ukuran bundle JavaScript sangat penting. Hal itu akan membuat UX dan SEO lebih baik. Salah satu yang dapat dilakukan pada website berbasis NextJS adalah dengan menukar React dengan Preact.

Apa itu Preact?

Preact adalah library alternatif dari React yang lebih ringan. Preact memiliki API yang hampir seluruhnya kompatibel dengan React. Perbedaannya dapat dilihat di sini.

Instalasi

Pada projek nextjs tambahkan package berikut

pnpm add next-plugin-preact preact react@npm:@preact/compat react-dom@npm:@preact/compat react-ssr-prepass@npm:preact-ssr-prepass preact-render-to-string

Edit next.config.js

//tambahkan ini
const withPreact = require('next-plugin-preact');

/** @type {import('next').NextConfig} */
const nextConfig = // config project anda

// ganti dengan ini
module.exports = withPreact(nextConfig);

Build sebelum menggunakan Preact

➜  next-preact git:(main) pnpm build          

> [email protected] build /home/q/Dev/web/next-preact
> next build

info  - SWC minify release candidate enabled. https://nextjs.link/swcmin
info  - Linting and checking validity of types  
info  - Creating an optimized production build  
info  - Compiled successfully
info  - Collecting page data  
info  - Generating static pages (3/3)
info  - Finalizing page optimization  

Route (pages)                              Size     First Load JS
┌ ○ /                                      5.42 kB        83.3 kB
├   └ css/ae0e3e027412e072.css             707 B
├   /_app                                  0 B            77.9 kB
├ ○ /404                                   187 B          78.1 kB
└ λ /api/hello                             0 B            77.9 kB
+ First Load JS shared by all              78.1 kB
  ├ chunks/framework-20d62dccc471813b.js   45.7 kB
  ├ chunks/main-68da70e92f0d3fbc.js        30.9 kB
  ├ chunks/pages/_app-91ececdeca538268.js  501 B
  ├ chunks/webpack-7ee66019f7f6d30f.js     755 B
  └ css/ab44ce7add5c3d11.css               247 B

λ  (Server)  server-side renders at runtime (uses getInitialProps or getServerSideProps)
○  (Static)  automatically rendered as static HTML (uses no initial props)

Build Sesudah menggunakan Preact

➜  next-preact git:(main) ✗ pnpm build  

> [email protected] build /home/q/Dev/web/next-preact
> next build

info  - SWC minify release candidate enabled. https://nextjs.link/swcmin
info  - Linting and checking validity of types  
info  - Creating an optimized production build  
info  - Compiled successfully
info  - Collecting page data  
info  - Generating static pages (3/3)
info  - Finalizing page optimization  

Route (pages)                              Size     First Load JS
┌ ○ /                                      5.4 kB         46.2 kB
├   └ css/ae0e3e027412e072.css             707 B
├   /_app                                  0 B            40.8 kB
├ ○ /404                                   188 B          40.9 kB
└ λ /api/hello                             0 B            40.8 kB
+ First Load JS shared by all              41 kB
  ├ chunks/framework-d7b1dd941aed8dca.js   8.59 kB
  ├ chunks/main-bba64e68922cf182.js        30.9 kB
  ├ chunks/pages/_app-1363a417001f738b.js  499 B
  ├ chunks/webpack-7ee66019f7f6d30f.js     755 B
  └ css/ab44ce7add5c3d11.css               247 B

λ  (Server)  server-side renders at runtime (uses getInitialProps or getServerSideProps)
○  (Static)  automatically rendered as static HTML (uses no initial props)

Kesimpulan

Mengganti React dengan Preact dapat mengurangi bundle JS. Pada React First Load JS shared by all adalah 78.1 kB sedangkan Preact hanya 41 kB.