HTML First
(html-first.com)- Dengan terlebih dahulu memakai fitur native yang disediakan browser, saat membuat aplikasi web kita dapat mengurangi ketergantungan pada bahasa tambahan dan toolchain
- React meningkatkan keandalan pengembangan UI melalui pola seperti
props,state, dan komponen, tetapi juga memindahkan pusat cara pengembangan dari HTML ke JavaScript - Sementara itu, W3C, WHATWG, IETF, dan TC39 menambahkan ribuan peningkatan pada bahasa dasar web, dan ketika browser utama mengintegrasikannya, sebagian alasan mengapa React dulu dibutuhkan menjadi melemah
- HTML First bukanlah gerakan untuk meyakinkan developer yang puas dengan React, melainkan arus yang berupaya menyediakan bahasa bagi orang yang tertarik pada pendekatan berpusat pada HTML untuk merapikan pemikiran mereka dan berdiskusi dengan rekan kerja
- Ini lebih dekat dengan kesadaran praktis untuk meninjau kembali apakah software yang cepat dan aksesibel dapat dibuat hanya dengan bahasa dasar web dan fitur browser
Cara pengembangan yang dituju HTML First
- HTML First mengutamakan HTML, CSS, JavaScript, dan fitur native browser saat membuat software web
- Intinya adalah mengurangi lapisan abstraksi yang ditambahkan di atas platform web
- Bahasa tambahan dan toolchain juga termasuk lapisan yang perlu dikurangi
- Tujuannya adalah cara pengembangan yang menempatkan fitur yang sudah disediakan browser sebagai pusat, lalu menambahkan alat di atasnya hanya jika diperlukan
Pengembangan web yang menjadi lebih kompleks setelah React
- Sebelum React, cara yang umum adalah menulis antarmuka dengan HTML dan melengkapi bagian yang tidak didukung HTML secara bawaan dengan alat seperti jQuery
- Contoh utamanya adalah pengiriman request asinkron dan pembaruan DOM
- Library seperti React memecahkan berbagai masalah dalam pengembangan web yang lama
- Pola
propsdanstate, yang meneruskan data secara eksplisit dari elemen induk ke elemen anak, mengurangi jenis bug tertentu - UI, gaya, dan perilaku dibundel sebagai komponen, sehingga karya orang lain dapat dipasang dengan mudah ke codebase sendiri
- Pola
- Untuk mendapatkan manfaat ini, developer harus beralih dari cara yang terutama memakai HTML ke cara yang terutama memakai JavaScript
- JavaScript diperlakukan sebagai bahasa yang lebih kompleks
- Banyak konsep dan alat yang diperkenalkan React juga harus ikut dipelajari
- Industri menerima kompromi ini meskipun kompleksitas meningkat, dan library semacam ini menjadi cara default untuk membuat aplikasi web
- Developer baru sebelum React mempelajari HTML dan CSS terlebih dahulu, lalu JavaScript setelahnya
- Setelah React, alurnya berubah menjadi mempelajari JavaScript dan React terlebih dahulu, baru sisanya
Titik peninjauan ulang yang muncul dari peningkatan platform web
- W3C, WHATWG, IETF, dan TC39 menambahkan ribuan peningkatan pada bahasa native web selama pendekatan React menyebar luas
- Peningkatan ini diintegrasikan ke Chrome, Safari, Firefox, dan Edge
- Banyak di antaranya secara langsung menangani sebagian alasan orang menggunakan React
- Seiring naiknya biaya pengembangan software dan peningkatan browser tersebar luas, makin banyak orang bertanya apakah lapisan tambahan itu masih diperlukan saat ini
- Gagasan HTML First masih termasuk minoritas di industri
- Pendekatan ini berfokus membantu orang yang sudah tertarik pada pengembangan berpusat pada HTML untuk memperkuat pemikiran mereka sendiri dan memperoleh bahasa serta konsep untuk berkomunikasi dengan rekan kerja
- Pesan intinya adalah bahwa membuat software web yang indah, cepat, mudah digunakan, dan aksesibel dengan terutama memakai bahasa dan fitur native web adalah hal yang mungkin, praktis, dan masuk akal
1 komentar
Pendapat Hacker News
Saya suka idenya, tetapi jujur saja contohnya agak lemah
Contoh pada bagian “jika memungkinkan, definisikan gaya dan perilaku sebagai atribut HTML inline” tampaknya tidak benar-benar berfungsi, dan jika ingin menambahkan lebih banyak gaya, strukturnya hanya membuat parameter string yang diberikan ke
ClassList.addterus membesarSecara pribadi, menurut saya
button:active { background: green; }jauh lebih mudah dibaca, tetapi penulis sepertinya menganggap ini rumit karena pendekatan “Locality of Behaviour”Saya setuju dengan pernyataan “jika membutuhkan library, gunakan library yang memanfaatkan atribut HTML, bukan yang berpusat pada JavaScript atau sintaks kustom”, tetapi contoh yang direkomendasikan, “on input put me into #output”, terasa lebih canggung daripada library yang dijadikan contoh buruk, dan rasanya JavaScript tanpa framework pun sudah cukup
Sebagai contoh untuk “lebih sukai HTML ‘mentah’ daripada lapisan tersembunyi yang dikompilasi menjadi HTML”, penulis mengatakan jangan memakai helper tag ERB Rails, padahal helper-helper ini menangani cukup banyak hal yang akan menjadi berantakan jika ditulis langsung dengan template minimal. Contohnya melewatkan bagian-bagian realistis seperti ID DOM unik, tag Turbo, dan iterasi
Pengaturan gaya dan perilaku harus dipisahkan, dan pada skala yang bermakna, satu-satunya cara yang masuk akal untuk menghubungkan keduanya adalah melalui referensi
Secara teknis, kita bisa memasukkan semua koneksi database SQL dan SQL yang di-hardcode dalam satu file panjang di sebuah aplikasi Python, tetapi itu kebiasaan buruk; prinsip ini terlihat serupa
Bagian ini membingungkan: “jika membutuhkan library, gunakan library yang memanfaatkan atribut HTML, bukan yang berpusat pada JavaScript atau sintaks kustom”
Namun contoh yang direkomendasikan adalah _hyperscript [0]. Ini adalah library yang berpusat pada sintaks kustom, hanya saja skrip dalam bahasa baru yang harus dipelajari dimasukkan ke dalam atribut HTML. Saya tidak tahu apakah ini serius
[0] https://hyperscript.org
Contohnya juga cukup lemah. Solusi murni, yaitu hanya tip pertama, juga bekerja sama baiknya
_benar-benar terlihat aneh dan membingungkanLebih baik memasukkan pernyataan JavaScript murni ke dalam
onclickyang eksplisit atau atribut event lain, sehingga langsung jelas apa yang terjadiSaya paham maksudnya. Menggunakan fitur bawaan HTML itu rapi dan sederhana
Namun 10 tahun lalu pun itu tidak praktis, dan sekarang juga masih begitu. Saya juga tidak merasa sesuatu seperti htmx secara khusus lebih baik daripada solusi yang lebih berat seperti React
Setiap kali melihat pendekatan seperti ini, pertanyaan saya selalu sama. Seperti apa dropdown, multi-select, dan date picker-nya? Apakah date picker muncul di tiap browser? Ya. Apakah tampilan dan perilakunya konsisten di tiap browser? Tidak. Bisakah disamakan dengan styling? Juga tidak
Multi-select juga serupa. Mengharuskan pengguna melakukan Shift/Ctrl-klik untuk memilih banyak item benar-benar tidak layak dari sudut pandang pengalaman pengguna. Elemen bawaan masih bekerja seperti itu dan tidak bisa diubah. Bukan hanya multi-select, elemen select biasa pun tampilannya buruk dan umumnya sulit diubah
Ada alasan mengapa komponen pihak ketiga seperti ini muncul di setiap framework baru. Karena elemen bawaan saja tidak cukup. Ini sama seperti meskipun halaman Array di MDN menambah fitur bawaan setiap tahun, 90% proyek saya masih bergantung pada lodash. Memang sudah lebih baik dibanding 10 tahun lalu, tetapi masih kurang
Pengguna bisa memakai browser yang berbeda-beda, tetapi satu pengguna kemungkinan besar memakai browser yang sama di semua situs web yang ia kunjungi
Jadi menurut saya, lebih penting date picker konsisten di semua situs web dalam satu browser daripada konsisten di semua browser pada satu situs web. Tentu saja ceritanya berbeda jika membutuhkan fitur kustom
Saat ingin memilih 10 atau 15 item berurutan dalam daftar, untuk saat ini saya belum tahu UI yang lebih baik daripada Shift+klik
Daripada setiap komponen UI di semua situs web menciptakan gaya bodohnya sendiri, akan jauh lebih baik jika, di luar desain situs sebenarnya, semuanya mengikuti look and feel native browser. Tentu saja browser harus peduli untuk membuatnya terlihat bagus
inputterkenal karena cara interaksinya sangat berbeda antar-browser, sedangkan sebagian besar elemen HTML lain memiliki perilaku representatif yang sudah ditetapkanSaya setuju dengan sebagian besar argumennya, tetapi tulisan ini terasa agak kontradiktif. Karena merekomendasikan Tailwind sekaligus mengatakan “hindari tahap build”
Mendistribusikan resource CSS/JS yang sangat besar juga bertentangan dengan prinsip inklusivitas. Banyak orang tidak punya internet cepat atau komputer yang cukup kuat
Sebenarnya saya sama sekali tidak tahu JavaScript sisi klien apa yang dikeluarkan Tailwind. Pengalaman terakhir saya adalah 2.x, jadi saya tidak yakin apakah ada yang berubah
Untuk ukuran CSS pun pengalaman saya justru sebaliknya, output Tailwind biasanya jauh lebih kecil daripada CSS yang ditulis tangan
Tentu saya juga tidak menentang CSS murni, tetapi membuatnya berantakan setidaknya sama mudahnya
Namun sejauh yang saya ingat, ia tidak menyediakan semua fitur yang diberikan Tailwind penuh. Secara umum, Fresh sebenarnya dibangun cukup banyak di atas Preact dan Twind, dan saya merasa frustrasi karena hal itu tidak diungkapkan secara jujur bahwa kita harus menerima library-library itu terlebih dahulu
Saya cukup setuju bahwa merekomendasikannya dalam konteks tulisan ini agak aneh, tetapi tahap build bisa dibuat sangat minimal, dan bagus juga bahwa hasilnya tetap berupa CSS yang bisa diperiksa
Saya memakai Tailwind di situs pribadi, sementara sisanya sepenuhnya HTML murni. Menjalankan CLI dalam mode watch saat menulis style tidak terlalu mengganggu
Keduanya sangat cepat dan dapat mem-parse lebih dari 10.000 item
Menarik secara teori atau contoh sederhana, tetapi saya ingin melihat proyek besar yang menerapkan ini dan perbedaan nyata apa yang dihasilkannya
Sasaran di bagian awal tulisan sangat bagus, tetapi sarannya sendiri agak mengecewakan. Sulit membayangkan bagaimana ini akan bekerja di luar situasi yang sangat dasar, apalagi bagaimana sasaran-sasaran itu akan tercapai
Saya setuju untuk memanfaatkan platform web semaksimal mungkin, dan sepenuhnya setuju untuk mengurangi kompleksitas sejauh mungkin. Namun saya sangat skeptis bahwa prinsip-prinsip ini akan mencapainya; malah tampak bisa menambah kompleksitas dengan menciptakan beberapa cara untuk melakukan hal yang sama
Dengan niat baik, dari daftar ini saja tidak jelas apakah prinsip-prinsip ini sudah benar-benar diuji dalam praktik atau hanya diasumsikan akan bekerja seperti yang diharapkan
Ini pertanyaan tulus. Orang sering mengajukan argumen ini, dan saya selalu tidak memahaminya
Dari sudut pandang saya, 95% web adalah proyek kecil hingga menengah. Sebagian besar teknologi seharusnya berfokus pada ini. Pakai solusi sederhana untuk proyek sederhana, lalu tambahkan kompleksitas belakangan
Salah satu hal yang agak objektif yang kami hilangkan adalah aksesibilitas. Karena link dengan polosnya diimplementasikan ulang sebagai div yang diberi event listener klik, sebagian besar situs tidak bisa dinavigasi dengan keyboard
Ini cukup mengkhawatirkan. Jika regulasi datang, kami akan kelabakan berusaha mengembalikan apa yang sudah kami buang
Meski begitu, saya cukup setuju bahwa sulit menemukan contoh situs terkenal yang “HTML first”. Saya percaya pada pendekatan ini, tetapi belum melihat contoh nyata yang berjalan dengan baik. Namun alasannya mungkin murni soal pendidikan. Ketika HTML sudah menjadi kuat, pendidikan pengembangan frontend sudah telanjur sangat mengakar pada framework
Sepertinya penulis belum benar-benar pernah melakukan ini pada proyek yang melibatkan lebih dari dua orang dan mendukung 99% browser yang ada. Selain itu, tampaknya ia juga tidak menjalankan kodenya sendiri. Mungkin layar saya saja yang tidak enak, tetapi
onlickbukan handler untuk divJika kita membuat produk yang tampak berfungsi tetapi sebenarnya tidak, mereka tidak akan memahaminya. Lalu kita terdorong ke jalan overpromise dan underdeliver
Salah satu manfaat unit test yang kurang dikenal adalah memberi lebih banyak jaminan kualitas sebelum kode yang tidak bisa dilihat manajemen disambungkan. Ini mempersempit fase canggung antara tampilan pertama muncul dan rilis
Pada 1999 saya membuat situs web pertama saya dengan HTML murni, CSS, dan JS murni, lalu meng-host-nya di Geocities
Setelah itu saya membuat situs dan aplikasi dengan PHP/WordPress/Yii/Laravel, Ruby/Rails/Sinatra/Jekyll, React/Typescript, dan ClojureScript
Sekarang React, komponen TSX, CSS-in-TS, Effects, dan Context terasa seperti rumah yang nyaman. Rasanya akhirnya kita punya bahasa pemrograman lengkap untuk web/frontend. Bahasa yang dibuat secara eksplisit untuk frontend di atas prinsip modern seperti pemrograman fungsional dan reaktif
Baru sekarang saya merasa bisa melakukan pengembangan perangkat lunak. HTML, CSS, JS murni, dan PHP sebelumnya lebih terasa seperti hacking. Rails bagus untuk full-stack, tetapi tidak bersinar di frontend
Kalau web stack sudah siap juga untuk aplikasi, saya akan melewatkan framework. Untuk saat ini saya akui mungkin sudah cukup untuk situs
Tahun ini saya menyerah. Sekarang sudah mustahil terus bertarung melawan monster React, Vue, Angular dengan bundler, transpiler, dan segala macam pernak-pernik ikutannya
Node dan npm melemparkan pesan bahwa bahkan proyek yang baru dibuat beberapa detik lalu punya “7 kerentanan serius dan 8 kerentanan kritis”. Harus mengunduh ribuan file, dan di dalamnya bisa saja ada hal-hal seperti wrapper nilai boolean
Rasanya masa ketika server backend Python juga sekaligus menyajikan frontend sudah berakhir bagi saya
Sebenarnya Anda, maupun siapa pun, tidak benar-benar membutuhkan pembengkakan frontend JavaScript yang berat. Tinggal tolak saja
Sajikan halaman ringan dari backend atau cache, dan jika benar-benar perlu, tangani hal-hal keren dengan CSS
Sambut waktu render yang cepat dan aksesibilitas global
Tapi jujur saja, contoh-contoh di tulisan ini aneh. Saya tidak mengerti kenapa harus menulis tag murni sendiri alih-alih memakai helper form Phoenix yang otomatis mencetak error dan berbagai fitur kenyamanan. Saya paham semangatnya
Argumen intinya tampaknya adalah bahwa pengguna harus bisa menekan View Source dan memahami apa yang terjadi. Untuk situs web, saya setuju
Untuk webapp, setidaknya yang lebih dari 50 baris, kemungkinan besar Anda akan ingin memakai bahasa bertipe. Secara teknis, Anda juga bisa memakai
.jsdengan anotasi tipe dalam komentar khusus dan compiler TypeScript, tetapi itu tidak terlalu menyenangkanDulu saya cukup kuat tertarik pada gagasan ini, dan sedih melihat kebanyakan situs sekarang berupa satu gumpalan HTML sebaris yang tidak bisa dibaca. Ada keindahan dan keanggunan dalam mendistribusikan semuanya sebagai satu file HTML tanpa dependensi. Cukup 1 network request
Pada akhirnya saya memang membuat “build system” demi kemudahan pengeditan, tetapi build system saya adalah
cat. Jadinya seperti software portabel yang self-contained dalam satu file yang bisa dibaca manusiaDalam konteks yang sama, hal paling keren dari pengembangan web adalah Anda bisa membuat program interaktif pertama hanya dengan Notepad dan browser bawaan. Cukup seret file HTML ke browser. Rasanya seperti sihir
Tambahan: saya menemukan kelebihan tak terduga dari HTML yang self-contained. Software menjadi kebal terhadap bit rot. Saat saya membuka proyek lama di Web Archive, file JS eksternalnya tidak tersimpan. Sedih. Sebaliknya, yang ini memuat dengan baik karena semua JS ada di dalam HTML. Menang
https://web.archive.org/web/20210508133239id_/https://andai....
Ini adalah homage untuk SodaPlay Constructor lama. Saya tidak sempat membuat editornya. Bebas lihat source-nya
Ada tampilan DOM, tab network, tampilan heap, dan fitur bawaan untuk mempercantik tampilan JavaScript
Tentu saja “view source” masih penting, tetapi saya ragu apakah kepentingannya masih semutlak yang dikatakan orang-orang HTMX
Sekarang ada URL
data:, jadi ini makin mudah. Ini juga berguna untuk menghindari masalah URLfile://yang bahkan tidak membutuhkan server HTTPhttps://github.com/tc39/proposal-type-annotations
“Lokalitas perilaku” adalah aturan yang didefinisikan terlalu longgar. Itu hanya menamai ulang sesuatu yang bertentangan dengan pemisahan kepentingan
Menyebut CSS sebagai aksi menyeramkan dari kejauhan juga terlalu berlebihan. Ada prinsip-prinsip yang bagus, tetapi argumennya cukup lemah, dan sebenarnya bisa disampaikan jauh lebih sederhana
Jika untuk “mengubah tombol merah yang memantul menjadi tombol biru yang bergoyang” kita harus menelusuri labirin 3–7 interface dan class untuk mencari class mana yang perlu implementasi baru dan mana yang bisa digunakan ulang, pekerjaan yang terdengar seperti perubahan 10 menit berubah menjadi setengah hari mengumpat dalam hati kepada compiler atau developer sebelumnya
Tentu saja abstraksi tetap perlu, tetapi juga harus ada cara mengelompokkan perilaku di satu tempat agar tidak perlu menyentuh 6 file hanya untuk memodifikasi satu komponen
https://htmx.org/essays/locality-of-behaviour/#conflict-with...
Menggunakan Tailwind berarti mempercayai bahwa library pihak ketiga mengabstraksikan spesifikasi CSS untuk kita, dan bahwa semi-spesifikasi yang diabstraksikan itu akan dipatuhi sesuai konfigurasi build
Apa yang harus dipisahkan? Di sepanjang garis apa kita membaginya? Bagaimana menentukan garis itu? Kapan layak memindahkan suatu kepentingan ke class, framework, markup, dan sebagainya yang berbeda? Kapan lebih baik membiarkannya tetap berdekatan?
Jawabannya adalah “tergantung situasi”
Jika tidak memisahkan apa pun, hasilnya menjadi spaghetti; jika selalu memisahkan semuanya semaksimal mungkin di mana pun, hasilnya menjadi kode yang terlalu diabstraksikan dan sama sulitnya dipelihara seperti spaghetti
Jika default-nya bekerja dengan baik, kustomisasi bukan keharusan. Karena itu, keuntungan efisiensi dari CSS dan semacamnya ditempatkan di belakang kesederhanaan
Jika HTML dilihat sebagai bahasa dokumen/presentasi, styling tidak bisa disangkal. CSS tidak hanya menambahkan styling, tetapi juga animasi
Bagaimanapun, CSS juga bisa dilihat sebagai pemrograman berorientasi aspek
Masalah sebenarnya yang digambarkan di sini adalah kurangnya tooling yang baik lintas bahasa dan framework
Mengandalkan framework yang lebih sederhana saat memungkinkan memang masuk akal. Namun gagasan menghapus tahap build nyaris seperti lelucon total
Buat saja tahap build lebih efisien, dan jika perlu jangan sertakan di production
Saya juga tidak paham kenapa menambahkan atribut ke HTML harus diprioritaskan. Apakah tujuannya membuat dokumen lalu menghostingnya sebagai website? Di dunia lain mana lagi hal itu lebih disukai? CSS tidak sulit dinavigasi, dan justru praktik CSS yang lebih baik seharusnya didorong
Script frontend memang bisa mengaburkan styling, tetapi jika tidak perlu, jangan bergantung pada cara itu. Menaruhnya di dokumen style lebih mudah daripada memasukkan atribut dengan JavaScript, jadi itu sudah jelas
Sebagian nasihat seperti memakai hanya yang dibutuhkan memang masuk akal dan jelas. Namun sisanya membingungkan atau terang-terangan absurd. Saya juga tidak mengerti kenapa kemampuan menyalin seluruh halaman HTML diasumsikan sebagai hal yang baik. Jujur saja saya tidak peduli, dan meskipun HTML beberapa halaman tidak bisa dilihat, sudah ada secara harfiah jutaan resource untuk belajar HTML
Secara umum, ini membuat saya mengernyit bingung
Seluruh tulisan ini adalah antipola dan nasihat buruk. Rasanya seperti ditulis oleh seseorang yang belum pernah mengalami growing pains saat membangun website yang kompleks
Awalnya kami juga membuat website seperti ini, tetapi kemudian mulai rusak karena efek samping, nama class yang bertabrakan, dan observabilitas internal yang buruk, lalu React datang menyelamatkan
Pola yang diinginkan adalah peningkatan progresif, dan output-nya harus berupa HTML yang bersih dan terkompresi, sementara JavaScript memperkaya HTML tersebut. Artinya, tahap build diperlukan. Ini kebalikan dari nasihat dalam tulisan ini
Jika di backend belum memakai NodeJS, sebaiknya hindari ReactJS kecuali saat benar-benar diperlukan