- Penjelasan tentang teknik dasar pengembangan web yang hanya menggunakan HTML, CSS, dan JavaScript
- Memperkenalkan cara membangun situs dan aplikasi hanya dengan teknologi web standar tanpa build tool dan framework
- Membahas cara menyusun struktur dan styling dengan memanfaatkan Web Components serta fitur CSS modern
- Mengejar lingkungan pengembangan yang sederhana dan manfaat jangka panjang tanpa kompleksitas framework dan beban pemeliharaan
- Tutorial ini terutama ditujukan bagi developer yang sudah mempelajari teknologi standar web
Gambaran Umum Web Plain Vanilla
Ikhtisar teknik utama untuk membuat situs dan aplikasi hanya dengan teknologi web standar tanpa build tool dan framework dalam pengembangan web
- Menjelaskan lingkungan yang hanya memanfaatkan editor, browser, dan standar web
- Memperkenalkan struktur yang memungkinkan deployment ke lingkungan produksi tanpa konfigurasi awal dan tanpa logika sisi server
Topik yang Dibahas
1. Komponen (Components)
- Menjelaskan cara menyusun elemen tingkat tinggi hanya dengan HTML, JavaScript, dan CSS menggunakan Web Components
- Menunjukkan cara menggantikan pendekatan komponen framework seperti React atau Vue
2. Styling
- Menjelaskan cara memanfaatkan kekuatan CSS modern untuk menggantikan kemudahan yang disediakan CSS Modules, PostCSS, dan SASS
- Menawarkan konsep penyusunan style yang terstruktur dan modular, melampaui CSS klasik
3. Situs (Sites)
- Menjelaskan cara menyusun proyek web berbasis Web Components dan melakukan deployment tanpa build tool atau sisi server
- Menyajikan workflow deployment yang praktis dan sederhana
4. Aplikasi (Applications)
- Menjelaskan cara membuat aplikasi web single-page hanya dengan teknik vanilla
- Menjelaskan metode routing dan manajemen state
Rekomendasi Target Pembaca
Ditujukan untuk developer yang sudah cukup mampu menggunakan HTML, CSS, dan JavaScript
- Bagi orang yang baru mulai belajar pengembangan web, direkomendasikan jalur pembelajaran dasar seperti Odin Project atau MDN
Mengapa Pendekatan Vanilla
Framework modern memang cepat menyediakan struktur dan fitur yang kuat, tetapi juga disertai peningkatan kompleksitas tool dan framework serta beban pemeliharaan yang berkelanjutan
- Pendekatan plain vanilla mengorbankan sebagian kenyamanan jangka pendek, tetapi sebagai gantinya menawarkan kesederhanaan dan manfaat jangka panjang berupa nyaris tanpa pemeliharaan
- Browser masa kini memungkinkan pendekatan ini benar-benar diterapkan berkat dukungan standar web yang sangat baik
1 komentar
Komentar Hacker News
Saya sekarang sudah keluar dari perdebatan "vanila atau framework" dan melihatnya dari sudut pandang, 'apakah ini benar-benar perlu website?'
Kalau mulai merasa ragu apakah aplikasi web, terutama di ranah B2B SaaS, benar-benar membutuhkan web seperti itu, kita akan menemukan bahwa bisnis bisa berjalan cukup jauh tanpa harus menyentuh browser
Sebagian besar waktu yang saya habiskan membuat website dan aplikasi sebenarnya terfokus pada UI/UX administratif, yaitu bagian di mana admin mengubah field database agar aplikasi bekerja sesuai ekspektasi pelanggan
Dalam banyak situasi, jauh lebih cepat, mudah, dan minim pekerjaan sia-sia bila bisnis cukup diberi template konfigurasi (misalnya file Excel), lalu hasilnya langsung dimasukkan atau digabungkan ke tabel SQL
Web hanya menawarkan satu jenis UI/UX. Email atau file teks biasa justru lebih fleksibel
Terutama ada masalah pembeli seperti instansi pemerintah yang tidak benar-benar paham lalu sering membayar terlalu mahal
Para pengambil keputusan pembelian perlu lebih diedukasi soal apa yang benar-benar mereka butuhkan
Toko guci abu fisik juga tidak punya keranjang, jadi kenapa toko virtual harus punya
Saat membeli alat pertukangan kayu khusus secara online pun, saya cukup mengisi formulir lalu menerima komponennya bersama invoice, dan kalau mau saya bahkan tidak perlu membayar lebih dulu
Baik online maupun offline, ada banyak bentuk perdagangan, dan kalau kita memperhatikan orang-orang yang hidup dengan cara menarik, itu bisa ditemukan di mana-mana
Kalau ada sedikit saja kemampuan maintenance, pendekatan template Excel + skrip kustom sederhana jauh lebih fleksibel.
Sangat efektif bila pengguna akhirnya memang tipe pengguna yang nyaman berurusan dengan data mentah
Dan sampai sekarang 99% B2B masih mengikuti cara ini
Saya bukan anti-framework. Hanya saja, dalam banyak kasus saya merasa itu tidak perlu
Saya selalu heran kenapa harus menambahkan JS 100KB bahkan sebelum menulis satu baris kode pun
Bersama tim saya, kami membangun https://restofworld.org tanpa framework apa pun
Survei, outreach, dan umpan balik email semuanya sangat positif dari sisi kegunaan dan pengalaman membaca
Mungkin nanti kami bisa memakai framework juga, tetapi sejauh ini vanilla JS masih sangat cocok
Di satu sisi ada orang-orang yang membangun web app besar dengan tim 30 orang lebih, dan ketika mendengar "dibuat tanpa framework", mereka langsung mempertanyakan bagaimana fitur-fitur penting skala besar ditangani
Tetapi jawabannya adalah fitur itu memang tidak dibutuhkan, karena ini penggunaan seperti blog, jadi dari awal memang tidak memerlukan framework
Sebaliknya, orang yang tidak punya pengalaman dengan web app berskala besar akan berpikir, "kenapa orang memakai framework"
Web benar-benar kumpulan perangkat lunak yang sangat beragam.
Jadi menurut saya, saat membahas framework kita harus menjelaskan dengan jelas jenis perangkat lunak apa yang sedang dibicarakan
Dalam kasus ini, ini adalah blog WordPress
Mereka memakai WordPress, sebuah framework besar, dan hanya merendernya secara statis
TFA membahas pendekatan tanpa build tool sama sekali, hanya memakai standar web modern. Hanya editor, browser, dan standar web
Di aplikasi enterprise tempat saya bekerja, kekhawatiran soal 100KB sama sekali tidak relevan
Kebanyakan adalah aplikasi besar buatan banyak tim, memakai React dan sejenisnya.
Di Lob/B2B, tidak ada yang peduli pada initial page load
Pengguna memakai aplikasinya setiap hari, dan sebagian besar aset statis langsung tersedia dari cache browser
Kalau memakai framework pintar seperti Next.js, konten dipisah per route menjadi chunk immutable
Render awal adalah HTML statis, jadi dari sudut pandang pengguna, hydrasi pun hampir tidak terlihat
Tetapi dalam debat vanila vs framework, contoh seperti ini selalu berupa situs berita/artikel, jadi saya merasa "saya memang dari awal tidak akan pakai framework" karena itu bukan aplikasi kompleks
Pada akhirnya, contoh penggunaan nyata yang dibutuhkan adalah aplikasi yang lebih interaktif
Akhir-akhir ini saya lebih suka memakai framework dan pola yang konsisten, sambil meminimalkan dependensi lain
Di iPhone, saya sudah terlalu terbiasa melihat saat kembali ke halaman sebelumnya seluruh halaman dimuat ulang
Namun para developer sering terobsesi pada loading screen, komponen yang di-hydrate, animasi berlebihan, dan modal yang menjengkelkan hanya demi seru-seruan
Selain itu, infinite scroll membuat saya sulit melacak posisi saya lewat scrollbar, jadi sangat buruk untuk kegunaan
Pujian karena ikut membangunnya
Mithril misalnya bisa memberikan semua itu hanya dalam 10KB gzip
Kalau membayangkan harus mengimplementasikan sendiri tabel reaktif dengan pencarian, form dengan label, validasi, dan error yang rapi, padahal saya bisa memakai library UI Svelte dan produk tervalidasi yang bagus dengan overhead 25KB, kenapa harus membuat semuanya sendiri
Dan WordPress juga adalah framework
Memakai framework juga tidak membuatnya lambat. WordPress atau apa pun
Terlalu cepat
Untuk produktivitas developer, setidaknya secara teori.
Dalam praktiknya, sering kali tidak terlalu membantu
Saya penasaran apakah pendekatan ini punya kelemahan tajam tertentu
Saya sedang mengembangkan sistem untuk sekitar 2.000 pengguna, dan mereka sama sekali tidak peduli dengan UI reaktif
Pendekatan terbaik adalah membuat monolit, tidak usah memikirkan page refresh, dan fokus saja pada penyelesaian pekerjaan
Motivasinya sebagian besar bukan teknis, melainkan karena distribusi aplikasi native terlalu mahal
Web menyediakan standar distribusi aplikasi dengan murah, tetapi teknologinya untuk UI masih buruk
Dulu ada berbagai upaya setengah matang seperti X11, Java, Flash, dan saya berharap suatu hari ada cara yang lebih nyaman untuk mengembangkan web app
@view-transitionpun transisi halus sudah bisa dilakukanhttps://developer.mozilla.org/en-US/docs/Web/CSS/@view-transition
Sebagian besar perangkat lunak jauh lebih lambat dan kurang responsif daripada perangkat mekanis 120 tahun lalu
Tidak perlu memanggil paket npm
Backend-nya express/node, seluruh kode bercampur, lalu di lingkungan dev server dijalankan lewat server bawaan React, sedangkan saat deployment dijalankan berbeda, sehingga pada akhirnya butuh pola build dan operasi yang aneh dan kenyamanan dev server seperti hot reload jadi terasa sia-sia
Bahkan SPA perusahaan besar seperti Reddit dan X(Twitter) terlalu tidak stabil di mobile
Kalau bukan setingkat Twitter, atau bukan platform berbasis API, menurut saya tidak perlu memaksakan SPA
Kalau bahkan perusahaan bernilai puluhan miliar pun belum berhasil membangunnya dengan benar, jangan terlalu percaya diri bahwa saya bisa melakukannya lebih baik
Tidak perlu membongkar semuanya dan menggantinya dengan React
Fitur-fitur canggih mirip SPA yang disebut penulis asli bersifat opsional
Apakah Anda juga meneliti orang-orang yang sudah pergi
Saya ingin hidup di dunia seperti ini
Saya berasal dari masa sebelum framework, dan saat itu segalanya memang belum matang, bahkan orang yang hanya tahu jQuery pun sangat umum
Sekarang saya merasa manfaat framework pasca-query selector tidak sebanding dengan biayanya, meski framework testing adalah pengecualian yang sangat bagus
Kita terjebak dalam penjara framework bernama React, dan semua kegagalan adalah hasil dari kompleksitas yang berubah menjadi spaghetti
State machine jadi kusut karena hardcoding, dan hasil terjemahan, kompresi, serta transpile sulit dibaca
Source map juga menjadi lapisan kompleksitas tambahan untuk maintenance
Saya paham kenapa framework dibuat, tetapi sulit membayangkan bahwa bagi engineer baru, terus belajar framework lebih mudah daripada vanilla JS
HTML hanyalah markup yang dibuat untuk mempermudah rendering teks, dan HTTP juga serupa
Dulu rasio text-to-markup harus tinggi, tetapi sekarang itu benar-benar terbalik
Tetapi kita percaya bahwa menumpangkan seluruh pengembangan aplikasi di atasnya adalah masa depan, dan kalau melihat bagian dalam React pun, isinya adalah puluhan tahun akal-akalan dan trik
Dulu itu seperti membuat aplikasi dengan Excel+VB, atau kombinasi PDF+PostScript, sebuah upaya yang terdengar absurd
Karena kita menempuh jalan itu, konsumsi JS beberapa MB terasa berlebihan
Yakni saat UI langsung bereaksi terhadap perubahan data; kalau ini harus dilakukan dengan membuat listener manual, update diff, bahkan melepas event satu per satu, rasanya seperti manajemen memori manual
Begitulah masa jQuery, dan kesalahan sangat sering terjadi
Kalau nanti sudah mungkin memodularisasi view secara deklaratif berbasis komponen dengan vanilla JS, barulah saya akan kembali, tetapi saat ini menurut saya masih mustahil
Ada elemen penentu yang masih kurang
React dan Angular jelas masuk akal sebelum ES2015
Setelah itu saya lelah dengan perubahan framework frontend
Bahkan di dalam React sendiri, pendekatan komponen dan cara mengelola state terus berubah
Saya masih belum setuju dengan Web Components
Bahkan dengan fitur terbaru seperti
@scoped,import {type:css}, saya tetap merasa jauh lebih masuk akal merender elemen secara statis lalu memperbaruinya secara dinamis dengan JS modernSaya skeptis pada sebagian besar pendekatan Web Components, dan percaya kita harus terus berinovasi di luar framework seperti React/Svelte
Saya tidak pernah merasa Web Components berguna untuk beberapa situs yang saya kelola
Hal-hal terkait Shadow DOM disebut berkali-kali di tiap halaman, dan kebanyakan justru adalah masalah yang muncul karena memilih memakainya
Karena komponennya khusus untuk aplikasi saya, saya juga tidak punya masalah Shadow DOM
Saya penasaran bagaimana Web Components menangani ini di backend
Anda bisa menambahkan metode sendiri ke tag Anda, dan logika pembaruan juga bisa dienkapsulasi di dalam komponen
Kita butuh praktik yang berfokus pada library ringan atau hal-hal yang bisa ditulis sendiri
HTMX ada bagusnya, tetapi tetap bertindak seperti tag script, dan menurut saya URL/metode cukup diletakkan jelas di HTML, sementara hal seperti
hx-targetcukup ditentukan sebagaidata-attribute dari JSSaya tidak ingin membawa semua fitur HTMX yang tidak dipakai
Saya tidak menganggap Web Components sebagai pengganti untuk apa yang oleh framework lain disebut komponen
Tidak bisa memasukkan nilai majemuk (Object, Array, dll.) ke atribut, boilerplate-nya terlalu banyak, dan tidak ada reaktivitas
Saya menulis kode gaya vanilla JS dengan pendekatan signals[1]
Tidak semua standar W3C adalah jawaban yang benar, dan kita harus melihat contoh kegagalan XHTML
[1] https://wrnrlr.github.io/prelude/
http://youmightnotneedjs.com
Ini tampaknya pendekatan yang cocok bagi orang yang membuat halaman web sebagai hobi
Framework bertujuan untuk standarisasi, desain yang menanamkan praktik terbaik, dan memulai pengembangan dengan cepat
Website itu sendiri tidak punya nilai intrinsik; yang penting adalah bagaimana menampilkan isinya secara efisien dan mengembangkannya dengan benar tepat waktu
Dalam hal ini, framework menurunkan biaya saat ini dan biaya masa depan
Di perusahaan besar nyata, pengambilan keputusan sering ditentukan oleh tren, kebiasaan, dan sikap defensif terhadap framework populer; penurunan produktivitas akibat peningkatan kompleksitas tidak dilacak, dan justru keputusan buruk sering selaras dengan insentif pribadi atau tim
Artinya, kita tidak bisa membenarkan pemilihan framework dengan logika "ini pasti pilihan yang rasional"
Dari awal, memakai framework tidak otomatis berarti praktik terbaik akan dijalankan, dan justru bisa menghasilkan sistem yang lebih gemuk dan lambat
Ini materi yang benar-benar luar biasa
Kalau membangun web, menurut saya kita harus memahami prinsip teknologi dasarnya dan memanfaatkan platform web semaksimal mungkin
Di atas itu, memakai build system/framework atau tidak adalah pilihan bebas selama kita paham trade-off-nya
Secara pribadi saya suka Remix(/React-router v7+) karena selaras dengan filosofi standar web
Artinya, kita bisa mencapai lebih banyak dengan lebih sedikit pengembangan, misalnya perubahan data server bisa dilakukan hanya dengan HTML form
Saya juga merekomendasikan https://every-layout.dev karena di sana kita bisa mempelajari berbagai teknik layout berkinerja tinggi, aksesibel, dan fleksibel yang dibuat hanya dengan CSS native browser
Saya sendiri bekerja secara profesional di pengembangan web sejak 1998
Minggu lalu saya membuat proyek kecil sepenuhnya dengan vanila dan hasilnya berjalan sangat baik
Ini alat web untuk menulis thread panjang Mastodon
Sepanjang proses membuatnya, saya terus berpikir, "apakah saya melakukan sesuatu yang salah karena tidak memakai framework?"
Suasananya seperti semua orang lain mengharapkan framework
Splinter, splinter.almonit.club, silakan lihat bagi yang tertarik