Saatnya Memperkenalkan API Templating DOM
(justinfagnani.com)- Platform web telah menjadi runtime aplikasi dinamis, tetapi DOM standar tidak memiliki API templating deklaratif yang menangani data, event, properti, pertahanan XSS, dan pembaruan efisien secara terpadu
- Framework modern seperti React, Vue, Angular, Lit, Svelte, dan SolidJS menjadikan sistem templating yang menggabungkan markup dan data sebagai inti, dan ini memengaruhi keterbacaan, keamanan, performa, analisis statis, serta server-side rendering
- E4X, E4H, dan tag literal template
htmlbawaan di masa lalu membantu pembuatan DOM, tetapi tidak menyelesaikan pembaruan DOM; kini tagged template literals dan pengalaman framework menyediakan dasar untuk standardisasi - API berbasis JavaScript memiliki cakupan lebih kecil dibanding standardisasi JSX atau template berbasis HTML, dan dengan menjadi target kompilasi untuk transformasi JSX, API ini dapat berlanjut ke template HTML dan custom element deklaratif di kemudian hari
- Jalur usulan ini terkait dengan mekanisme tingkat bawah seperti DOM Parts, template identity, Signals, dan scheduler DOM, serta dapat menyediakan fondasi bersama bagi developer vanilla, pengguna Web Components, dan implementor framework
Lapisan templating deklaratif yang tidak ada di DOM standar
- Platform web adalah runtime aplikasi paling sukses dalam sejarah, dan DOM API adalah fondasi yang mengubah penampil dokumen statis menjadi runtime yang dinamis dan ekspresif
- Bahkan aplikasi kompleks seperti Photoshop tersedia sebagai aplikasi web, dan DOM merupakan API yang kuat sampai-sampai seluruh UI dapat dibuat dengan Web Components
- Namun, DOM API standar saat ini tidak memiliki cara nyaman untuk menangani pekerjaan berikut sekaligus
- Membuat potongan node DOM dari data
- Menambahkan event listener
- Mengatur properti elemen
- Memastikan keamanan terhadap serangan XSS
- Memperbarui potongan DOM tersebut secara efisien dengan data baru
Nilai template yang sudah dibuktikan oleh framework
- Framework web modern dan library rendering menggunakan template yang menggabungkan markup dan data secara deklaratif sebagai fitur inti
- Termasuk React, Vue, Angular, Preact, Lit, Svelte, SolidJS, Stencil, Quik, Ember, FAST, Polymer, Marko, dan lainnya
- Template deklaratif lebih mudah ditulis dan dibaca dibanding DOM API imperatif
- Interpolasi, event listener, dan pengaturan properti berada dekat dengan template, sehingga lokalitas perilaku lebih mudah dipertahankan
- Sistem templating dapat melakukan escape otomatis pada nilai interpolasi, sehingga menguntungkan untuk pertahanan XSS
- Sistem templating yang baik dapat lebih cepat daripada sebagian besar kode manual karena hanya memperbarui DOM yang perlu diubah
- Banyak sistem templating mendukung analisis statis seperti pemeriksaan tipe dan autocomplete
- Definisi template deklaratif dapat diinterpretasikan di luar lingkungan browser penuh, sehingga server-side rendering yang efisien menjadi memungkinkan
Biaya yang timbul karena ketiadaan template
- Platform masih belum secara langsung memenuhi kebutuhan inti dari hampir semua aplikasi web
- Seperti API internasionalisasi, Temporal, Scheduler, dan Sanitizer, template juga layak diperlakukan sebagai fitur platform standar
- Pengguna terdampak oleh waktu unduh aplikasi, overhead rendering, dan aplikasi dengan keamanan lemah
- Kode library templating dalam kasus terbaik bisa beberapa kB, dan dalam kasus terburuk bisa lebih dari 100 kB
- Bahkan beberapa kB pun dapat menjadi porsi besar dalam anggaran rendering interaktif awal
- Developer harus bergantung pada library, npm, dan CDN bahkan untuk pekerjaan dasar
- Kegunaan file statis sederhana dan DevTools berkurang
- Tidak ada pengetahuan templating dasar yang portabel antar-stack
- API pembuatan DOM native seperti
innerHTMLpada dasarnya tidak aman
- Framework dan library templating harus melakukan kompromi sulit antara kemudahan penulisan, kecepatan rendering, kecepatan pembaruan, keamanan, dan ukuran kode
- Platform web bersaing dengan platform native seperti Flutter, SwiftUI, dan Jetpack Compose
- Platform-platform ini menyertakan sistem mirip template secara bawaan, menggunakan instalasi aplikasi dan bahasa terkompilasi, serta kurang sensitif terhadap ukuran bundle beberapa kB
Mengapa bisa dicoba lagi sekarang
- Di masa lalu juga pernah ada usulan platform yang mendekati template
- E4X benar-benar pernah disertakan di Firefox dan Flash
- E4H adalah ide yang disederhanakan oleh Ian Hixie
- Sekitar 2012 juga ada prototipe tag literal template
htmlbawaan
- Upaya-upaya masa lalu membantu pembuatan DOM, tetapi sulit menjadi solusi yang memadai karena tidak menyelesaikan pembaruan
- Saat ini, framework telah menciptakan cukup banyak kasus penggunaan, dan solusi templating di userland juga semakin mirip dari waktu ke waktu
- Ada kebutuhan akan manipulasi DOM yang nyaman dan API reaktivitas dari developer yang tidak memakai framework serta komunitas Web Components
- Usulan primitif pembaruan DOM tingkat rendah seperti DOM Parts sedang berjalan
- API templating deklaratif tingkat lebih tinggi dapat mengurangi beban implementasi framework, sekaligus memvalidasi dan melengkapi usulan API tingkat rendah
Kesamaan umum dalam sintaks dan semantik
- Sebagian besar sistem templating client-side populer berbagi struktur yang menggabungkan markup dan binding
- Pemisah ekspresi, control flow, dan penanda tipe binding sedikit berbeda, tetapi kesamaannya lebih besar
- Ada kemiripan juga antara Vue, Angular, dan Svelte yang berbasis HTML dengan React, Lit, dan Solid yang berbasis JavaScript
- Dalam API berbasis JavaScript, template biasanya berupa ekspresi, komposisi dilakukan dengan menumpuk atau mereferensikan ekspresi template, dan control flow ditangani oleh JavaScript
- Banyak sistem berbasis API JavaScript mengembalikan deskripsi DOM dari ekspresi template, lalu menerapkannya melalui pemanggilan fungsi
renderterpisah- Sebagian besar memperbarui DOM dengan pemanggilan
renderyang sama - Sebagian lainnya menghindari pendekatan ini dengan reaktivitas yang halus
- Sebagian besar memperbarui DOM dengan pemanggilan
- E4X dan E4H menambahkan sintaks baru untuk memasukkan markup ke JavaScript seperti JSX, tetapi mengembalikan potongan DOM itu sendiri, bukan deskripsi DOM
- Ini baik untuk pembuatan DOM awal, tetapi pembaruan tetap bersifat imperatif
API yang bisa diekspresikan dengan JavaScript hari ini
- JavaScript sudah memiliki tagged template literals untuk DSL tertanam seperti HTML
- Template dapat diekspresikan dalam DOM API tanpa menambahkan sintaks JavaScript baru
- Library populer menunjukkan bahwa pendekatan ini bekerja dengan baik
- Fakta bahwa usulan dapat berjalan tanpa sintaks baru penting bagi realitas standardisasi
Hubungan JSX dan API template native
- Tagged template literals adalah fitur kuat dari ES2015, tetapi dalam sistem komponen userland, overhead sintaksnya lebih besar daripada JSX
- JSX populer, tetapi hanya memiliki sintaks dan tidak memiliki semantik runtime
- Untuk menstandardisasikannya, semantik harus didefinisikan, bukan sekadar menambahkan sintaks baru
- Pendekatan yang memperlakukannya sebagai pemanggilan
createElement()yang didefinisikan di sekitar harus dikesampingkan - Pendekatan membuat pohon objek dapat mencampur bagian statis dan dinamis, sehingga menghambat pola pembaruan yang lebih efisien
- Jika usulan Records and Tuples berjalan, JSX mungkin bisa membuat Records yang memiliki box, tetapi usulan tersebut mandek terutama pada bagian record identity dan box
- Untuk memverifikasi apakah sintaks dan semantik seperti JSX cocok untuk template DOM yang lengkap, diperlukan sistem template target
- Template React tidak memiliki cara untuk secara eksplisit melakukan binding ke properti dan event elemen DOM, atau menerapkan directive pada elemen
- JSX nonstandar saat ini adalah sintaks murni tanpa semantik runtime, sehingga compiler yang mengubah JSX menjadi tagged template literal dapat dibuat
- Contoh seperti JSX-to-Lit sudah ada
- API template native dapat menjadi target kompilasi yang memungkinkan developer memilih sintaks yang mereka inginkan
Mengapa melihat API JavaScript lebih dulu daripada template berbasis HTML
- Banyak developer web menginginkan sistem template berbasis HTML yang berfitur lengkap
- Ada permintaan dari komunitas pengguna Web Components, pengguna framework, dan developer vanilla
- Ada juga developer yang berharap elemen
<template>, declarative shadow DOM, dan Web Components menyediakan fungsi semacam ini
- Template berbasis HTML merupakan pekerjaan yang jauh lebih besar daripada API berbasis JavaScript
- Sintaks binding
- Bahasa ekspresi
- Sintaks control flow
- Mekanisme pembaruan template
- Juga belum ada cara native untuk memuat definisi template berbasis HTML
- HTML Imports dari Web Components v0 telah hilang, dan HTML Modules belum ada
- Jika template HTML harus dimasukkan ke dalam modul JavaScript, penilaiannya adalah lebih baik memakai ekspresi JavaScript dalam lexical scope yang sama dengan data
- Polymer 3 memindahkan template HTML Polymer 2 ke JavaScript, dan ini berlanjut langsung menjadi Lit
- Membiarkan JavaScript menangani hal-hal seperti script menghasilkan kode yang lebih sedikit dan pengalaman yang lebih baik
- API JavaScript dapat menjadi subset sekaligus batu loncatan untuk API berbasis HTML
- Setelah API JavaScript masuk dan tervalidasi, API HTML tinggal mendefinisikan binding, ekspresi, control flow, dan sistem modul
Pilihan model reaktivitas
- Usulan awal template DOM tidak mencakup pembaruan, tetapi sistem userland telah cukup mengeksplorasi model reaktivitas dan pendekatan implementasi
- Pendekatan reaktivitas utama dapat dikelompokkan menjadi tiga
- VDOM dan diffing dari React
- template identity dari Lit
- Signals dan reaktivitas halus yang digunakan di Solid, Svelte, Vue, Angular, dan lainnya
- Diffing mudah dipahami dan bekerja untuk data apa pun, tetapi lebih lambat daripada pendekatan lain
- Perbedaan algoritme diffing dapat teramati
- Sulit untuk menstandardisasi satu algoritme diffing dan membuat engineer platform menerima overhead-nya
- Template identity adalah pendekatan memperbarui DOM jika DOM saat ini dirender dengan template tersebut, atau menggantinya jika tidak
- Cepat, dan dalam banyak kasus penggunaan menghasilkan hasil yang sangat mirip dengan diffing
- Cocok dengan tagged template literals, transformasi JSX, dan template berbasis HTML
- Semantiknya sederhana sehingga lebih mudah dispesifikasikan
- Signals adalah model yang layak dimasukkan dalam API DOM reaktif baru dan API templating
- Ada usulan JavaScript Signals, tetapi belum menjadi fitur native platform dan adopsinya tidak dijamin
- Sistem berbasis Signals bekerja paling baik ketika semua data dibungkus sebagai signal
- Karena ada banyak data non-signal dan API platform yang tidak membuat signal, re-rendering adalah cara mudah untuk mencerminkan perubahan semacam itu
- Template identity dan Signals dapat hidup berdampingan
- Template yang hanya menerima signal pada binding dapat diperbarui hanya dengan signal tanpa re-rendering
- Template yang dapat merujuk data non-signal memerlukan re-rendering
- Biasanya re-rendering dilakukan otomatis oleh lapisan komponen atau framework, seperti properti komponen reaktif
Diskusi standardisasi dan tugas yang tersisa
- Diskusi API templating JavaScript deklaratif native dimulai di WICG webcomponents#1069
- API ini dapat menjadi langkah berikutnya yang logis bagi API pembuatan DOM
- Menjadi primitif pembuatan DOM yang mudah ditulis dan aman bagi developer web vanilla
- Langsung berguna bagi library Web Components yang sudah ada seperti Lit, FAST, dan HyperElement
- Berguna bagi pengguna API Web Components mentah, dan menjadi batu loncatan menuju API definisi komponen reaktif yang lebih lengkap
- Framework baru dapat dibuat di atas API ini
- Framework yang sudah ada dapat menggunakannya sebagai target kompilasi, backend runtime, atau target dukungan langsung
- Berguna baik untuk teknik re-rendering maupun Signals
- Menjadi batu loncatan menuju template HTML deklaratif dan custom element deklaratif
- Permukaan API yang perlu disepakati dan dispesifikasikan relatif kecil
- Membantu mendefinisikan semantik template
- Pekerjaan ini terkait dengan penyelesaian usulan DOM Parts
- Juga berkontribusi untuk mendefinisikan DOM Parts dan membuktikan kegunaannya
- Permukaan API dan sintaksnya tidak besar, tetapi ruang perilaku dan API DOM Parts di bawahnya besar
- Reaktivitas halus juga memerlukan suatu bentuk scheduler DOM
- Ada banyak hal yang harus diputuskan, disepakati, dispesifikasikan, dan diuji, sehingga kolaborasi diperlukan
- Developer yang tertarik dapat meninggalkan komentar di webcomponents#1069 atau menghubungi melalui Bluesky
1 komentar
Pendapat di Hacker News
Pernyataan “kita tahu seperti apa sintaks yang baik untuk template” sampai membuat saya tertawa. Menurut saya kita sama sekali belum tahu. Template yang baik hampir pasti lebih dekat ke alat visual daripada sintaks simbolik; itulah sebabnya alat seperti Dreamweaver dulu berhasil, dan desainer belajar dengan alat seperti Photoshop
Selain itu, sayang sekali ini terlihat seperti upaya membuat ulang XSLT. Pada akhirnya pasti ada orang yang ingin membuat template untuk potongan-potongan yang tidak well-formed, tetapi ketika digabung menjadi sesuatu yang well-formed. Hal yang sama berlaku untuk entitas yang saling terhubung di dalam halaman tetapi tidak berada dalam tree yang sama. Contoh mudahnya adalah
labeldanfordalam markup biasaKalau bisa, saya berharap upaya memaksakan semua template agar sesuai dengan mesin Rube Goldberg bernama layout dokumen standar dalam markup berkurang. Orang-orang mengambil jalan yang luar biasa rumit untuk meniru sesuatu yang sebenarnya bisa bekerja cukup baik jika absolute positioning digunakan dengan hati-hati. Untuk menyesuaikannya mungkin memang perlu perhitungan, tetapi saya tidak mengerti mengapa mesin harus dipaksa terus-menerus mengulang perhitungan itu untuk data yang sama
Sayang sekali XML sempat populer di tempat-tempat yang kurang tepat seperti konfigurasi dan komunikasi antarproses, tetapi justru meredup di tempat ia bisa bersinar sebagai bahasa markup dengan kemampuan transformasi hebat bernama XSLT
Menurut saya titik runtuh XSLT adalah bahwa ia benar-benar sebuah DSL, tepatnya DSL yang deklaratif, murni, dan fungsional. Orang-orang sering memuji DSL setinggi langit, tetapi dalam praktiknya DSL sering kali hanya menjadi permainan sintaks sederhana yang gagal mengabstraksikan semantik prosedural dari bahasa host yang populer. Ketika bertemu DSL yang dirancang baik dan membuat hal sulit menjadi sepele, orang-orang tidak mau mempelajarinya
Saya juga heran mengapa absolute positioning dibahas. Saya sering melihat pembicaraan seperti ini di HN; tentu saja absolute positioning punya tempatnya dan dalam banyak kasus memang diperlukan
Namun jika dipakai untuk layout halaman atau aplikasi, berdasarkan pengalaman, kebanyakan akan menjadi mimpi buruk yang runtuh hanya karena konten atau ukuran layar berubah sedikit. Bahkan layout koran cetak pun tidak bisa dilakukan seperti itu karena tipografinya saling terkait
Ketika saya banyak menangani CSS, jika saya mengambil alih pekerjaan dari seseorang yang sudah membuat layout “hampir selesai” dengan absolute positioning, memperbaikinya memakan waktu sangat lama, dan selalu lebih cepat membuat ulang dengan cara seperti flex atau normal flow. Sebab, jika absolute positioning dipakai sebagai alat layout utama, masalahnya praktis berada pada tingkat yang tidak bisa diperbaiki
Mungkin ada teknik yang masuk akal dengan
calc()dan satuan viewport, tetapi berdasarkan pengalaman, kecuali kontennya benar-benar statis dan ukuran viewport-nya juga statis, absolute positioning tidak cocok untuk layoutReact pada dasarnya adalah satu-satunya framework besar yang bekerja dengan cara fungsi JavaScript biasa mengembalikan representasi tertunda dari markup dalam bentuk JSX. React tidak memiliki konsep loop atau conditional rendering pada level template; itu ditangani dengan JavaScript biasa
Dan sekarang menurut saya kita memang tahu seperti apa sintaks template yang baik. Pada dasarnya itu adalah JSX. Saya bisa mengatakan itu meskipun saya sendiri tidak terlalu menyukai React. Sulit dibantah bahwa JSX telah menyapu seluruh web, diadaptasi untuk berbagai framework, dan sistem template JavaScript telah berkonvergensi pada ciri-ciri umum: memperlakukan template sebagai ekspresi, menyusunnya lewat nesting, dan menangani control flow dengan JavaScript itu sendiri alih-alih sintaks template tertentu
Pelajaran dasar yang berulang kali dipelajari adalah bahwa API/ABI bukanlah keadaan final. Kebutuhan aplikasi tidak akan terpenuhi selamanya oleh satu API yang stabil, dan semua masalah masa depan juga tidak bisa dilempar menjadi masalah level aplikasi.
Usulan ini menunjukkan dengan baik proses ketika masalah umum platform diselesaikan di lapisan yang lebih tinggi seperti React, lalu akhirnya turun ke bawah ketika diakui sebagai masalah. Polyfill juga contoh yang sama.
Jika usulan seperti ini berhasil, ia sempat mendapat perhatian, tetapi sebagian besar masa pakainya yang berguna berubah menjadi sesuatu yang usang yang ingin diakali orang. Begitulah nasib DOM API, versi ECMA, browser lama, dan semua teknologi berguna yang tidak bisa disentuh karena sudah menjadi bagian dari sistem.
Tidak bisakah kita memikirkan entropi, perluasan, dan kompatibilitas mundur sebagai use case utama?
Saya ingin platform web memiliki semua kemampuan yang mungkin dimiliki platform native. Tentu dengan tetap menjaga batasan privasi dan sandboxing. Dan saya juga ingin pengalaman pengembangan para web developer menjadi hebat.
Namun ini harus diseimbangkan dengan konsekuensi meningkatnya kompleksitas. Dalam kasus ini, saya tidak yakin template native benar-benar meningkatkan pengalaman pengembangan. Manfaatnya tidak tampak melebihi biayanya.
getElementByIdrasanya sudah stabil sekitar 25 tahun. Pernyataan “tidak ada yang namanya API stabil” adalah ucapan orang-orang yang tidak mampu atau tidak mau membuat antarmuka yang tahan lama. Itu bukan hukum alam semesta, lebih mirip kepasrahan pribadi. Ada sangat banyak contoh tandingan.Kebutuhan aplikasi itu tak terbatas, seperti kebutuhan lainnya. Kebutuhan itu dipenuhi bukan dengan merusak API yang sudah berfungsi, melainkan dengan menambahkan API baru.
Karena itu ada API yang sampai sekarang masih terseret kasus seperti
smooshgateakibat keputusan 20 tahun lalu: https://developer.chrome.com/blog/smooshgateWeb benar-benar membutuhkan template native, reaktivitas, dan data binding. Sulit membayangkan berapa banyak CPU dan bandwidth yang terbuang karena miliaran pengguna harus mengunduh, mem-parse, dan menjalankan sesuatu seperti React.
Bagian Signals mengatakan banyak hal, dan menunjukkan dengan baik bahwa idenya bagus tetapi secara praktis sulit.
Saya paham mengapa penulis menyukai Signals. Setiap proyek yang cukup besar punya pohon komputasi DAG yang setengah jadi, dan masuk akal jika bahasa menstandarkan salah satunya.
Namun abstraksi seperti ini memiliki biaya kognitif dan biaya implementasi yang besar.
Seperti kebanyakan rekayasa, masalahnya adalah kompromi. Model React memperbarui state global dan merender ulang semuanya, jadi lambat tetapi mudah dipahami. Model Signals cepat, tetapi membutuhkan terlalu banyak usaha.
Kebanyakan aplikasi tidak perlu secepat kilat, dan orang akan memilih React yang lebih sederhana.
Namun bukankah Signals tidak terlalu terkait dengan template? Kalau begitu mengapa harus memilih? Bukankah template dan Signals bisa dimiliki secara terpisah?
Saat memikirkan template, kita jadi perlu cara untuk memberi tahu DOM di mana menyisipkan node template, dan bagaimana memperbaruinya ketika berubah. Di titik inilah proposal-proposal seperti ini gagal.
API di sini harus memilih salah satu pihak. Secara teknis mungkin bisa mengizinkan keduanya, tetapi itu mengerikan. Para developer tidak akan pernah sepakat mana yang seharusnya dipakai.
Masalah besar UI selalu bukan bagaimana mendefinisikannya, melainkan bagaimana memperbaruinya. Microsoft mencoba mendefinisikan banyak model seperti MVC, MVP, MVVM, dan gagal; semuanya menyakitkan. Lalu imgui berkata, “bagaimana jika UI sama sekali tidak punya state?”, dan itu cukup bagus, tetapi membebani CPU.
Mungkin salah satu alasan terbesar keberhasilan aplikasi web adalah karena DOM tidak memaksakan cara mengikat data ke view. Karena itu mungkin kita sulit lepas dari neraka framework.
Yang saya sukai secara pribadi adalah ivi-js: https://github.com/localvoid/ivi
Ia hanya 8% lebih lambat daripada vanilla JavaScript tercepat, paling jelek, imperatif, dan tak mungkin dipelihara yang pada akhirnya bisa dicapai jika tujuannya semata-mata memenangkan benchmark.
https://krausest.github.io/js-framework-benchmark/2025/table...
Dibanding mengatakan kebanyakan aplikasi tidak perlu secepat kilat, saya lebih ingin orang mengakui bahwa aplikasi harus ringan.
Saya setuju orang memilih React karena lebih sederhana, tetapi justru karena alasan itulah saya tidak menyukai React.
Alih-alih mengadopsi JSX, saya berharap arahnya lebih dekat dengan cara Kotlin menyediakan sintaks yang digeneralisasi untuk DSL lewat receiver dan builder, dan sintaks itu juga cocok untuk mengekspresikan hierarki komponen
Ini akan berguna secara luas bukan hanya untuk template HTML, tetapi juga untuk mengekspresikan konfigurasi dan berbagai jenis struktur
Semantik aktual dari template dan data binding cukup diletakkan sebagai sekumpulan fungsi standar yang memakai fitur sintaks semacam itu, seperti yang terlihat di Jetpack Compose
Penting juga bahwa tulisan ini ditulis oleh salah satu orang yang paling berpengalaman di bidang ini. Ia adalah salah satu penulis utama Lit / Polymer, bekerja pada Web Components di Google, dan berkontribusi pada spesifikasi DOM inti yang menjadi bagian dari platform web
Safari sudah berargumen sejak 15 tahun lalu bahwa seharusnya ada cara deklaratif untuk ini
Saya penasaran apakah ada orang lain yang merasa template deklaratif sebenarnya lebih buruk daripada jQuery. Saya sudah memakai React hampir 10 tahun, tetapi semakin kompleks sebuah SPA, semakin saya ingin mengendalikan DOM secara langsung dan imperatif
Alasannya, DOM adalah abstraksi yang bocor, dan pada level tertentu terasa lebih baik jika penulisan terakhir yang menang
Saya tahu template deklaratif mencoba menangani itu, tetapi begitu kita mulai berbagi state yang dapat berubah antar-komponen, pendekatan ini runtuh dengan sangat cepat
ref, dan berani saya katakan, mencari komponen denganidlalu menanganinya langsung. Nyatanya pustaka-pustaka yang “cepat” dan minim re-render, misalnya pustaka form, melakukan hal seperti ituinnerHTMLdanrefKedua, saya tidak tahu pekerjaan apa yang bisa dilakukan dengan lebih tidak merepotkan jika DOM dikendalikan secara imperatif dibanding deklaratif. Yang terpikir hanya metode tertentu seperti
attachShadow(),showModal(), dan itu pun bisa dibuat deklaratif dengan membungkusnya dalam komponen 10 barisSetahu saya Ryan Carniato dan Solid JS masih mengeksplorasi apa yang mungkin dilakukan dengan Signals. Saya tidak menganggap eksplorasi userland di area ini sudah sepenuhnya selesai, dan inovasi tambahan masih mungkin terjadi
Saya suka arahnya, tetapi sebelum itu menurut saya beberapa API level lebih rendah perlu masuk ke browser lebih dulu
Hampir mustahil semua orang akan sepakat pada satu sistem template standar. Sebagai gantinya, yang bisa dilakukan browser adalah menyediakan API level rendah untuk menerapkan diff ke DOM secara native dan berkinerja baik
Akan sangat bagus jika browser memiliki hal seperti ini secara native
element.applyDiff(DocumentFragment | string, { method: 'innerHTML' | 'outerHTML' })Dengan cara ini, diff dapat diterapkan dengan cara yang minim gangguan, seperti mempertahankan fokus elemen, nilai input, status pemutar audio/video, dan mengubah atribut. Pustaka JavaScript seperti Idiomorph melakukan hal semacam ini, tetapi solusi native kemungkinan bisa jauh lebih cepat
Ini juga akan berguna untuk proyek tanpa framework, dan akan semakin berguna khususnya jika proposal Signals ikut diadopsi
Proposal Records and Tuples bukan sekadar mandek, melainkan sudah ditarik. https://github.com/tc39/proposal-record-tuple/issues/394
Posisinya digantikan oleh https://github.com/tc39/proposal-composites