Ngobrolin Web Components - Ngobrolin WEB Ep10
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. Topik, tautan dan pertanyaan menarik bisa dilayangkan ke https://bit.ly/ngobrolinweb Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.
0:15Selamat malam. Halo-halo semuanya.
0:19Ketemu lagi kita di Ngobrol Inweb Setiap Hari Selasa Malam
0:25dan malam hari ini formasinya lengkap, Ivan sudah kembali lagi, halo Ivan.
0:29Halo, baik-baik saja cuma agak kurang, apa namanya, kurang sehat ya?
0:37Kurang sehat, jadi ngomongnya akan pelan-pelan.
0:40Asik, semoga cepat fit lagi karena sabtu besok bakal ngisi DevFace Bogor.
0:48Bogor, betul.
0:51Oke, kalau saya sendiri baru pulang dari Surabaya,
0:56nah ini ada salah satu penggemar kita dari Surabaya, namanya Cator kemarin ketemu.
1:02Wah, halo-halo.
1:05Yes, dan kalau Eka berarti ngisi di Bali ya?
1:11Tunggu lalu di Jogja, kemarin ini di Bali, sekarang masih di Bali.
1:16Oh masih di Bali, oh iya, pantasan latar belakangnya itu.
1:20Makanya yang background-nya, backgroundnya keren ya.
1:23Working space, oke.
1:26Perlu visa nggak?
1:29Pake working visa gitu.
1:33Kira-kira bakal live di pinggir pantai gitu nggak ya?
1:38Ini ada, kita sapah-sapah dulu ya, ada Hello World,
1:43ini programmer sekali ya, ada Agno Ria, halo-halo.
1:49Dan seperti biasa, malam hari ini kita akan ngobrolin tentang teknologi web.
1:56Ya, dan tentunya malam hari ini seperti judul, kita akan bahas tentang web komponen.
2:03Ini adalah salah satu topik bahasan yang sempat ditanyakan juga oleh salah satu,
2:10ya, teman-teman di chat minta menjelaskan tentang web komponen.
2:16Oke, dan mungkin bisa saya mulai dulu ya, tentang web komponen itu apa.
2:23Kebetulan saya udah pernah bahas juga di DevFace tahun lalu, 2021, DevFace Jakarta.
2:29Masih online, jadi teman-teman masih bisa menikmati videonya,
2:36ada slide-nya juga nanti dibagikan.
2:38Tapi yang perlu dibahas di sini adalah, jadi web komponen itu adalah sebuah tools
2:46atau alat bantu untuk membuat user interface atau antarmuka aplikasi web, ya.
Lihat transkrip lengkap
2:51Tapi perbedaannya dengan framework atau library sejenis adalah dia platform agnostik,
2:59artinya tidak bergantung kepada framework, gitu.
3:03Jadi dia sudah tertanam...
3:05Dia bagian dari spesifikasi web itu sendiri ya, berarti?
3:07Ya, sudah tertanam di web browser-web browser modern yang teman-teman gunakan,
3:13itu sebenarnya sudah disediakan framework yang namanya web component,
3:16UI library yang namanya web components, jadi tinggal digunakan, gitu.
3:23Kita bisa, ya, seperti framework-framework yang teman-teman udah kenal ya,
3:28React itu kan komponen base ya, disebutnya ya, angular, komponen base,
3:33Vue.js bisa dibikin komponen juga, spelt juga, jadi kita...
3:38Kalau spelt itu kayak kita tulis file dengan extensi spelt,
3:43dia udah langsung jadi komponen, gitu kan.
3:45Nah, web component ini konsepnya juga sama, jadi HTML-HTML tag yang kita butuhkan,
3:51bisa kita bungkus sehingga kita bisa dipakai berulang-ulang, gitu.
3:56Misalkan teman-teman bikin apa ya, bikin apa ya contohnya ya?
4:01Counter lah, contoh standar, counter.
4:06Kalau counter kan biasanya dipakai sekali, yang dipakai berulang kali apa ya?
4:11- Misalkan kayak komentar, gitu. - Contoh misalnya post, ya, komentar, list,
4:15post card, post card, misalnya kayak ada, ada, ada, ada, ada, image, ada, ada Excel-nya,
4:23terus bisa dipakai berbagai, di macam tempat.
4:26Iya, misalkan ada di halaman ini ada, pada card, di halaman yang lain ada card,
4:31dengan isi atau konten yang berbeda itu bisa menggunakan web component,
4:35jadi tidak perlu copy-paste.
4:39Jadi web component itu encapsulasi dan the usable.
4:45- Betul. - Dan ini udah include, apa, lifecycle juga ya, lifecycle event,
4:50bisa buat client-site interactivity, jadi bedanya sama HTML elemen biasa kan,
4:55sebenarnya kalau cuma yang statik kan kita tinggal pakai aja button, misalnya kalau perlu link,
5:02tinggal pakai A, apa, kalau main A, kan udah cuma kalau kita butuh client-site interactivity
5:08dan event-event tertentu dan behavior yang custom, nah, berarti ini lebih cocok
5:15- sama custom elemen, ya? - Betul.
5:18Contohnya adalah, contohnya adalah, nih, saya punya contoh, adalah sebuah input
5:25dengan tipe date, seperti ini, jadi kalau teman-teman penasaran ini,
5:30bohongan nih pakai library, saya kasih lihat kodenya ya, kodenya hanya ini nih, di baris 10.
5:35Jadi input dengan tipe date, yang sebenarnya cukup baru ya, ya nggak baru-baru banget sih,
5:40maksudnya dulu yang sebelum HTML5 belum ada kan, belum ada ya,
5:44jadi dulu input hanya ada tipe text gitu kan, terus sekarang udah ada password,
5:50ada number, ada macem-macem ya, salah satunya juga date.
5:52Nah, kita bikin input dengan tipe date, terus kemudian kita buka di browser,
5:59tampilannya sekarang sudah cantik seperti ini, sudah ada widget-nya gitu ya,
6:02kita bisa pilih tanggal, mungkin kalau mau pakai time juga bisa,
6:06terus kita bisa hapus, bisa pilih hari ini, gitu kan.
6:10Kalau kita lihat di inspect element, di sini dia inputnya tipe date, gitu.
6:16Nah, tapi kalau kita ke setting, kalau teman-teman belum pernah cintang,
6:21di bagian bawah sini di preference ada ini, show user agent shadow DOM.
6:28Dan kalau kita cintang, maka si input ini adalah sebenarnya web komponen.
6:34Dia dimasukkan ke dalam shadow DOM, yang isinya adalah div,
6:40kemudian di dalam div itu ada div lagi, kemudian ada span, ada macem-macem,
6:46sampai akhirnya menjadi sebuah komponen yang digunakan dengan input dengan tipe date, gitu.
6:51Jadi sebenarnya ini adalah contoh web komponen
6:55yang mungkin teman-teman secara tidak sadar sudah menggunakan.
6:58Dan dengan adanya web komponen, ya kita bisa bikin komponen-komponen seperti ini.
7:03Jadi bisa aja nanti teman-teman bikin sebuah komponen button misalkan,
7:08button dengan type primary misalkan. Wah, ini bootstrap banget ya.
7:12Terus dijadikan satu library, pakai CDN, tinggal script SRC blablabla,
7:17langsung bisa digunakan. Jadi dia sifatnya universal, sudah tertanam di browser,
7:22sudah menjadi web standar, jadi ini tidak akan mungkin,
7:25mungkin nggak sih, bakal dihilangkan gitu misalkan, kayak misalkan apa ya?
7:30Kayak mungkin, se-extreme itu.
7:32Ada tipe, salah satu tipe image yang tadinya di-support, sekarang udah nggak di-support.
7:40Apa tuh? Apa ya?
7:44Havif.
7:45Yang Chrome hilangin beberapa minggu belakangan ini, lupa nih. Apa ya?
7:48Havif bukan.
7:49Bukan, bukan.
7:51Itu malah ditambahin, malah baru itu.
7:54Iya.
7:56Jangan diliatin deh.
7:59Oke, lanjut, lanjut.
8:01Nah, cuma bedanya kalau kita bikin custom element sendiri, namanya mesti 2 kata ya?
8:07Ya.
8:08Biar nggak, jadi kalau yang netv yang bawaan asli, itu kan pasti selalu 1 kata.
8:15Nah, kalau kita bikin sendiri, harus 2 kata.
8:19Oh iya, pakai minus ya, kan ada minus ya?
8:24Ya, benar, benar.
8:25Ya, pollution.
8:27Ya, sama seperti halnya kenapa react menggunakan hurk besar di,
8:32kalau kita mau bikin komponen ya, salah satunya ya.
8:34Supaya membedakan antara komponen yang dibuat sama komponen yang sudah ada di HTML.
8:39Oh, halo.
8:45Oh, putus-putus.
8:50Oh, putus-putus ya, sorry, sorry, sorry.
8:53Enggak, maksudnya gambarnya kalau soalnya itu last.
8:55Oh, oke.
8:57Ya, last go.
8:58Last ya, siap.
9:00Oh, gambarnya, mungkin koneksinya lagi drop ya.
9:03Nah, terus selanjutnya sebenarnya web komponen ini bukan sebuah,
9:10bukan satu teknologi yang apa ya, yang hanya udah web komponen gitu,
9:16tapi dia ada terdiri dari beberapa teknologi dibalik si web komponen ini
9:21yang membuat web komponen ini bisa digunakan.
9:26Yang pertama adalah HTML template.
9:28Kalau teman-teman belum tahu, HTML template ini adalah salah satu fitur
9:33yang cukup baru juga dari HTML yang kita bisa gunakan
9:36untuk menggunakan tag HTML berulang-ulang.
9:42Jadi ada template ini bisa kita gunakan.
9:45Kenapa?
9:46Ini sudah lama loh ini.
9:47Iya, sudah lama, tapi banyak yang belum tahu juga gitu.
9:50Oke.
9:51Karena ya itu kan biasanya kan, udah lah, pakai framework aja udah selesai.
9:55Saya pakai waktu dulu, jamannya masih pakai jQuery dan Backbone,
10:02pakai banyak pakai template.
10:06Oke.
10:07Itu dari tahun berapa tuh?
10:102017.
10:11JQuery itu berarti 2015an gitu ya.
10:16Ya, 2017 ya.
10:202017 sudah ada ya, tapi jarang dia menggunakannya.
10:24Kalau di web Almanac ada nggak sih template?
10:29Nah, itu.
10:30Ada ya.
10:32Oke, ini dia.
10:34White component and shadow dong.
10:36Template-nya ada nggak?
10:37Ini khusus template maksudnya?
10:38Oh nggak, nggak di breakdown.
10:40Nggak di breakdown ya, oke.
10:42Berarti ini disimpan untuk nanti.
10:44Ya, jadi ada yang namanya template.
10:47Bentuknya itu seperti inilah ya.
10:51Kita bisa definisikan template dengan ID gitu kan.
10:56Misalkan product raw, yang akan kita iterasi biasanya,
11:00buat iterasi ya buat di for loop gitu kan.
11:03Di reuse sih dia.
11:04Ya, di reuse.
11:05Nah, ini akan tampil berulang-ulang dengan bantuan JavaScript seperti ini.
11:10Jadi di clone, di select dulu kan template-nya apa,
11:15kemudian di clone, kemudian dimasukin isinya atau text content-nya,
11:20kemudian di append.
11:23Itu manual ya berarti?
11:27Ya, ini manual.
11:28Kalau misalkan datanya dari API atau database itu beda lagi kan.
11:32Jadi dengan hari ini kalau teman-teman sudah nonton ini,
11:37kalau misalnya semua yang ada di dalam template itu tidak didender oleh dozer.
11:41Jadi lebih baik menggunakan template daripada
11:44kalau kalian mau ulang-ulang pakai div tapi di display not.
11:48Ya, jangan pakai div tapi pakai template.
11:54Karena div akan di render meskipun display not.
11:58Walaupun display not, oke.
12:01Ya, tadi saya baru ketemu ternyata Chrome sudah me-remove support untuk image JPEG XL.
12:11Apa itu?
12:13JPEG XL itu adalah format image yang kekinian dari JPEG.
12:19Ya, jadi lebih kecil.
12:21Dengan kualitas yang hampir sama, dia bisa menghasilkan ukuran gambar yang lebih kecil.
12:27Sayangnya kurang dapat exposure yang bagus di Chrome.
12:34Kemudian dibutuhkan untuk di-remove.
12:36- Mungkin juga karena ada... - Agen kayaknya kalau saling sama WebP sama Aviv, ya.
12:43Dia lebih memprioritaskan Aviv kayaknya.
12:47Oke, kita lanjut lagi.
12:50Nah, ini yang tadi yang pertama ya, komponen pertama adalah template.
12:54Komponen kedua adalah custom komponennya sendiri.
12:56Custom element.
12:58Ya, sorry, custom element.
13:00Custom elementnya sendiri, kita bisa bikin element masing-masing.
13:04Mau bikin element date, misalkan tadi.
13:06Mau bikin button, mau bikin apa, gitu ya.
13:08- Bentuknya seperti ini. - Ini penyambungnya.
13:11Penyambungnya, betul.
13:13Kita define dulu custom elementsnya.
13:16Namanya seperti yang tadi disebutkan Eka, harus dua kata.
13:20Dan harus dipisah dengan tanda minus atau dash.
13:24Ya, penulisannya harus seperti ini.
13:27Misalkan kayak contoh di video yang saya buat adalah counter.
13:31Terpaksa saya harus bagi dua jadi C, counter.
13:35Atau apapun ya, pokoknya harus dibagi dua.
13:37Nggak boleh satu kata.
13:39Jadi itu semakin menyulitkan developer lagi ya.
13:42Untuk pilih nama variable-nya susah ya.
13:45Nah, terus komponennya sendiri ditulis dengan syntax class.
13:52- Ya, kalau teman-teman... - Oke banget ini.
13:55Dengan react, react jaman dulu ya.
13:58Mirip banget.
14:01Jadi pakai class, kemudian di-extend dari HTML.
14:05Kok HTML paragraph ini contoh ya?
14:07Itu contoh bisa. Jadi HTML element itu ada banyak.
14:11- Jadi di-extend ya? - Bapaknya itu HTML element.
14:15- Terus ada HTML element biasa. - HTML element biasa.
14:18Ada HTML table element, ada HTML div element, macem-macem.
14:23Oke. Wah, ini ternyata image format ada geng-gengannya ya.
14:28Baru tahu saya. Saya ikutan geng mana ya?
14:32Kayak Afif lah, udah yang paling baru.
14:36Oke, dan kemudian seperti yang tadi di-mention juga sama Eka,
14:42sudah ada lifecycle-nya.
14:44Salah satunya adalah connected callback ini seperti
14:46component did mount, kalau nggak salah.
14:50- Bener nggak? - Betul, betul.
14:53Jadi kayaknya dia fire kalau udah di-render di DOM.
14:58Dia dimasukin ke DOM, itu akan jalan connected callback.
15:02Kalau dia dihapus dari DOM, dia jalan disconnect callback.
15:07Di sini ada contoh yang panjang nggak? Oh, ini panjang sekali.
15:11Ya, ini contohnya pop-up ya.
15:14Contoh yang dari gua itu bagus nanti. Bisa dikulik sama-sama.
15:18Oke, yang ini ya.
15:21Oke, itu gua jelasin sedikit aja ya.
15:25Jadi di sini itu user card. Jadi user card itu nama komponennya.
15:32Tujuannya menyampilkan foto, nama orangnya, informasi,
15:38dan ada button untuk pada click event handler-nya.
15:43Coba aja click, hide info, hide info.
15:46Click button, iya.
15:49Ada event handler-nya.
15:52Kita ke halaman JS-nya, ke bagian column JS paling bawah dulu.
15:58Oh, di sini nggak ada hide info ya?
16:01- Di bawah ya? - Iya, di JS-nya.
16:05Ke JS kita ke baris paling bawah, jadi kita jelasin dari paling bawah dulu.
16:11- Ini template ya? - Iya.
16:13Paling bawah dulu, paling bawah.
16:16Ngehooknya itu sama Windows, Custom Elements, Define, user card.
16:23Cara pemakaiannya user card-nya seperti tag HTML element ya.
16:27Kayak PDIV ya, user card.
16:29Terus user card yang itu adalah HTML class-nya.
16:33- Yang ini ya? - Ya, maksudnya user card yang...
16:35Oh, yang ini.
16:37Ya, yang kita baca HTML class-nya dulu.
16:39Oke, user card itu Extend, HTML element.
16:44Terus dia nge-attach shadow... ada constructor, dia nge-attach shadow-dome.
16:53Pacaran nge-attach shadow pakai attach-shadow.
16:56Terus ada shadow-root.
17:01Shadow-root, dia mengambil dari template, nanti template-nya didefine di atas.
17:06Oke, jadi hanya seperti itu aja dulu cara pakaiannya.
17:11Jadi dan query selektor itu hanya nanti untuk mengambil data dari kayak atribut name,
17:17ada atribut avatar, ada kan?
17:19Di user card itu ada atribut name sama atribut avatar.
17:22Jadi di template-nya dia query selektor, H3, ambil atribut name,
17:29terus kemudian atribut avatar, terus dia isi.
17:33As simple as that gitu ya. Terus kita lihat template-nya.
17:37Template-nya di atas, ini HTML template ya, termasuk juga styling-nya ya.
17:42Betul, jadi dia langsung bisa aja template itu didefine di HTML,
17:48bisa aja kalau mau, bisa juga di JavaScript caranya document create element template.
17:55Terus disini innerHTML.
17:59Oke, nah udiknya atau bagusnya web component ini,
18:06style yang kita define di dalam web component tidak akan mengikuti style yang ada di global.
18:14Jadi global style tidak.
18:16Isolated.
18:18Scooping.
18:20Tapi kalau pakai Shadow DOM ya.
18:23Kalau pakai Shadow DOM sebenarnya web component ini bisa tanpa Shadow DOM, bisa.
18:31Ini ya tadi ya? Shadow ini ya?
18:33Betul, itu line yang membuatnya jadi Shadow DOM.
18:36Oke.
18:38I'm sorry.
18:39Nah, jadi styling-nya hanya berlaku di dalam web component.
18:45Kita scroll, cuma styling biasa yang membuatnya grid, blablabla.
18:50Kita lihat HTML ya, jadi cuma div user card, image, tadi diisi dengan atribut source.
18:58Terus kemudian a3, diisi dengan atribut main.
19:01Terus kita lihat nih ada yang baru nih, slot, itu ada slot.
19:06Slot itu dari, jadi lihat di sebelah kiri, dalam user card itu ada div slot namanya email.
19:16Terus isinya apa? Nanti isi dari slot itu akan dibawah ke dalam slot itu.
19:23Jadi children-nya ya?
19:25Betul.
19:26Akan dirender sebagai children.
19:28Iya, tapi keyword-nya itu slot.
19:30Jadi kita pakai div atau pick slot apa.
19:34Pada dikasih name, nanti panggil aja slot namenya apa.
19:39Wah, di swipe nih sering sekali digunakan.
19:41Kalau yang pakai slot pasti deh familiar.
19:44Apa lagi ya kalau, kalau view ada gak sih, kalau slot gitu juga?
19:49Kalau view gak tahu ya, kalau view kan sudah ada binding-nya itu pakai v apa gitu ya.
19:53Tapi ini HTML kan, bukan terkait sama frame apa.
19:57Ini vanilla, ini tidak ada pakai frame apa-apa.
20:01Di view juga ada tuh katanya, bener.
20:04Iya, orang HTML kok semuanya bisa pakai.
20:07One last thing itu tentang lifecycle. Kita scrolling ke bawah sedikit.
20:13Di bagian connected callback ya?
20:16Iya, connected callback.
20:18Jadi di bagian ini dia menambahkan event list banner click untuk toggle info tadi, hide info, show info.
20:27Dan untuk auto disconnect dia remove list banner aja.
20:31Toggle info itu ada function sendiri, ya cuma kayak display man, display block aja sih sebenarnya, simple aja.
20:38Gak ada banyak macam-macam, as simple as that.
20:42Jadi ini contoh yang saya lihat dari si Thank You untuk si Brad dari Traverse Media.
20:48Ini contoh yang paling simple untuk dimengerti bagaimana menggunakan web component.
20:54Simplet dan jelas ya, jelas bagiannya gimana.
20:57Iya, cuman komplain saya satu, kenapa namanya connected callback, disconnected callback, gak kayak apa ya, kurang merepresentasikan gitu.
21:05Tapi masing-masing apa mereka juga waktu bikinnya juga pasti mikirin kan ini.
21:10Mungkin ada konsep atau ada istilah yang belum kita ketahui.
21:18Maksudnya connected callback ini apa, disconnected callback itu apa?
21:22Dan itu kan kayaknya dibikinnya udah dari dulu ya, dari sebelum trend UI framework yang kayak React.
21:28Ya, component with mount gitu-gitu ya.
21:31Istilah yang sekarang familiar itu dulu belum jadi istilah taman kami.
21:37Bisa jadi.
21:38Padahal web component ini sebenarnya sudah ada sebelum React kan ya?
21:43Ah, gak tahu kalau itu.
21:44Maksudnya web component ini udah lama loh.
21:46Tapi mature-nya atau sudah di support-nya kan baru kan?
21:51Iya sih.
21:52Belum semua, jadi mungkin yang kayak custom elemen ini udah lama memang, custom elemen udah lama.
22:00Shadow DOM saya gak tahu.
22:02Kalau template juga udah lama tadi kan, kalau Ivan udah pernah pakai di 2017.
22:08Cuman ada beberapa elemen yang membuat web component ini menjadi sulit digunakan.
22:17Sampai akhir-akhir ini.
22:19Iya, yang pertama shadow DOM.
22:21Shadow DOM-nya yang masih belum fully support.
22:27Iya, kalau misalkan kita bikin sebuah component terus ada style-nya tiba-tiba berlaku global kan susah kan?
22:34Gitu kan?
22:35Susah digunakan.
22:36Dan satu lagi component yang juga cukup penting walaupun tidak di ranah HTML CSS adalah import dan export.
22:45IS module.
22:47Jadi dengan IS module ini kita bisa dengan mudah, lebih mudah lah ya.
22:52Terutama di browser ya.
22:54Kalau di Node.js kan udah ya pakai require lah, cuman beda syntax aja.
22:58Tapi fungsinya sama.
23:00Sedangkan di browser, dulu browser itu belum ada.
23:03Tidak ada sama sekali import-export.
23:05Kita cuma taro CDN, script SRC gitu ya.
23:08Nah itu udah diimport secara global.
23:10Rescondition ya? Udah, nasib.
23:13Iya, karena IS module yang membuat si web component akhirnya bisa menjadi ter-encapsulasi tanpa bisa mengkontaminasi
23:25komponen-komponen lain di luarnya gitu.
23:28Jadi apa launchingnya IS module sama pola import-export itu beneran mengubah...
23:35Mengubah landscape ya.
23:37Mengubah landscape web banget ya.
23:38Dulu kan pas feed tuh kita bahas feed juga, topiknya mirip kan, kayak gini.
23:43Apa sih feed itu dibikin karena si mas FNU-nya sadar bahwa oh ya import udah...
23:50Native browser import udah didukung di banyak browser.
23:54Ya, lanjut.
23:56Lanjut, oke.
23:57Nah, lanjut berikutnya kita masih ada hubungannya di 2 episode sebelumnya tentang web almanak.
24:04Nah, di sini ada insight yang menarik.
24:06Kenapa web component masih belum juga banyak yang menggunakan?
24:10Banyak kenapa?
24:14Kenapa? Karena banyak yang belum tahu ya? Atau karena sudah termudahkan dengan framework-framework kali ya?
24:21Atau mungkin karena kurang gimmick gitu nggak sih?
24:27Kurang gimmick ya.
24:28Kalau react atau swell dan lain-lain kan banyak konten yang menarik di social media atau mungkin di akun-akun kita di hacker news atau di mana pun.
24:41Jualan gitu ya, jualan.
24:42Kita buka youtube, banyak tutorial yang dikemas narik dengan berbagai bahasa.
24:47Maksudnya bahasa Indonesia, bahasa Inggris, berbagai style belajar.
24:52Itu jelas.
24:53Mungkin karena gitu nggak, untuk karir info aja nggak ada.
24:59Dicari web component.
25:01Web developer yang ngerti web component.
25:04Pasti carinya react developer, feel developer.
25:07Maybe, maybe.
25:11Iya kan, yang paling populer kan react kan, gitu kan.
25:14Ini, mungkin ada benarnya nih, susah pakai web component.
25:18Iya, masih lebih banyak.
25:20Ya, saya juga waktu bikin component ini.
25:24Masih banyak boilerplate code yang harus kita tulis.
25:28Benar, benar. Ada benarnya.
25:31Memang sulit.
25:32Tapi, di sisi yang lain, web component ini ya, nggak ada extra kilobytes yang harus didownload oleh user, gitu kan.
25:42Iya, sebenarnya itu keren banget kalau dari performance dan machine performance sama resilience ya.
25:52Itu kan beneran makin dekat dengan javascript dan behavior browser asli.
25:58Kedepannya ya relatif aman lah.
26:01Kayak misalnya contohnya kalau react kan implementasi ya.
26:04Itu react itu kayaknya kalau dari segi paradigm kan kayak kebalikannya banget tuh.
26:09Sampai dom pun dia bikin dulu copy sendiri kan, virtual dom.
26:14Makanya kan makin setiap ganti versi react,
26:17selalu ada heboh-heboh ada hook baru, ada hook yang tidak jadi dipakai,
26:22ada behavior baru dalam streaming component misalnya.
26:26Ya, bukan salah ya, bukan salah benar.
26:28Cuma karena dia bikin abstraksi yang custom dan kompleks,
26:34ya kedepannya bakal bisa aja banyak feature yang berubah secara ekstrim.
26:41Sedangkan kalau si custom element ini kan deket banget sama bahasa-bahasa asli
26:48yang bisa dibaca oleh browser yaitu HTML, Javascript, CSS.
26:54Jadi sebenarnya still formulate juga di situ, cuman ya itu yang pake dikit.
26:59Dan makin lama makin tahun makin turun.
27:02Jadi kan tadi kita lihat tuh 2021 itu yang desktop itu tadinya 3% kalau nggak salah.
27:10Sekarang jadi 2%.
27:12Nah, sementara yang mobile tadinya 4% turun jadi 0,39.
27:18Ya, fenomena menarik ya.
27:21Fenomena menarik? Mungkin ya, mungkin ya.
27:24Mungkin karena adaptasinya masih belum ada perusahaan yang cukup besar
27:29menggunakan web components gitu atau belum terekspos.
27:33Ada cuman ya, itu nggak terekspos aja.
27:36Ya dibandingkan sama Facebook gitu kan, kalau Facebook pake react gitu kan.
27:40Atau bahkan yang membuat react kan pasti orang berpikir,
27:44wah di Facebook aja yang seskel Facebook aja udah pake react gitu.
27:48Nah, aplikasi kita ya berarti bisa nih pake react gitu kan.
27:52Atau spelt misalkan di perusahaan apa, di portal berita misalkan.
27:57Wah, di portal berita ini udah pake spelt gitu kan.
28:02Ya, gitu-gitulah. Exposure aja mungkin ya.
28:05Jualannya kurang gitu ya.
28:07Ya, bedakan antara virtual dom.
28:09Sebenarnya kalau ada Google pake, cuman nggak terlalu dipromote aja ya.
28:13Di sini ada keywordnya, ada keyword yang saya baca itu adalah
28:19framework-frameware seperti react gitu kan, pakenya virtual dom.
28:24Sedangkan web component itu shadow dom.
28:27Ya, itu dua konsep yang berbeda.
28:29Ya, jadi buat teman-teman supaya nggak hilaf,
28:34kalau web component itu sama pake virtual dom bukan, dia pake shadow dom.
28:38Ya, kembali ke tadi si apa nih, Vida, katanya memang susah pake web component.
28:45Mungkin ini ya, ada feedback atau masukan untuk web component juga adalah yang pertama gitu.
28:53Kalau framework lain kan lumayan apa ya, lumayan mengedepankan developer experience kan.
29:00DX-nya bagus.
29:01Ya, kalau web component jujur aja, developer experience-nya masih agak tertinggal dibandingkan framework.
29:07DX di sini bisa macam-macam ya, bisa cara penggunaannya, boilerplate code-nya juga lebih sederhana gitu kan.
29:18Terus juga, termasuk juga tutorial.
29:30Terus juga termasuk juga tutorial, semakin kesini pasti akan semakin banyak tutorial
29:38yang berkaitan dengan ini dan semakin developer experience-nya akan semakin baik gitu.
29:42Sama, apa lagi tadi ya, sempat kepikiran tapi lupa, ya udah, nanti aja.
29:48Oke, kita lihat dulu ya yang di sini ya, web component dan shadow dom.
29:52Jadi web component itu turun dari 3% ke 2%, kemudian shadow dom itu lumayan naik ya.
29:59Oh, turun dari 4, dari 0,4, sorry, 0,4, jadi 0,39.
30:07Tuh, template tuh, 0,05%, yang pakai Ipan doang nih, 0,05.
30:15Swear, gue banyak pakai template, lo jawab dulu, apalagi tambahin underscore.
30:20Naik tuh 0,05%.
30:24Yang pakai Ipan doang. Ini is atribut kita juga jangan pakai ya.
30:30Tapi lumayan menyedihkan ya, melihatannya ya.
30:35Jadi gue pakai jaman dulu tuh namanya, kalau pakai template, pakainya dari underscore.
30:42Jadi tetap pakai template, terus kemudian baca template-nya pakai underscore.
30:56Supaya connect-nya ke backbone.
30:59Tapi gue sering pakai, swear, gue pakai ini sering.
31:03Ya, percaya, percaya, percaya.
31:07Gue nggak tahu kenapa jadi kurang popular.
31:11Ya, itu karena framework, jadi udah disiapin semuanya, template-template-nya juga udah.
31:18Sementara dulu waktu framework yang dibikin, fitur template ini belum ada, mungkin ya.
31:25Nggak tahu juga. Nah, tadi yang mau saya bahas adalah web component ini yang seperti di contoh di sini,
31:34kalau misalkan nanti teman-teman aplikasinya udah mulai kompleks,
31:38mau dipakaiin Redux, bisa.
31:41Mau pakai state management apa, bisa.
31:45Ya, ini HTML, sorry, ini JavaScript, HTML.
31:48Jadi mau ditambahin library apa juga bisa.
31:51Asal library-nya itu yang JavaScript juga.
31:56Kalau Redux itu kan nggak ada hubungannya sama React kan sebenarnya kan.
32:00Walaupun ya dia berkaitan gitu kan.
32:03Tapi itu adalah library JavaScript, bukan library React ya.
32:07Terus, lanjut lagi.
32:13Makanya yang tadi kita sebutkan ada developer experience-nya kurang bagus,
32:18karena banyak boilerplate code, kemudian penamaannya unik,
32:23life cycle-nya juga namanya juga agak berbeda dengan yang biasa kita tahu,
32:30makanya muncul framework framework.
32:32Terus objek orientasi, segala macem di this dot something-something,
32:37itu kan objek orientasi banget dan ya, perkara selera sih.
32:41Banyak developer yang banyak programmer JS yang kurang suka dengan cara kayak gini kan, kurang cocok.
32:49- Iya. Dia seolah-olah anti-mainstream ya.
32:53Orang dari kelas menuju ke fungsional dia sementara dia...
32:57- Dia selalu kelas. - ...kelas aja udah.
33:00Atau nanti dia mau ngikutin ya, kita nggak tahu kan.
33:03Tapi ini kayak React zaman dulu ya, this dot something dot bind dot something dot this, gitu kan.
33:12Mirip-mirip juga kan, gitu kan.
33:14Tapi React-nya sendiri udah berubah dan lucunya adalah fun fact-nya adalah si React ini kenapa mereka dulu menggunakan kelas.
33:24Jadi ada alasan supaya teman-teman kita yang belum familiar dengan JavaScript
33:30atau yang dari dunia objek orientasi programming seperti Java.
33:35Iya, familiar, merasa familiar dengan kode ini.
33:41Dan kemudian setelah mereka terjerumus, akhirnya dijerumuskan ini juga fungsional.
33:46- Jadi ini fungsional semua. - Ini sebenarnya fungsional bukan kelas, gitu kan.
33:50Bukan OOP.
33:51Ya gitu lah, saya tanya ya, gossip-nya seperti itu kenapa React awalnya menggunakan kelas.
33:57- Dibakan ya berarti? - Dibakan, iya.
34:01Oke, jadi tadi saya sempat bahas sedikit dengan kurangnya DX atau Developer Experience
34:12yang disediakan oleh Native Web Component, makanya muncul Framework Network.
34:16Salah satunya adalah Lead ya, Lead ini yang cukup pernal.
34:22Dia membungkus si Web Component sehingga cara penggunaannya jadi lebih sederhana.
34:30Ada contohnya nggak? Getting Started.
34:35Ada lagi yang namanya, yang keluarannya Mozilla apa? Stencil ya?
34:41- Stencil ionic. - Stencil ionic ya, ionic.
34:44Di sini ada fans-nya ionic nih, Bahyu.
34:47Dia nge-fan sama angular dia, sama ionic.
34:52Ya, jadi bentuknya kayak gini.
34:55Sudah bisa pakai TypeScript juga tentunya.
34:58Kita import dulu HTML, CSS, sama Lead elemennya.
35:01Ya, Lead-nya sendiri sebenarnya yang agak sedikit misleading adalah
35:04dia ada dua komponen kan, ada dua item kan sebenarnya kan.
35:08Lead HTML sama Lead ini, bener nggak sih?
35:12Nggak ada ya? Oh, Lead aja ya?
35:22- Lead aja. - Oke, salah berarti.
35:25- Lead elemen gitu. - Ya, Lead elemen, oke.
35:28Terus kita pakai kelas ya, di sini kita pakai kelas,
35:33di Extend tapi bukan HTML, melihatkan Lead Elemen.
35:36Terus kemudian ini definisikan CSS-nya, terus di-render.
35:40- Nah, ini udah agak familiar ya? - Ya, lebih rapi sedikit ya.
35:43Ya, lebih rapi ya.
35:45Terus kita tambahkan ini, Dekorator Custom Elements,
35:48Simple Greeting untuk penamaan.
35:51Penamaannya seperti ini, jadi nggak perlu pakai yang tadi,
35:55yang di bawah tadi Custom Elements ini.
35:58Ini adalah penggantinya adalah ini, Custom Elements ini.
36:02- Kemudian kalau kita lihat... - Sebenarnya sama.
36:04- Sama. - Di belakangnya sama.
36:06- Sama, ini nanti di-compile menjadi itu, gitu. - Yang menurut itu.
36:12Nah, sekarang kalau kita lihat ininya mana ya?
36:17Life Cycle-nya mana? Kok nggak kelihatan Life Cycle-nya?
36:20Ini Hello World, Hello Mars, nggak ada ininya ya?
36:24Oh, kliknya langsung di sini.
36:26Jadi kalau on take, dia langsung di sini.
36:29Aklik ya, dan ini pakai dollar kurang-kurang awal,
36:37ini juga dari JavaScript ya, jadi nggak.
36:39Ya. Life Cycle-nya mana?
36:43Kita mau cari Life Cycle, di sini ada nggak?
36:46- Life Cycle, oh, nggak ada. - Tidak ada.
36:49Gak ada ya? Bagaimana cara itu?
36:52Component beat mount gitu-gitu nggak ada ya?
36:54Ya, saya lihat sendiri.
36:56Tutorial, intro to lead.
36:58Sama, ke sini juga? Oh, nggak.
37:02- Langsung jalan. - Tapi ini enak ya,
37:05udah ada Apple-nya, Live Playground-nya.
37:10Mereka mencontek tutorialnya Svelte, ya.
37:14Kayak gini nih, web component aslinya nggak ada bikin beginian ya?
37:21Nggak ada. Ini framework juga ya, framework di atas web component ya.
37:26Framework di atas web component.
37:28Jadi, ini adalah salah satu, kemudian salah duanya ada tadi stencil,
37:35- lalu kemudian... - Ada NNs.
37:39Iya, ada NNs yang nanti kita akan bahas, tapi sebelum kesana
37:42saya mau bahas juga ternyata framework-framework yang teman-teman sudah kenal
37:48seperti Svelte, React, View, Solid, dan lain-lain,
37:52juga bisa dikompilasi ke web component.
37:56Custom Elements.
37:58Jadi, kalau teman-teman penasaran bisa nggak sih kita tulis web component,
38:03tapi tetap pakai framework yang kita suka, misalkan kayak View.
38:07View ini sudah 91% compatible, cuman ada satu isu di sini.
38:15- React masih 71%. - React ini paling...
38:22- Karena dia sudah berbeda ya. - Ya, tapi ternyata ada React yang eksperimental
38:29yang khusus dibangun untuk fully support Custom Elements.
38:33Ini sudah 100%.
38:35Ini nggak tahu nih, React yang mana nih?
38:39- Ya itu... - Oh, dia ada ini kayaknya.
38:42Ya, beda brands kayaknya ya.
38:45Soalnya menuju ke GitHub Repo yang sama,
38:48mungkin ada brands web component di sini, somehow.
38:52Silahkan cari-cari aja.
38:54Kemudian ada Angular, sudah 100%, Svelte 100%,
38:58AngularJS yang satu bahkan 100% juga, ada Preact, Polymer, Skate...
39:04- Sampai makin ke bawah makin aneh-aneh itu. - Ya.
39:08Tapi kalau kita lihat skornya ini sudah bagus-bagus.
39:12- Ya kan jadi mungkin... - Huh?
39:15- Mungkin sebenarnya analoginya kayak... - Eh sorry, lanjut, lanjut.
39:20- Lanjut, lanjut. - Kayak kita di Next.js,
39:23kalau kita pakai React atau Svelte, kita tetap bisa pakai
39:28Reusable Function di JavaScript biasa, kan ya?
39:32Nah, itu kan sebenarnya kayak gini Reusable Function juga,
39:35tapi untuk render UI.
39:38Jadi sebetulnya emang expected-nya bisa.
39:42Expected-nya bisa, betul.
39:45Cara pakainya, saya punya contoh, tapi di slide, kalau mau lihat.
39:52- Nah. - Ayo lihat slide aja, menggap itu.
39:56Ini slide yang saya presentasikan setahun yang lalu
39:59di DevFace Jakarta 2021, ada videonya.
40:03Ini contohnya SpellBiasa, ya.
40:08Kemudian, ya udah, langsung.
40:11Oh bukan, salah.
40:15Itu kalau mau dipakai di Svelte, sorry.
40:17Itu kalau mau dipakai di Svelte.
40:19Kalau ini yang dikompile ke itu ya, ke web component.
40:24Sebagai component Svelte, tapi dikompile menjadi...
40:28setelah jadi JavaScript, hasil transpilenya jadi custom element.
40:35Ya, jadi kita bisa menambahkan Spell Option,
40:38tag web component.
40:40- Oh. - Sudah.
40:43Sederhananya seperti itu.
40:45Dengan function increment-increment dan lain-lain.
40:50Sudah, jadi yang di sini itu akan menjadi C-aunter.
40:55Untuk digunakan misalkan di bagian lain dari HTML kita.
41:00Terus jangan lupa pada saat kompilasi ditambahkan custom element
41:04sama dengan true, itu tic 2 true.
41:06Jadi ketika dikompile, dia akan menjadi web component.
41:10Shadow DOM dan lain-lainnya tetap ada.
41:13Nice.
41:15Nah, cuma jangan lupa itu tergantung kita pakai bender apa juga, kan?
41:19Betul, kalau ini berarti pakai rollup, ya.
41:22Kalau pakai fitur, mungkin beda lagi.
41:25Spell kit kan pakai fitur.
41:27Ya, ada sih, pasti ada.
41:29Cuma item konfigurasinya harus rajin-rajin...
41:33Ya, mungkin property-nya beda namanya bukan custom element,
41:36mungkin namanya web component atau apa gitu ya.
41:39Mungkin bisa berbeda.
41:40Jadi dipastikan saja settingan untuk kompilarnya.
41:45Karena dia kompilasinya yang ke web component, kan?
41:49Yes.
41:52Jadi teman-teman bisa langsung ke sini,
41:54kalau lihat, wah, framework yang saya biasa pakai,
41:58ternyata bisa atau enggak.
42:00Atau belum support pakai web component.
42:03Karena ketika kita menggunakan framework
42:07dan kita compile ke web component,
42:10pasti akan ada penurunan size ya, ukuran.
42:13Karena web componentnya sudah ada di browser masing-masing,
42:16jadi nggak perlu download lagi gitu.
42:17Bisa hemat beberapa kilobyte kan, lumayan ya.
42:20Gitu.
42:23Oke, kita lanjut.
42:24Nah, ini ada contoh dari teman kita juga, Fatih.
42:30Yang bekerja di mana ya?
42:31Iya, di teman-teman Indonesia.
42:33Kita kerja di e-commerce hijau ya, kalau misalnya.
42:36E-commerce hijau, oke.
42:38Jadi, yang dilakukan adalah menggunakan custom element di Next.js.
42:43Nah, ini menarik.
42:45Terus, buat ngerender, markdown.
42:48Buat ngerender, markdown, oke.
42:50Custom markdown atau apa?
42:53Belum beneran baca detail sih itu tadi.
42:56Cuma intinya, jisnya adalah biar ringan aja,
43:00bikin component yang jalan di Next.js dengan lebih ringan.
43:04Tapi dia pakai lead, bukan?
43:06Ini soalnya di URL-nya, lead-next.
43:09Kayaknya iya.
43:11Oh iya, HTML.
43:16HTML itu apa?
43:19React component using HTML.
43:22HTML ini apa?
43:23Kayaknya beliau juga yang bikin sendiri nih.
43:26Jadi dia bikin solusi apa?
43:29Ngerender HTML.
43:31Strict to React Element Conversion Library.
43:34Wow, keren.
43:37Ini khas engineer banget.
43:39Jadi buat bikin blog kayak over engineering everything.
43:43Over engineering.
43:44Tapi ya bagus buat explorer kan.
43:46Bagus, bagus, bagus.
43:48Real custom elements.
43:52Oke, contohnya mana?
43:54Instead of using add custom element,
43:56we can call custom element the define.
43:59Oke.
44:00Nah, ini kan yang tadi kita lihat sebelum tutorial-nya sih.
44:05Oh iya, ini lead ya, benar-benar.
44:07Ini ada statiknya, kemudian define-nya masih pakai ini ya.
44:12Nggak pakai ini. Apa namanya?
44:15Belum. Belum.
44:18Nggak pakai dekorator.
44:21Nggak pakai dekorator.
44:22Dekorator itu soalnya di JavaScript.
44:25Belum ini kan.
44:26Ya, dia masih disupport di TypeScript.
44:29Ya, kalau ini kan masih JavaScript ya.
44:34Ini alamannya sibuk.
44:37Berat.
44:38Berat.
44:40Oke, terus ini di import.
44:44Masukin ke, ini next.js-nya ya.
44:48Ini next.js-nya ya.
44:50Oke.
44:52Itu file component react kan ya.
44:56File component react, ya.
44:58Terus effect dan lain-lain tetap sama.
45:00Timing system.
45:05Dah, silahkan baca sendiri.
45:08Sampai kelar baca sih sebenarnya cuma paham summer-summer doang sih.
45:12Mungkin harus dicoba ya, biar beneran paham alurnya.
45:16Nah, ngomongin tadi, enhance.
45:20Nah, ini sebenarnya menarik nih.
45:22Jadi waktu kita ngomongin tentang island architecture.
45:27Kan sudah sempat keluar tuh Astro.
45:30Terus ada Quick kan.
45:32Terus kan saya sempat nanya kan ke kalian kan.
45:35Ada nggak sih framework yang pakai fitur-fitur native dari web.
45:43Ternyata ada.
45:46Enhance.dev ini.
45:47Wah, menarik sekali gitu.
45:49Karena semua fitur-fitur yang ada di framework ini
45:55adalah fitur yang ada di web API.
46:00Berarti dia cuma jadi wrapper ya?
46:02Iya, jadi ada layer.
46:04Dan menariknya mereka membranding mereka sebagai di HTML framework.
46:10Jadi kayak semacam meta frameworknya HTML.
46:13Jadi kayak misalnya gini deh, kalau kita pengen pakai React,
46:16mungkin kita akan menggunakan meta framework Next.js.
46:20Karena itu memudahkan kan kita nulisnya dengan React,
46:23pakai teknologi React, tapi pakai Next.js ada routing,
46:26ada lain-lain lah, ada strukturnya.
46:28Kalau kita nulis dalam Svelte, kita akan pakai meta framework SvelteKit.
46:33Kalau kita nulis kode view, kita mungkin pakai Nux.
46:37Nah, Enhance ini memposisikan mereka sebagai
46:40kalau kita menulis HTML dan JavaScript dan CSS Vanilla,
46:47lalu kita bisa pakai Enhance sebagai framework
46:51yang memudahkan routing dan sebagainya.
46:54Routing dan structure dan developer experience, convenience lainnya.
47:00Menarik tuh, apa tadi, ini adalah framework Enhance dari HTML ya?
47:06Jadi bahkan kita nggak harus pakai custom element juga
47:10kalau emang nggak mau.
47:11Ya, HTML biasa misalnya full static ya.
47:14Kita punya block yang cuma full static, ya udah HTML aja.
47:18Karena si Astro juga mengklaim hal yang sama.
47:23Tapi Astro ada transfile-nya, ada bundling-nya kan,
47:27file file-nya kan nggak bisa berubah jadi JavaScriptingan sendiri, ya kan?
47:31File file atau React dan lain-lain.
47:33Betul. Sampai-sampai yang bikin Astro dia melabeli dirinya sebagai CEO of HTML.
47:42Tapi seru juga ini trend-nya ya. Makin di satu sisi tadi kita lihat web komponennya sendiri,
47:51penggunaannya rada sedih.
47:54Cuma, misalnya framework, meta framework yang baru,
47:58ini mulai sadar akan bagusnya, menariknya,
48:04menulis dalam bahasa yang sedekni, seapplicient, dan seperformant mungkin pakai HTML biasa.
48:14Karena juga trend-nya kan gini kan, jadi HTML CSS JavaScript gini-gini aja,
48:20susah nih bikin aplikasi yang dinamis.
48:22Yuk kita bikin framework datasnya, bikin lah React.
48:25Kenapa makin rumit, makin rumit, makin rumit. Performansa, terus total working time-nya tinggi, karena harus diproses oleh browser, akhirnya back to...
48:37Dan, iya, dan karena...
48:39Itu sih kalau analog-nya, kalau manusia ya dulu hidupnya alami, terus jadi hidup modern, segalanya artisiknya lah, pre-process.
48:49Terus sekarang jadi trendy kan, organik lah, kembali ke alam.
48:54Sehat, terus kemana-mana kalau bisa jalan kaki, naik sepeda, gitu ya.
48:59Iya. Maksudnya ada apa ya, ada drive.
49:04Jadi misalkan si framework-framework ini ngedrive, gitu.
49:07Ngedrive atau itu ya, memantik si HTML, CSS, dan JavaScript, TC39 ya.
49:15Itu untuk catch up, gitu kan.
49:18Wah, ini ternyata ada framework yang caranya seperti ini.
49:24Menarik nih, secara developer experience bagus, mungkin performanya juga cukup oke.
49:30Ya udah, yuk kita implementasi di native, gitu.
49:34Jadi, si HTML, CSS, dan JavaScript juga mereka belajar, gitu.
49:38Atau bisa jadi, sebelum jadi dia stand-up di trial-nya sebagai framework dulu.
49:46Yes, bisa juga.
49:48Bisa juga seperti itu.
49:50Semacam feedback dulu tuh akhir kali sih.
49:52Ya.
49:53Jadi ternyata memantau framework-framework yang ada.
49:57Orang-orang itu itu juga sebenarnya.
50:00Iya, orangnya yang di dalam framework juga.
50:02Kan kita juga tahu ya, kelihatan gitu ya, bagaimana, ya, salah satunya,
50:08saya nggak nyebut react aja ya, tapi salah satunya react dan teman-temannya,
50:12itu gimana mendrive si JavaScript supaya menambah fitur terus, kan.
50:17Semenjak ada react dan lain-lain, itu is nambah terus kan, is six, is seven.
50:23Makin nambah, makin bisa memenuhi kebutuhan developer.
50:26Betul.
50:27Kalau dulu, bahkan kalau kita mau for loop aja, kadang-kadang kita harus pakai jQuery buat for each, gitu kan.
50:35Kalau sekarang udah bisa pakai map lah, bisa pakai filter, pakai apa, macem-macem gitu kan.
50:41Udah, apa, termasuk juga jQuery, ya.
50:45Yang, apa, yang tadinya kita mau select element aja susah, istana mati, gitu kan.
50:51Sekarang udah bisa query selektor, query selektor all,
50:55yang sebenarnya terinspirasi dari jQuery juga.
50:59Ada juga yang waktu sempet, kalau ada yang sempet pakai coffee script,
51:03itu juga menginspirasi JavaScript untuk punya arrow function, kan.
51:08Ya, jadi mereka itu menginspirasi dalam tanda kutip, ya.
51:14Atau memantik si native browser supaya bisa catch up dengan, oh, ini kita butuh nih.
51:21Buktinya apa? Buktinya yang pakai react sekian banyak.
51:24Mereka suka, gitu kan.
51:26Seperti string literal aja, jaman dulu kan.
51:29Pakainya must-test.
51:31Iya, must-test, ya, must-test.
51:33Atau template engine yang lain, ya.
51:35Handlebar.
51:38Handlebar, must-test, macem-macem banyak, gitu.
51:41Dan karena kebutuhan itu akhirnya, ya, oh, iya, bener juga ya.
51:46Akhirnya, yuk kita bikin. Akhirnya jadilah gini.
51:49Dan dari framework-framework yang tadi, mereka juga harus adaptasi dong, gitu.
51:54Gimana caranya supaya bisa dekat juga dengan si native ini,
51:58salah satunya dengan kompilasi, kan, kompilasi ke web component atau custom elements.
52:03Kemudian muncul juga framework-framework yang wave berikutnya, ya, gelombang berikutnya.
52:08Yang react fuelstrap itu.
52:11Apa?
52:12Yes, itu gelombang pertama, misalkan.
52:15Ini udah masuk gelombang kedua yang lebih dekat ke native web, ya.
52:21Dekat ke platform.
52:23Nah ya, use the platform katanya.
52:25Use the platform.
52:27Okay, ini ada pertanyaan menarik nih dari Mas Andy.
52:31Jadi makin nggak ngerti web component itu apa dan kapan dipakai.
52:36Ya, mungkin kita jawab pertanyaannya yang dibagian web component itu
52:42kapan kita perlu pakai, kapan kita nggak perlu pakai web component.
52:47Ada yang bisa memberikan pencerahan?
52:51Kalau cuma munculnya di satu tempat, ya, nggak perlu dipakai web component.
52:56Tapi kalau reuse, ya.
52:59Iya, kejaran reusable dan encapsulasinya itu baru pakai web component.
53:04Encapsulasi itu maksudnya dia punya style sendiri, dia punya...
53:09Bayangkan kalau web component itu bisa dipakai di lebih dari satu website.
53:15Itu juga bisa menarik.
53:17Kalau misalnya handle different project ya.
53:20Jadi component-componentnya itu sudah dipakai di berbagai macam tempat.
53:26Nah, contohnya...
53:30Saat dia minta.
53:32Contohnya, saya...
53:35Tidak, ini bukan web component, tetapi sebuah web component yang pernah saya implementasikan.
53:41Lo disebut dengan down component.
53:44Down component?
53:45Ya, down component itu componentnya...
53:47Accessional ya?
53:48Iya, dia cuma...
53:50Ya, dia nggak urusan apapun.
53:52Yang penting, datanya dikasih apa, render seperti yang diminta.
53:56Jadi sesuai dengan props.
53:58Sama, jadi...
54:00Waktu saya develop, waktu jaman itu mungkin saya nggak pernah dalam web component.
54:05Akhirnya bikin down component banyak.
54:07Dan website-nya ini ada 10 atau 5, 10-an lah saya develop di saat yang bersamaan.
54:15Jadi semua kayak postcard, produk card, segala macam itu dibangun.
54:20Satu library.
54:22Jadi satu library dipakai untuk semua, di-share.
54:25Jadi yang membedakan cuma props.
54:27Props-nya butuh apa, nanti akan dilihat seperti itu.
54:30Hal yang sama saya bisa lihat juga kalau kita pakai web component.
54:35Jadi bangun web component, rilis di NPM misalnya, atau rilis di GitHub sebagai package,
54:43direuse aja di banyak tempat.
54:45Tinggal NPM install something, web component, misalkan button gitu kan.
54:51Terus kita tinggal import, pakai.
54:53- Product card, product card. - Product card, ya.
54:56Teman-teman bikin banyak product card.
54:59Yang tadi isinya saya ingat, yang membedakan bagaimana dia di-render adalah
55:05hanya dari sisi props-nya.
55:09Atau tadi di sini property-nya atau slot-nya tadi ya.
55:13Slot-nya berbeda, property-nya berbeda, render seperti apa.
55:17Jadi satu component bisa banyak.
55:19Jadi reusable.
55:21Reusable apa? Distribute atau untuk distribution-nya?
55:26Jadi biasanya engineering manager-nya akan senang tuh.
55:34Kita bisa hemat banyak waktu kalau kita bikin web component.
55:38Tapi mulai di awalnya performance-nya.
55:44Tapi perlu digaris bawahi juga.
55:46Kenapa framework seperti React itu ukurannya cukup besar?
55:51Karena React kan dibikin oleh Facebook.
55:56Yang mana mereka berharap Facebook ini bisa dibuka di semua browser
56:02dari yang paling jadul sampai saat ini, yang paling modern.
56:06Makanya dia masih mendukung...
56:08-Polyfilm-nya. -Iya, gitu.
56:12Nah, kalau kita pakai web component, terus usernya sama si user IE6,
56:18gak bisa kan?
56:20Karena ini web component gak bisa backward compatibility, kan?
56:24Bisa gak sih? Ada polyfilm-nya gak sih? -Gak bisa.
56:26Gak ada kan? Gak bisa ya?
56:28Jadi harus browser yang modern, gitu kan?
56:31Oh, gak tahu. Mungkin kalau extend element tertentu,
56:34karena tadi extend element paragraf ya, Peh?
56:36-Masih bisa. -Mungkin isinya dirender sebagai Peh biasa deh.
56:40Iya, bisa jadi sih.
56:42Intinya adalah kalau target user kita cocok dengan...
56:48personanya cocok dengan menggunakan browser terbaru
56:54yang udah otomatis update juga, gitu kan?
56:56Itu sebenarnya gak masalah pakai web component.
56:59Dan malah bagus. Kenapa?
57:01Ukurannya jadi lebih kecil karena mereka tidak perlu download lagi,
57:05tidak perlu ada request ke server, gitu.
57:08Tidak perlu membuat sibuk server kita juga, hemat bandwidth, gitu ya.
57:13Jadi ya sebenarnya win-win sih.
57:15Cuman lose-nya adalah kalau menggunakan web component saat ini,
57:21developer experience-nya belum semenarik framework-framework yang lain.
57:27Bisa diakali dengan cara menggunakan framework yang sudah familiar,
57:30teman-teman sudah punya framework yang familiar,
57:34atau menggunakan framework-framework yang gelombang kedua, ya,
57:39yang Enhanced, Quick, ataupun Astro.
57:43Tapi Astro gak di... web component, kan?
57:48-Ada juga. -Ya, kayaknya tetap bisa dipakai, deh.
57:51Bisa, ya. Oh, iya, itu kan gak ada. Bukan itu HTML, ya. Sorry, sorry.
57:55Iya, itu HTML, jadi tetap bisa dipakai, ya.
57:57-Ya, kita nulis JavaScript biasa juga bisa, kan? -Yes, yes, yes.
58:01Oke.
58:03Nah, kalau micro front-end, ini konsep yang beda lagi.
58:08Micro front-end.
58:11Kan bisa aja per component dipublish sebagai package tersendiri.
58:15Nah, perkara package-nya itu, si UI component-nya itu dipublish sebagai...
58:20apa, pakai web component atau pakai bahasa lain, kan, bisa aja, kan?
58:26Ya, ya.
58:28Cuma ini topik seru, deh. Kayaknya one day harus micro front-end, kan?
58:32-Micro front-end, ya. Betul. -Approach-nya banyak tuh.
58:34Ada yang satu component, satu package.
58:37Misalnya apa, menu sendiri, menu sendiri, terus apa?
58:41-Sersbar, playlist, gitu ya? -Ya.
58:44Tapi ada juga yang approach-nya adalah per... kayak perfection gitu, per team.
58:49Jadi check out flow, check out experience itu satu bagian.
58:53Apa, kayak admin dashboard, say user login buat lihat purchase-nya itu satu.
59:00Itu sendiri juga ada.
59:02Iya. Jadi ini konsep micro front-end ini hampir sama seperti micro service.
59:10Jadi syarat utamanya adalah teman-teman harus sudah punya team yang cukup besar.
59:15Kalau team-nya baru satu dan developer ini masih...
59:18Iya, nggak perlu juga.
59:20Nyusahin-nyusahin diri sendiri, ya. Jangan, ya.
59:24Yang pakai kan kelihatannya ya perusahaan yang besar-besar banget, kan?
59:27Kayak yang terkenal itu kan Ikea contohnya, Ikea, Spotify, terus apa sih?
59:33-Bukalapak pakai micro front-end. -Oh, oke.
59:36Oke.
59:37Nah, terus yang resource-nya banyak online dan bagus lengkap tuh ada e-commerce namanya Zalendo di Eropa.
59:44-Ya, itu kelihatannya besar juga. -Iya, PayPal juga pakai micro front-end.
59:49Nah, kalau produk kita belum sebesar mereka, ya apa?
59:53Tingkat kompleksitasnya dan risikonya kayaknya mungkin belum worth it.
59:59Yes. Oke.
1:00:01Kita balik lagi ke Enhance. Ini cara penggunaannya sekilas.
1:00:05Jadi kita bisa npm create.
1:00:08Asli kayak nyobain sih. Kayaknya seru sih.
1:00:11Sekarang modelnya gini ya, npm init, spelt, atau npm create.
1:00:16Jadi ada script-nya sendiri, kan? Ada starter-nya sendiri.
1:00:20Bisa jalan di browser?
1:00:22-Nanya, npm bisa jalan di browser nggak sih? -Belum.
1:00:25-Oh, belum. -Belum.
1:00:28-Apa web container bisa nggak? -Bilum, ya.
1:00:32-Bisa web container. -Bisa kayak stack width gitu, bisa.
1:00:36Ya, kalau itu. Apa code sandbox, gitu-gitu ya?
1:00:40Ya.
1:00:41Tapi kalau code sandbox-an dia di VM, kan? Di server, kan?
1:00:46Iya, dia running di server-nya.
1:00:50Oke. Jadi npm create, bikin project, masuk ke project-nya, install, start.
1:00:58Terus kemudian dia sudah mendukung file-based routes, ya.
1:01:03-Ampir sama sepertinya. -Ya, routing-nya udah kayak meta framework lainnya sih.
1:01:07Walaupun HTML-based.
1:01:10HTML-based dan file-nya index.html atau file-nya extension-nya HTML.
1:01:16Jadi kita bikin pagesabout.html,
1:01:20udah langsung jadi halaman atau jadi route/about.
1:01:24Jadi path about.
1:01:26Yes. Ini contohnya HTML biasa tanpa ada yang lain.
1:01:31Terus kemudian kalau kita mau bikin element, kita bisa tambahkan satu folder yang namanya elements.
1:01:37Dia sifatnya pure function, artinya tidak terkontaminasi dengan fungsi global,
1:01:45file-level global.
1:01:47Kemudian di dalamnya bisa kita definisikan HTML dengan backtick.
1:01:55Ini sebenarnya fungsi ya, HTML ini ya?
1:01:58Ya.
1:01:59Fungsi yang isinya adalah string ini yang kemudian di interpolasi menjadi tag-tag HTML, ya.
1:02:06Di balik layar dia juga bikin custom element.
1:02:12Oh, ini udah langsung jadi custom element, ya.
1:02:16HTML itu dari props-nya HTML ini ada di sini, ya.
1:02:20Berarti props itu callback, ya.
1:02:21HTML itu callback-nya dia.
1:02:23Ya, callback-nya dia.
1:02:25Hampir sama seperti lead juga menggunakan cara seperti ini, kan.
1:02:28Oke.
1:02:29Kalau pasal.
1:02:30Jadi bukan string literal, ya.
1:02:33Maksudnya, dia function terus isinya string.
1:02:38Ya, dia seperti ini jatohnya.
1:02:41Jadi HTML backtick ini itu sama dengan, oh bukan HTML,
1:02:49HTML HTML seperti ini, backtick, ini sama dengan kurang lebih seperti ini.
1:02:56Ya.
1:02:57Iya, sama seperti ini.
1:03:03Jadi ini.
1:03:04Itu kayak short-time gitu, kayak syntactic.
1:03:07Ya, dari pada kita bikin kayak gini kan agak panjang, kan.
1:03:12Ini kan lebih enak, ya.
1:03:13Tinggal tulis HTML, terus backtick, terus langsung ini aja, gitu.
1:03:18Kemudian di-save sebagai MJS.
1:03:20MJS ini apa?
1:03:21Adalah modul MJS supaya bisa di-export dan import seperti layaknya ES6, ya.
1:03:29Kemudian diabout, ya, di halaman HTML.
1:03:35Di sini di-savenya sebagai MJS bukan sebagai HTML, ya.
1:03:38Elements-nya, ya.
1:03:40Karena elements-nya sendiri ini adalah JavaScript, kan.
1:03:43Kemudian sudah bisa dipakai.
1:03:45Dipakainya dengan, sesuai dengan nama file-nya, yaitu dua kata tadi, ya.
1:03:49Minus header.
1:03:51Kemudian kita bisa gunakan di...
1:03:54Udah, nggak pakai import-importan.
1:03:56Enak, ya.
1:03:59Lebih, iya kayaknya experience-nya lebih nyaman di sini, ya.
1:04:03Dibandingkan yang native, ya.
1:04:06Begitu.
1:04:07Terus ada apa, nih?
1:04:09Paste udah, elements, API.
1:04:11API apa?
1:04:13Create an API route.
1:04:15Oh, ini kita bisa bikin buat backend juga, ya.
1:04:18Buat API.
1:04:19Oh, buat adding data.
1:04:21Buat fetching aja, ya.
1:04:22Fetching data, ya.
1:04:23Yes.
1:04:24Fetching.
1:04:25Ya, mau. Apa? Request, any request, get, post.
1:04:28Nggak.
1:04:30Ada API, kemudian ada public ini apa?
1:04:33Public folder.
1:04:35Oh, static asset, ya.
1:04:37Bisa buat manipulasi head juga untuk nambahin metadata.
1:04:43Benar nggak?
1:04:44Oh, iya, benar.
1:04:45Harusnya iya.
1:04:47Kalau di, itu, kalau di React pakai apa tuh namanya?
1:04:52Helmet.
1:04:54Helmet, helmet.
1:04:56Rusah banget tuh pakai.
1:04:58Ada state.
1:05:00Dia bawa sendiri, dia punya sendiri.
1:05:02Ada state juga, jadi sudah, apa?
1:05:06Sudah ada fitur untuk state management, ya.
1:05:09Ya, mantap, ya.
1:05:12Langsung, ya. Nggak perlu ada import library lagi, ya.
1:05:15Jadi langsung sudah didukung.
1:05:17Jadi ini library-nya.
1:05:19Iya, udah jadi tabung.
1:05:21Jadi jadi spelled, ya.
1:05:23Betul.
1:05:25Kayaknya pada akhirnya yang bikin adoption bakal naik, itu ya framework yang kayak gini sih.
1:05:29Yang bikin orang kita aja langsung tertarikkan, lihat ini.
1:05:33Iya, betul.
1:05:35Karena udah nyoba, saya pribadi udah nyoba, ya walaupun nyobanya nggak diproduksiin, ya.
1:05:39Tadi ada yang nanya, udah ada belum sih yang pakai diproduksiin, ya.
1:05:41Saya sendiri belum nyoba diproduksiin, tapi pada saat bikin konten,
1:05:45nyobain web components, ya lumayan, lumayan capek, gitu.
1:05:49Tapi begitu kita coba pakai spelled, atau pakai lead.dev tadi, atau pakai enhance,
1:05:57itu kayaknya developer experience-nya naik 10x.
1:06:00Biasanya 10x.
1:06:03Naik 10x lipat, ya.
1:06:07Lifecycle, lifecycle, kita lihat, ya.
1:06:11Pakai gambar-gambar segala.
1:06:13Journey-nya.
1:06:15Lengkap, gitu.
1:06:16Lengkap, ya.
1:06:17Ya, sampai server-site-nya pun dibahas.
1:06:20Oke.
1:06:22Roll up.
1:06:24Client-side JavaScript.
1:06:27API Routes, Practice, Progressive Enhancement, pasti.
1:06:31Testing.
1:06:32Ya, pakai apa?
1:06:33Pakai Cypress.
1:06:35Tape.
1:06:38Pakai tape.
1:06:41Belum pernah pakai.
1:06:43Belum pernah pakai.
1:06:45Sama.
1:06:46Oke.
1:06:47Ya.
1:06:48Ya sudah.
1:06:49Itu dia review C-Cut dari Enhance.
1:06:52Kayaknya cukup menarik.
1:06:53Ada TypeScript-nya, ya.
1:06:55TypeScript?
1:06:56Ada.
1:06:57Ada Super TypeScript, kayaknya.
1:06:59Type Definition?
1:07:00Yes.
1:07:01Wow.
1:07:02Oh, JS Doc.
1:07:05JS Doc.
1:07:06Oke sih.
1:07:08Ya, mentekan ada Intellisense-nya.
1:07:11Ya.
1:07:13Ya, menarik-menarik, ya.
1:07:15Astro menarik.
1:07:16Quick menarik.
1:07:17Ini juga menarik.
1:07:18Seru-seru.
1:07:20Kedepannya.
1:07:21Belajar hal baru lagi.
1:07:23Seperti aja belum tamat, ya.
1:07:28Udah ada yang baru lagi, ya.
1:07:30Emang bisa tamat, kan?
1:07:32Enggak, ya.
1:07:33Gak bakal tamat, Nek.
1:07:35Tapi kalau kayak Ria kan udah, istilahnya tamat itu kan kayak mature.
1:07:38Title kayak established.
1:07:40Iya, udah mature.
1:07:41Perubahannya ada, tapi kan gak signifikan dan gak banyak, kan.
1:07:46Ya, udah.
1:07:48Kita bisa catch up dalam ini lah.
1:07:51Kalau udah pernah belajar, pasti masih bisa ngikutin lah.
1:07:54Oke.
1:07:57Kita sudah 1 jam dan 7 menit, tidak berasa.
1:08:00Ya.
1:08:01Sudahi aja.
1:08:02Iya.
1:08:04Topik ini menarik kalau kita akan bahas di sesi-sesi berikutnya, ya.
1:08:10Jadi, terima kasih masukannya.
1:08:12Terima kasih juga diskusinya.
1:08:14Kalau ada yang mau ditanyakan di luar sesi live streaming ini,
1:08:18bisa ke bit.ly/ngobrolinweb.
1:08:21Dan mungkin sekian dulu dari kita malam hari ini.
1:08:27Kalau yang mau follow-follow, saya di @rizavahmi22 di Twitter.
1:08:31Ada @ekafji.
1:08:33Eka, F-Y-I, F-Y, F-Y-I.
1:08:36Dan @ivanchris.com.
1:08:38Ivanchris.com.
1:08:40DOT ya, jangan lupa.
1:08:42Kayak EKA Jalan Gergapak.
1:08:44Ya, benar.
1:08:46Oke, sekian dulu dari kita.
1:08:48Sampai ketemu lagi Menyidupan.
1:08:49Selamat malam.
1:08:51Bye.
1:08:53Eh tunggu, ini ada yang baru nih.
1:08:57Sampai ketemu lagi.
Suka episode ini?
Langganan untuk update episode terbaru setiap Selasa malam!
Episode Terkait
28 Jan 2025
Ngobrolin CSS Wrapped 2024 - Ngobrolin WEB
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...
16 Des 2025
CSS Wrapped - Ngobrolin WEB
🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini kita akan membahas CSS Wrapped, sebuah rekapitulasi perkembangan C...
19 Nov 2024
Ngobrolin Alat Dokumentasi - Ngobrolin WEB
Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...