EP 18

Ngobrolin Storage - Ngobrolin WEB ep18

Bagikan:

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.

Transkrip Bantu Koreksi

0:10[telepon]

0:14Halo, halo, hallo. Selamat malam.

0:19Selamat malam.

0:21Gimana kabarnya semua?

0:24Berbaik. Mas Riza gimana kabarnya?

0:27Baik-baik. Alhamdulillah, apa, saya dan keluarga sudah sehat-sehat kembali.

0:32Jadi mudah-mudahan ada yang kangen ya malam hari ini ya.

0:36Karena kita skip satu minggu.

0:39Saya juga sebenarnya kangen.

0:43Minggu kemarin itu kayak sepil.

0:46Gak ada kegiatan gitu ya, sepil.

0:49Iya, iya, iya, iya.

0:51Oke, seperti biasa, selama nggak lama waktunya ngobrol di web.

0:55Masih bersama Ivan, masih ada Eka, dan masih ada saya Riza.

1:00Nah, ini mungkin karena apa ya, karena kangen-kangenan jadi agak beda sedikit ya.

1:06Sebelum kita mulai ke topik.

1:08Saya mau nanyain satu-satu nih.

1:10Kegiatan apa, kerjaan, kerjaan. Boleh nggak dibocongkan?

1:14Boleh, boleh.

1:16Terus kerjaan apa nih, Ivan?

1:18Minum dia.

1:20Minum juga.

1:22Butuh melegakan, karena kalau soal kerjaan itu.

1:25Sekarang kerja itu lagi...

1:31Saya nggak bisa bilang saya lagi pick, atau nggak lagi pick.

1:34Karena pick mulu, jadi sepertinya normal gitu ya.

1:38Jadi apa nih? Maksudnya bikin website apa atau apa?

1:43Kliennya nggak usah disebutin lah.

1:45Iya, kalau ininya news site.

1:48Oh, news site.

Lihat transkrip lengkap

1:50Publishing site, bukan di Indonesia, tapi masih di Asia.

1:56Okay.

1:58Traffic-nya lumayan.

2:0020 jutaan sampai...

2:05Lumayan.

2:07Pick-nya, dia pernah pick 80 juta sebulan.

2:12Page view sebulan.

2:14Jadi per harinya itu lumayan lah ya.

2:16Kayak sejuta apa dua juta gitu per page view per hari.

2:19Terus kemudian...

2:23Masih berkutat, saya sendiri masih berkutat soal side performance dan core web vital dan fitur-fitur tambahan lainnya.

2:33Namun musuh terbesar saat ini, saya itu, bukan LCP, TTFB itu udah lewat masanya.

2:42Sekarang musuh terutama itu layout shift.

2:45Sulit banget.

2:47Content layout shift itu celes ya.

2:51Banyak iklan atau gimana?

2:54Iklan gampang, iklan itu ketahuan, size-nya.

2:58Tahu nggak apa yang paling susah?

3:01Dynamic content, misalnya lo posting gitu.

3:04Embed, Twitter embed, Instagram embed, TikTok.

3:10Karena kalau YouTube masih bisa di prediksi.

3:14Ukurannya dijelas ya.

3:17Karena Instagram embed atau TikTok embed itu depend sama content.

3:22Nah itu sedang saya nggak bisa menaruh minimal height-nya berapa.

3:28Karena kalau saya bikin terlalu besar, content-nya jadi bolong-bolong.

3:33Kalau saya bikin terlalu kecil, terjadi layout shift.

3:37Jadi mau gimana?

3:39Jadi sedang saya research, jadi target saya saat ini sedang mengumpulkan data sendiri.

3:45Untuk elemen-elemen tertentu.

3:48Jadi saya bisa tahu embed itu apa, dari mana.

3:52Nanti saya cari rata-ratanya berapa.

3:54Layout shift bakal terjadi, tapi saya minimal kan.

3:57Jadi masih itu.

4:01Selanjutnya masih ada satu sisi site WatCamp Asia tanggal 17 Februari di Bangkok.

4:13Jadi WatCamp Asia audiensnya 1800 orang yang sudah beli dikit.

4:20Di Bangkok tanggal 17 sampai 19 Februari.

4:25Jadi saya organizing, jadi organizer termasuk 2020 yang dibatalkan.

4:34Sekarang 2023 akhirnya kita jalan lagi.

4:37- Offline lagi? - Sudah setahun ini.

4:40- Pertama kali offline berarti ya sejak?

4:43- Enggak, kemarin. Kampat kan?

4:45- WatCamp Asia 2020 itu sudah mau terjadi, tetapi dibatalkan karena pandemi hit.

4:54Jadi Februari 2020, namun Desember 2019, pandemi kan.

5:03Akhirnya semua di cancel. Sekarang 2023.

5:09Dan mudah-mudahan doain, teman-teman semua doain supaya lancar.

5:14Jadi kita bisa punya WatCamp Asia pertama kali di 2023.

5:20- Wah, nanti bisa kita review ya. - Kenapa?

5:24- Lo doang atau wakil Indonesia-nya banyak? - Ada 3 orang.

5:30Saya, mbak Devin, yang organizer ya.

5:34Saya, mbak Devin, dan satu mas Haris Rustiono dari Jawa Timur.

5:41- Ada yang jadi speaker dari Indonesia? Pasti ada dong?

5:45- Nggak tahu. - Tahu saya nggak ada.

5:50- Semoga tahun depan. - Udah ada, belum ada.

5:55- Udah tutup ya GFP-nya? - Sudah rangkum semua.

5:59- Udah rangkum lagi banyak. - Udah sayap tahun depan.

6:03- Tahun depan harus ada. - Harus dong.

6:06- Iya. - Nah, yang nonton, siap-siap GFP buat WatCamp Asia.

6:13Tahun depan siapa dari sekarang?

6:15- WatCamp Asia bagi yang nggak dapat tiket, karena tiketnya udah habis.

6:19Jadi jangan tanya saya. Udah habis dari kapan tahun.

6:23- Oh, nice. Berarti apa? - Ada online-nya ya.

6:27- Ada online-nya juga. - Jadi hybrid ya?

6:31- Iya, ini gue kasih link-nya buat siya.wotcamp.org.

6:38- Oke, sambil menunggu. Eka, gimana? Ada update apa nih? Kerjaan-kerjaan?

6:45- Wah, lagi seru nih kerjaan. Jadi aku kerjanya tuh di sebuah NGO.

6:51In-house, konsultan. Jadi maksudnya ngerjain satu produk doang sebetulnya.

6:56Produknya itu semacam, ada user-generated kontennya ada,

7:02static kontennya ada, tanpa iklan, karena ini lebih buat

7:07ada unsur komunitas sama konten manusia.

7:12monthly active user-nya nggak, apa, kalau active user nggak sebanyak, Ivan.

7:17Hanya harian, setiap hari tuh di angka ratusan aja.

7:21Cuma mungkin challenge-nya adalah timnya kecil banget.

7:25Tim developer-nya itu kayak cuma sekitar, kalau yang loading, 3 orang.

7:30Sama QA, UI/UX 1 orang, QA-nya 2 orang.

7:35Apalagi timnya kecil banget dan kerjanya harus cepet banget.

7:40Karena sering, apa, sebenarnya untuk funding,

7:45kan nggak pakai iklan dan nggak menjual apapun.

7:51Terus banyak berurusan dengan funding atau sponsor atau kerja sama.

7:56Jadi sering harus iterate feature-feature, nyoba suatu feature.

8:01Terus sedikit-sedikit ditambahin buat demo misalnya.

8:06Atau mungkin untuk try out dengan pihak yang propose suatu feature.

8:12Belum tentu develop sampai selesai, jadi kayak tek-tekannya

8:15mesti selalu vigil.

8:19Terus yang kalau belakangan ini, yang lumayan seru adalah

8:23baru dapet kayak hand-over produk eksternal

8:27yang di-develop oleh pihak eksternal, pokoknya kita nggak dikasih dokumentasi.

8:33Cuma, maksudnya, di luar itu, beyond itu, nggak bisa tanya-tanya

8:37ya pokoknya nggak ada kontak dengan yang bikin.

8:39Jadi kayak, ya udah, harus mengadaptasi.

8:43Dan itu emang produknya di semacam di hand-over.

8:46Beberapa bagiannya mau diintegrasi ke produk tempat kerja aku.

8:51Cuma ada yang disesuaikan.

8:53Dan pusingnya kadang kayak tiba-tiba dapet codebase

8:57yang dokumentasinya kurang lengkap.

9:00Atau misalnya nggak pakai TypeScript sama sekali,

9:04terus beneran library-nya mesti nyocokin.

9:07Oh, nggak, di auto-update ke versi terbaru.

9:11Jadi untuk ngecek dokumentasi, cross-check dokumentasi pun

9:14mesti ngecek versinya berapa.

9:17Ya, itu yang paling berkesan, yang belakangan sih.

9:20Sampai mau nangis lah udah, handle JavaScript semua,

9:25nggak ada type system, bahkan nggak ada JSDoc-nya gitu,

9:28nggak ada JSDoc, sama versinya nggak tahu gimana,

9:31nggak matching semua sama dokumentasi.

9:34Rewrite, rewrite, rewrite.

9:38Nggak bisa berburu-buru kejar tayang.

9:40Iya, nggak tahu apa yang rewrite.

9:43Ada beberapa bagian yang sukses dapet sign-off

9:47buat bikin baru, pakai Astro.

9:50Ada bagian yang emang setelah dicek,

9:55itu reasonable bahwa daripada maksain,

9:58terlalu banyak yang dimodifikasi dari versi lama.

10:01Jadi kalau bikin baru, pakai stack yang pilihan sendiri.

10:05Karena gua satu-satunya front-end, jadi bebas milih stack juga.

10:08Asal bisa justify ke seluruh tim,

10:12dan misalnya anggota tim lain mau edit,

10:16atau mau bikin modifikasi minor, harus jelas.

10:20Asal semua udah oke, ya udah.

10:23Jadi sebenarnya agak random, agak wild-wild quest juga,

10:28cuma seru.

10:30Cuma seru, oke.

10:32Tapi setidaknya ada dokumentasi, kan?

10:34Atau nggak ada sama sekali? Ada, kan?

10:36Nggak, kalau yang kayak data model, data base,

10:39yang gitu-gitunya sih ada.

10:41Cuma kalau udah yang di function-functionnya,

10:44ya kayak isinya lah, kayak nggak ada testing,

10:47sama nggak pakai jesdoc ataupun TypeScript.

10:50Dokumentasi biasanya dikode itu sendiri katanya.

10:53Kalau mau baca dokumentasi, baca aja.

10:56Nggak ada, nggak ada komennya juga.

10:58Nggak ada komen, nggak ada TypeScriptnya,

11:01atau TypeSystemnya, nggak ada jesdocnya.

11:03Jadi nggak ada interesting-nya.

11:05Oke.

11:07Nah, terus versinya bukan yang terbaru.

11:09Jadi pas nggak buka, misalnya pakai LibraryX,

11:13ya, bisa lah.

11:15Mesti nyocokin sendiri.

11:18Ya, ya, ya.

11:20Lumayan latihan mental lah.

11:22Latihan mental.

11:24Udah coba pakai change GPT, rewrite my code gitu.

11:28Belum minta kredit.

11:32Belum minta kredit.

11:34Masih gratis kok.

11:36Tapi suka down, sering down malah, lebih sering.

11:38Iya, karena gratis.

11:40Oke.

11:44Kalau saya nggak ada update berkait dengan coding-codingan sih ya.

11:48Jadi agak ini juga ya.

11:50Mungkin share sedikit lagi ya.

11:52- Dimana update-nya soal ekosistem?

11:54- Ecosistem. - Nah, ini yang penting.

11:56- Iya.

11:58- Kalau saya terakhir-terakhir ini lebih sering ngerjain

12:03ada sesi foto.

12:07Jadi nggak ada yang sama coding.

12:10Sesi foto, terus juga besok hari Rambu

12:13ada

12:16hari Kamisnya, grand launching-nya.

12:20Jadi persiapan ke sana.

12:23- Kita diundang nggak nih?

12:25- Boleh, silahkan datang.

12:27- Diundang grand launching, ada makan-makannya nggak sih?

12:31- Ada dong.

12:33- Cuma, maksudnya sebagai coder, programmer

12:36biasa coding, maksudnya dulunya biasa coding.

12:39Terus sekarang kan kayak ngurus launching, blablabla,

12:41mesti lebih banyak urusan sama manusia ya.

12:43Daripada biasa ya, biasa ya sama layar, sama pixel.

12:47Sekarang sama manusia, stres nggak?

12:50- Stres sih nggak ya.

12:54Mungkin ada fase adem-samasanya.

12:57Kalau misalkan udah terlalu lama ketemu sama orang

12:59bersosialisasi, mungkin ada stres juga,

13:01paling cepat-cepat pulang, penginin diri, gitu kan.

13:04Tapi di sisi yang lain lebih ke kangen sih,

13:06kangen bikin produk, kangen coding, gitu.

13:09Makanya ini kan, makanya banyak-banyak yang acara live streaming

13:13kayak gini, ngobrol sama teman-teman yang masih

13:16intens dengan coding gitu kan,

13:18masih intens dengan produk, live streaming juga

13:21buat belajar-belajar sendiri.

13:23Karena di kantor udah, basically udah nggak coding lagi.

13:26Ya, walaupun coding, mungkin lebih ke bikin use case lah.

13:29Bikin misalkan contoh aplikasi untuk ngajarin orang

13:33cara penggunaan state management misalkan atau apa gitu.

13:37Jadi bukan real product.

13:39Ya, jadi udah selama beberapa tahun terakhir ya,

13:42begitulah pekerjaannya.

13:44Meminangkan, cuman ada kangen juga ke programming,

13:50bikin produk, bikin fitur.

13:53- Berarti bisa kan dikonekin aja sama Eka.

13:57Bantu aja Eka ngerewrite itu.

14:00- Ya nggak bisa, kalau udah bantuin.

14:04Ini apa, ini commitment waktunya kan harus ada.

14:12- Nah, ini ada komentarnya nih, lebih enak coding.

14:15- Tuh, lebih enak coding daripada debat. Benar, setuju.

14:18- Nah, cuman ini kalau dari aku sih kerasa banget nih,

14:23stand-up meeting kan pengen cepetlar ya,

14:25biasanya terus iya-iya aja.

14:27Cuman kalau lagi ngerjain produk atau fitur yang high velocity gitulah.

14:34Terus banyak potensi buat miss.

14:37Mungkin misscom, entah orang produk pengennya gimana

14:41dari sudut pandang produk, dari designer gimana, dari kita gimana.

14:46Kadang kita harus memperjelas dari sisi kita yang programmer.

14:54Kita kan mungkin ada kecenderungan males jelasin ke orang

14:58yang bukan perspektif coding ya.

15:01Cuma itu kayaknya yang harus dibiasain sih.

15:05- Iya, tapi meeting, ya nggak tahu ya, stand-up dan lain-lain itu

15:14sebenarnya perlu juga kan buat koordinasi.

15:16Kalau misalnya kan kita benar-benar kerja sendiri ya,

15:19bukan kerja, menamanya.

15:21Nanti itu dibahas. Yang satu bikin ini, yang satu bikin itu nggak nyambung gitu kan.

15:25- Cuma mungkin biar nggak lama ya identifai aja bagian apa

15:28yang "wah kayaknya kita abis ini perlu janjian mojok nih."

15:31- Nanti sih stand-up itu jangan sampai bertela-tela pastinya.

15:37Karena stand-up itu kalau saya ya, di tempat saya,

15:40masimal itu 15 menit aja sih, nggak boleh.

15:43Sebisa mungkin ya, kita jarang banget lewat dari 15 menit.

15:47Jadi cuma kayak update aja, kayak temperature check yang ini, bagian ini.

15:51- Ada yang blocking nggak gitu ya?

15:53- Ada yang nge-block, nggak.

15:54Kalau ke-block, hubungi siapa?

15:57Atau nanti jadi extent item setelah stand-up, di-unblock gitu.

16:02Jadi karena di stand-up itu kan kita dapat attention product owner.

16:08Kayak full attention gitu.

16:10Oh, masalahnya ini berarti nanti dikontekin sama bagian ads, contohnya.

16:14Oh, si ini punya masalah ini, hubungannya sama desain.

16:17Ternyata desainnya masih ke-block sama bagian approval.

16:22Approval bagian whatever it is.

16:25Belum di-approved.

16:26Berarti nanti konteksi ini kejar atau langsung dia buka slide-nya, kejar.

16:33Ini gimana update-nya? Udah, lanjut, next.

16:35Jadi di stand-up itu dalam 15 menit, banyak hal bisa ke-unblock.

16:42Daripada kita ngejar-ngejar secara asingkronos.

16:45Oh, berarti ininya harus jago.

16:47Apa namanya?

16:48Yang mengatur, bukan mengatur ya.

16:51Kayak striker.

16:53Itu organizer-nya harus ini ya.

16:56Iya, itu tugasnya PM kalau tempat saya.

17:00Iya, istilahnya harus.

17:02Dia harus berani nge-cut, omongan.

17:04Misalkan udah terlalu panjang nih, langsung ditutup.

17:06Oke, kita nanti ngomongin ini setelah meeting ini ya.

17:09Kita ngumpul lagi beberapa orang.

17:11Oh iya, iya.

17:12Harus ada gitu kan.

17:13Yang tempat saya, oke, kita sekarang sudah jadi kayak obrolannya sudah terlalu dalam nih.

17:17Masa nya relevan, tapi udah makin deep.

17:21Udah di group tertentu aja.

17:22Udah di...

17:23Bikin janji aja.

17:24Jadi, nggak perlu kita bahas, terpisah.

17:27Meeting terpisah.

17:28Iya, harus ada yang begitunya kan.

17:30Yes.

17:31Oke, oke.

17:32Nah, kita udah ngelantur sedikit.

17:34Banyak sih.

17:35Banyak.

17:36Jadi, topik malam ini kita akan bahas tentang media penyimpanan atau storage ya.

17:44Storage.

17:45Yang di browser.

17:46Ya, yang hanya di browser, tidak ngomongin database di sisi backend.

17:50Kita nggak ngomongin Postgre, nggak ngomongin database SQL, NoSQL, dll.

17:54Tapi yang hanya sedia di browser.

17:56Nggak ngomongin hard disk, nggak ngomongin SSD juga.

17:59Yes.

18:00Atau MMC gitu ya.

18:06SSD card.

18:07Masih jatuh freeze tuh.

18:10Luh.

18:12Luh.

18:13Iya.

18:15Aduh.

18:16Bentar, kayaknya mati lampu atau internetnya down.

18:20Wah, iya masih freeze.

18:24Oke.

18:27Kita lanjut, teman.

18:30Kita lanjut aja yuk.

18:31Jadi, Eka gimana? Ada saya atau oh Eka aja yang lanjut?

18:37Evan aja deh.

18:38Oke.

18:39Jadi kita kan mau ngomongin soal storage atau media penyimpanan yang ada di web.

18:44Nah, media penyimpanan di web tuh kan ada beberapa.

18:47Ya, kita coba buka media, ada beberapa dan yang paling sering itu,

18:54kalau teman-teman sering dengar itu local storage atau session storage.

18:59Session storage ada.

19:00Saya coba share screen.

19:02Oh, bisa share screen ya?

19:05Bisa.

19:08Oh, saya bisa share tapi kayaknya nggak bisa naikin ke,

19:12hanya bisa Mas Liza yang naikin ke live.

19:18Iya, emang gitu.

19:20Cerita.

19:21Ya betul.

19:22Buka sendiri-sendiri deh.

19:24Minggu lalu kan kita bahas cookies ya.

19:28Cookies, iya.

19:29Cookies itu juga sudah masuk storage.

19:31Cuman cookies itu ada limitationnya kan.

19:33Dia hanya bisa 16 kilobyte dan 16 apa 64 ya.

19:38Saya lupa.

19:39Size-nya terbatas.

19:40Size-nya terbatas dan hanya bisa string.

19:43Cuma bisa string sama satu lagi.

19:45Apa, selalu karena fungsinya emang buat nyeimbangin apa,

19:51kirim state ke server, selalu terbawa dengan request ya.

19:56Di request.

19:57Nah, ada storage yang lain.

19:59Itu pertama, local storage.

20:01Terus kemudian session storage.

20:05Ada index DB.

20:08Ada web SQL.

20:11Cuma jangan pakai lagi web SQL ya.

20:13Karena web SQL itu sudah.

20:15Terutama malah ada yang namanya web SQL.

20:17Ya, web SQL jangan dipakai.

20:20Jadi nggak usah disebut aja.

20:21Dan terakhir ada cache yang sering teman-teman.

20:24Caching.

20:25Caching. Kita pernah bahas caching nggak sih?

20:28Cache itu kita pernah bahas sekilas waktu kita bahas service worker.

20:32Kita bisa pakai service worker buat mencegat data yang masuk.

20:36Disimpen dulu ke cache.

20:38Buat misalnya yang paling sering kalau lagi offline.

20:41Kita bisa serving dari cache.

20:44Itu juga salah satu bentuk penyimpanan di browser.

20:48Betul.

20:49Jadi kita mau fokus ke tiga hal.

20:55Local storage, session storage, dan index DB.

20:58Dan apa fungsi-fungsinya.

21:00Eka mau lanjut.

21:03Kayaknya Eka ada beda.

21:05Local storage dan session storage.

21:07Dan kapan pakai local storage, kapan pakai session.

21:09Nah, ini sih bagusnya kalau sambil buka artikelnya.

21:14Cuma nggak bisa ya.

21:15Intinya itu kedua hal itu masih bersaudara sih.

21:19Jadi dalam arti API-nya sama sintaksnya dan segala macem caranya sama

21:25antara local storage dan session storage.

21:28Tapi sesuai namanya session itu ya cuma persis atau tersimpan di satu session.

21:35Apa yang dimaksud session?

21:38Ini session browser.

21:39Jadi kalau misalnya tab atau window-nya ditutup, ya udah datanya ilang.

21:45Jadi session storage itu cuma buat penyimpan di satu session browser itu saja.

21:51Sementara kalau local storage, walaupun ditutup, dibuka lagi,

21:55ya bakal ada terus sampai dihapus atau di clear secara manual oleh user.

22:01Storage ini nempelnya di domain kan ya.

22:04Di domain dan subdomain, ya kan?

22:09Local storage itu nggak nempel di browser.

22:13Iya, tapi benar.

22:16Maksudnya local storage nempel di browser tetapi connect-nya ke domain.

22:22Jadi kalau kita buka domain berbeda, storage-nya container-nya beda lagi.

22:28Jadi hanya bisa diases oleh domain yang kita pakai.

22:35Jadi kalau misalnya web.dev atau misalnya kita session storage-nya diset melalui web.dev,

22:48maka hanya bisa diases datanya jika di website web.dev.

22:54Waktu setiap kita buka web.dev sama seluruh part di dalamnya.

22:59Jadi behavior-nya mirip cookie ya.

23:02Termasuk subdomain, kalau nggak salah ya.

23:06Nah, karena ada perbedaan nantinya.

23:11Sebentar lagi akan muncul juga namanya shared storage.

23:16Shared storage API namun masih on trial.

23:24Jadi shared storage ini bisa diases dari domain yang berbeda.

23:28Oh iya nih. Allow access to unpartitioned cross-site data.

23:33Cross-site, betul.

23:35Tapi status-nya masih apa ini? Pro-posal?

23:39Masih origin trial ya?

23:42Origin trial. Ini iniisiatif dari Chromium team.

23:47Jadi diperkirakan masih Chromium only ya?

23:53Untuk beberapa tahun ke depannya.

23:56Kalau tidak diperjuangkan secara cepat, ya mungkin masih lama.

24:01Tapi sepertinya ini pendapat pribadi.

24:07Saat terpati cookies nanti sudah di-cut, maka hanya bisa akses data

24:13untuk multiple cross-site hanya bisa lewat shared storage.

24:18Dan ini sangat berguna bagi privacy.

24:22Karena untuk bisa website, untuk bisa akses data yang ada di shared storage,

24:30itu butuh konsen dari si pengguna.

24:35Penerima, misalnya website A sama website B.

24:39Berarti dua-duanya harus konsen ya?

24:42Betul. Untuk data itu disimpan dan data itu bisa diambil.

24:45Biar bisa terbaca.

24:47Nah, dari local storage dan shared storage itu sendiri,

24:51itu ada kasus yang menarik.

24:59Jadi begini, studi kasus bagaimana kita bisa menggunakan storage di web.

25:04Yang paling simple.

25:06Zaman dulu saya pernah sedikit kesal sudah nulis email panjang-panjang

25:13via web atau nulis panjang-panjang via komen di forum.

25:18Ternyata waktu submit internetnya masalah.

25:25Terus akhirnya harus refresh.

25:28Yang tulisan yang kita tulis panjang-panjang itu hilang.

25:34Ya kan? Pernah enggak teman-teman mengalami seperti itu?

25:38Nah, itu kayaknya orang yang menginternetan jaman dulu tuh pasti, hampir pasti.

25:42Nah, kalau sekarang, kita sudah jarang mengalami hal seperti itu kan?

25:48Jadi kalau misalnya, contohnya teman-teman kalau developer pakai Jira,

25:52pakai Basecamp, pakai apapun itulah yang project management.

25:57Pakai Gmail.

25:59Kalau misalnya sudah nulis, ada penubuhan, dia safe, dia safe, dia safe.

26:06Dan ke mana dia safe?

26:07Ya itu tadi, ke local storage atau di storage-nya di browser.

26:11Jadi kalau di refresh atau di reload akan mengambil data dari storage yang di local tersebut.

26:20Sehingga apa yang kita sudah tuliskan tidak hilang.

26:24Nah, itulah gunanya storage.

26:27Nah, implementasinya nih sering nih.

26:29Maksudnya mungkin kalau sekarang kan lebih banyak orang pakai UI framework ya,

26:33React, Svelte, sebagian, ya cukup banyak library yang sudah integrate dengan local storage.

26:39Jadi kita enggak harus secara manual.

26:41Ya, kalau mau manual, nge-sync ke, nyimpan, nulis ke local storage bisa.

26:48Cuma banyak banget state management, yang library state management,

26:54dan semacamnya yang otomatis membantu kita nge-save di local storage.

26:59Jadi itu memudahkan banget.

27:02Bahkan misalnya kalau kita pakai Svelte,

27:04Svelte itu kan untuk state di level aplikasi, pakainya store.

27:11Itu buat nge-sync ke local storage pun udah relatif mudah.

27:17Berarti udah bisa ya, contohnya di framework-framework tertentu.

27:22Jadi state yang tadi itu sudah bisa disimpan di storage.

27:26Jadi waktu di-reload, dia akan...

27:28Ya, otomatis dia baca.

27:30Oh, nice. Saya belum pernah pakai Svetkey soalnya.

27:33Ya, apapun sih, misalnya kalau pakai, bahkan vanilla JavaScript nih,

27:39kayak state library misalnya nano-stores, itu ada add-on-nya.

27:47Ada library tambahan, kita tinggal tambahin satu baris gitu lah,

27:53buat otomatis nge-save ke local storage.

27:57Menarik, menarik.

27:59Ya, saya yang studi kasus yang paling gampang itu itu.

28:06Jadi dengan adanya storage begini, itu sangat membantu buat teman-teman

28:10kalau ingin membangun sebuah produk di atas web platform

28:14yang bisa bekerja secara offline.

28:19Karena anggap aja membangun aplikasi, tetapi aplikasinya nggak perlu internet.

28:27Jadi cuma kayak contohnya, paling gampang itu anggap aja to-do list.

28:31Jadi mau buat to-do list, saya ada sampelnya ya, to-do-mvc.com.

28:37Jadi teman-teman silahkan nanti bisa lihat saya coba posting aja.

28:40Bisa nggak sih saya posting? Gak bisa.

28:42Gak bisa.

28:43Iya, cuma bisa Mas Riza. Karena saya nggak tahu.

28:47Iya, ada to-do mvc. Tuduh mvc.com.

28:53Nanti teman-teman bisa ke sana.

28:55Itu aplikasi to-do list sampel yang dibuat dengan segala macam framework.

29:08Namun sebagai dasarnya disitu dia menggunakan local storage untuk menyimpan data.

29:14Jadi anggap aja teman-teman kalau membangun sebuah aplikasi PWA,

29:20bisa menggunakan misalnya PWA to-do list, terus simpan data di lokal,

29:25di web storage-nya di aplikasi, di web.

29:30Lalu bisa menggunakan antara local storage atau index DB.

29:36Index DB nanti akan ada pembahasan yang lebih dalam lagi.

29:39Jadi kan nggak perlu connect internet.

29:44Jadi bisa work secara offline.

29:46Dan teman-teman bisa tambah to-do list, bisa kurangin to-do list, bisa.

29:50Ya bisa do apa pun lah. Bisa lakukan apa pun dengan to-do list-nya.

29:55Nah, jika nanti suatu saat mau disinkron dengan online,

30:02aplikasinya, jadi kalau misalnya internetnya mati, bisa tetap jalan.

30:07Dan kalau internetnya online, apa yang ada tadi di local storage,

30:11itu bisa disinkron ulang ke database yang ada di online.

30:15Jadi akan membuat pengalaman dari pengguna,

30:21aplikasi teman-teman itu bisa jauh lebih baik,

30:24tidak tergantung terhadap kondisi internet.

30:28Dan nggak bolak-balik ngebebanin database yang remote kali ya.

30:33Jadi nggak bolak-balik harus nge-send.

30:35Ya bisa dikontigur lah setiap berapa.

30:38Entah setiap berapa detik atau setelah user menyelesaikan suatu task,

30:43baru di-sinkronize ke remote database.

30:47Nah, penggunaan.

30:49Saya juga pernah singgung,

30:51saya juga pernah singgung buat aplikasi yang untuk sales,

30:56yang secara offline, yang pakai backbone,

31:01jaman dulu pakai backbone, cuman aplikasinya...

31:04- Yay, Mas Rizal. - Wey.

31:08Ini namanya teknik apa? Delegasi.

31:14- Ya. - Maaf ya.

31:17- Gak apa-apa. - Terus tiba-tiba banget sih.

31:20Ya, saya mau ini Mas Rizal, kita balik sedikit ke to-do MVC ya.

31:25- Oke, to-do MVC. - Boleh, boleh, boleh.

31:27Jadi tadi kita udah cover apa saja storage yang ada di web.

31:31Misalnya cookies kita udah bahas minggu lalu.

31:36Case kita udah bahas yang lalu.

31:40Terus ada local storage, session storage, dan index DB, iya kan?

31:44- Iya. - Nah.

31:46Tadi ada kasus yang saya sampaikan, itu mengenai to-do MVC.

31:50Ini menggunakan local storage.

31:53Jadi to-do MVC ini sampel untuk to-do list

31:56yang dipakai menggunakan segala macam framework.

31:59Silahkan klik saja salah satu, Mas, kayak Vue.js atau apapun lah.

32:06Ya, react mungkin kalau mau, klik aja yang react atau Vue.js.

32:11- No guess. - Ya, boleh lah, klik aja.

32:14Jadi apapun frameworknya tetap pakai teknologi local storage ya.

32:18- Clear atau nggak, diinspect? - Ya, langsung diinspect.

32:23- Oh, insert again, sir. - Insert dulu apapun.

32:27- Test. - Webbing.

32:30- Eat. Sleep. - Sleep.

32:33Oke, nah, coba lihat sekarang diinspect element.

32:37- Inspek element. - Di bagian application.

32:41- Di bagian application. - Di bagian application.

32:45Kemudian di--

32:47Dia, kalau khusus untuk to-do MVC ini, dia pakai local storage.

32:52- Local storage. - Ya, klik local storage.

32:55Ada ininya ya, dia terapa?

32:58- Domein. - Domein atau sub-domein.

33:01Lihat tuh, ada key-nya. Jadi, local storage itu key value store.

33:06Dan hanya untuk simple to-do di sini cuma satu key-nya.

33:10Sisanya dia semua simpan sebagai objek di value.

33:14Itu lihat, value-nya dibawah ada 0, 1, 2, itu.

33:17Isinya code, eat, sleep.

33:19Oke, berarti ini local storage ini bisa menyimpan objek JavaScript ya?

33:24- Betul. - Nggak, sebetulnya stringing fight kan itu.

33:26- Stringing fight ya. - Kalau kita baca,

33:29kalau kita ambil value-nya itu sebetulnya stringing fight.

33:32Tapi di browser DevTool untuk memudahkan kita ngebajak,

33:36itu ditampilkan sebagai objek.

33:38Tapi kalau dipanggil, hati-hati, stringing fight.

33:41- Harus stringing fight juga ya. - Sekarang, Mas Riza, coba reload.

33:45- Reload. - Reload di sini.

33:47Harusnya kalau tidak kita nggak menggunakan storage, pasti value hilang.

33:53- Betul, dihapus di sini ya. - Iya, coba dihapus aja, Mas Riza.

33:57- Di-clean. - Hapus.

33:59- Hapus, hilang ya. - Kita reload.

34:02- Jadi area kosong lagi. - Yey, nggak ada kerjaan.

34:06Terus aja kerjaan.

34:09- Oke. - Mbak Ika mau lanjut apa tadi?

34:13Kepotong, lanjut Mbak Ika.

34:15Tadi sudah ada beberapa contoh penggunaannya.

34:19Terus salah satu penggunaan yang cocok untuk local storage,

34:23itu untuk hal-hal yang memang cukup ada di browser user aja,

34:28memang cukup ada di client.

34:30Jadi kan local storage itu kontras atau bersebrangan dengan cookies ya.

34:35Kalau cookies, ukurannya terbatas, terus dikirim di setiap request.

34:41Kalau sebaliknya, local storage kapasitasnya lebih besar

34:46dan memang cuma di browser user.

34:48Kalau favorit akuma, ini selalu buat misalnya dark mode, light mode.

34:53Itu kan biasanya nggak perlu juga untuk dikirim atau ditempelin ke request kan,

34:59karena berurusan dengan browser aja, client.

35:02Jadi itu cukup reasonable buat disimpan di local storage.

35:07Nah, terus ini ada komentar.

35:09Shopping card ini melayah abu-abu sih, sebetulnya kalau menurut aku.

35:13Antara shopping card itu mungkin beberapa, ya itu kan tergantung requirement-nya.

35:20Cuma biasanya shopping card tetap perlu disink dengan database.

35:24Karena misalnya kita browsing, kan sering tuh kita browsing suatu e-commerce,

35:30kita masuk-masukin shopping card, tapi belum check out.

35:34Nah, kan sebisa mungkin yang diinginkan adalah kalau kita buka di entah di device lain

35:42atau mungkin setelah uninstall.

35:46Kita buka dimanapun, itu shopping card kita kan tetap harus ada isinya.

35:51Jadi kalau untuk level e-commerce atau marketplace yang reputable,

35:58biasanya itu tetap harus di-store sih.

36:00Bukan reputable, marketplace yang 360 yang ada di mana.

36:05Bukan 360, jadi di semua device, di semua channel ada.

36:12Kalau hanya web platform, mungkin kita bisa tetap pakai local storage.

36:17Tapi kalau hanya web platform, kalau dia clear cache, terus dia buka lagi?

36:22Kalau misalkan dibuka di mobile, itu local storage-nya nggak ikut kan?

36:29- Iya, maksudnya dia buka di browser di laptop, atau browser di mobile,

36:36atau HP-nya dia ada 2, kan sebisa mungkin shopping card-nya harus tetap sama.

36:41Jadi biasanya shopping card-nya harus dikirim ke database remote.

36:48- Tergantung use cache-nya juga ya, berarti ya?

36:52- Ya cuma itu kan seberapa kompleks aplikasi kita.

36:56To-do juga sebetulnya kan, eventually kalau misalnya kita bikin produk

37:01yang udah cukup besar kayak jira atau apapun,

37:04ya to-do list-nya kan nggak boleh di lokal doang, tetap harus disimpan di database juga.

37:10Biar bisa dibuka dari device lain.

37:13- Iya, case-nya adalah yang saya katakan tadi,

37:16kalau misalnya kita sudah lagi nulis komen atau nulis sesuatu,

37:20kalau di-reload, sebisa mungkin, maksudnya sebelum di-send atau sebelum di-kirimkan ke server,

37:28di-cache dulu di local storage, jadi waktu kita reload, dia nggak hilang.

37:33- Iya, bisa di-kombinasikan ya berarti,

37:36antara local storage dan sync ke remote database.

37:40- Iya, apalagi yang ngisi konten gitu ya, tulisannya panjang gitu,

37:46kayak ngisi forum atau konten, artikel dan lain-lain ya, udah capai panjang-panjang tiba-tiba.

37:53- Email. - Tiba-tiba peneksi.

37:57- Salah satu cara untuk winning solution lah, paling cepat gitu,

38:07kita hanyalahin aja local storage, simpan gitu.

38:09Itu udah user experience si pengguna itu meningkat secara tajam.

38:15- Betul, betul.

38:17- Oke, lanjut, kita bahas apa lagi nih?

38:22Tadi udah bahas local storage, storage, terus apa lagi?

38:27To do MVC, index DB udah dibahas?

38:30- Belum, belum. - Index DB belum dibahas.

38:33Nah, index DB deh, next.

38:35- Index DB? - Iya.

38:37- Ini adalah yang ini ya, oke. Apa itu index DB?

38:42- Index DB ini sebenarnya anggap aja seperti kalau teman depan tau,

38:50pernah pakai, mungkin nggak sampai, SQLite lah.

38:54Nah, SQLite tapi sudah ada browser.

39:00- Behavior-nya kayak database beneran ya, bukan cuma value string

39:05yang kayak local storage atau session storage.

39:08Jadi dia perform, performanya bagus, sudah ada indexing key-nya sudah ada

39:18dan bisa nyimpan data lebih banyak dan bisa lakukan SQL query.

39:26- SQL query? - Sorry, bukan SQL query.

39:29Bisa seperti key value stored ya, key value, tetapi lebih performance.

39:36Nah, yang enaknya di atas index DB ini banyak yang sudah framework-framework

39:45tambahan kayak PouchDB tadi.

39:49Oh, PouchDB itu based on index DB ya?

39:52Iya, PouchDB ternyata ada di sini ya, client site implementation of PouchDB

39:57in the browser using index DB. Ternyata dia pakai index DB.

40:01Tadi kita sempat bahas di belakang air.

40:03Sama satu lagi ini Minimongo.

40:07Minimongo.

40:08Minimongo DB versi client yang ada di Meteor.

40:11Iya, jadi bisa juga NoSQL juga bisa.

40:17NoSQL kayak RxDB itu.

40:21RxDB, iya.

40:23Dia juga bisa pakai index DB di belakang air.

40:28Jadi, dan ini bisa jadi kayak, NoSQL ini kita bisa, apa namanya?

40:35Kayak observability-nya bisa, ini lho, bisa kayak kalau ada perubahan terjadi.

40:41Di satu tempat, update semua.

40:44Nah, dia support index, compression, dan replication.

40:50Jadi seperti apa yang kita miliki, seperti punya database beneran.

40:55Jadi kalau butuh behavior dan punya kemampuan kapabilitas database,

41:00tapi pengen di browser, di client, takkenya index DB ya.

41:05RxDB ini berarti dia tidak ada database di sisi backend,

41:12tapi di client aja, di browser masing-masing.

41:15Dan dia bisa syncing dan lain-lain gitu ya, peer-to-peer gitu.

41:19Saya nggak tahu sampai peer-to-peer-nya, tetapi dia cross-tap kan, cross-tap itu artinya,

41:25karena cross-tap kan artinya, maksudnya kalau tab-nya banyak dibuka,

41:30kan index DB itu kan bukan kayak session storage ya.

41:33Index DB itu nempel di domain.

41:35Jadi semuanya bisa akses.

41:37Dan misalnya anggap aja buka to-do list banyak, di tab,

41:44terus update this app, diseluruhi yang lain, ke update.

41:49Oh, oke, oke.

41:52Jadi sempat udah kita bahas juga di belakang layar tadi sebelum mulai,

41:56POSDB, ini adalah pasangan dari POSDB.

42:01POSDB itu database di sisi server ya, di sisi backend.

42:05POSDB ini untuk synchronize.

42:13Jadi data yang ada di client itu kita bisa save tanpa harus ada koneksi internet,

42:18mungkin koneksi internetnya naik turun atau nggak stabil gitu kan.

42:21Atau debatchingnya setiap sekian detik aja kirinya.

42:25Iya, betul.

42:27Dan kemudian ketika internetnya sudah nyala lagi,

42:31atau dalam waktu sekian detik atau sekian menit, dia akan synchronize ke server.

42:38Dan ini, dia bikin library-nya udah satu set ya, berpasangan.

42:43Jadi sintaksnya lebih user-friendly.

42:47Selama ini sih ngeliat index DB,

42:50kayak salah satu hal yang bikin aku nggak terlalu suka,

42:57nggak terlalu tertarik sama index DB itu, kayak penggunaannya, sintaksnya segala macam.

43:05- Sintaksnya kurang ya? - Ya, sebetulnya nggak jelek-jelek amat sih.

43:10Maksudnya udah cukup modern, cuma kayak tetap nggak menarik aja sih.

43:15Kayak lebih tergoda ke superbase atau semacamnya yang udah ada SDK-nya,

43:21ya udah sekalian pakai itu.

43:23Cuma ternyata underlying technology-nya kan tetap penting bahwa,

43:27yang penting konsepnya itu adalah kapabilitas database dengan segala fungsi-fungsinya,

43:33transaksi yang ala database tapi di browser.

43:37Jadi, solusinya ya ini mungkin semacam PouchDB ini kan enak banget tuh kan sintaksnya.

43:42Nah, yang membedakan antara local storage dan index DB,

43:48index DB itu karena bisa indexing, dia lebih performance.

43:54Performance-nya lebih baik daripada local storage.

43:58- Karena local storage itu cuma keyfairing. - Keyfairing aja ya, keyfair listore kan.

44:03Jadi apa aja bisa disimpan, jadi nggak bisa di-structure ya.

44:06Kalau di index DB itu lebih bisa di-structure.

44:11Ini API-nya dia mengikuti gayanya si CouchDB ya.

44:16Jadi, ini ada layer di atas si index DB.

44:20Wujung-wujungnya didulis kayak index DB juga.

44:23Sama halnya dengan Minimongo. Minimongo ini adalah database yang ada di sisi klien,

44:29yang digunakan di framework namanya Meteor.js.

44:33Dan API-nya itu menyelupai cara penggunaan MongoDB di server.

44:37Dan dia bisa sincronis juga, mirip seperti PouchDB.

44:42Nah, itu malah seru tuh, local storage iya, index DB iya, si Minimongo itu.

44:49- Iya. - Back to my local storage.

44:53Tapi pakai index DB juga.

44:56Iya, dia kayak gini aja nih, misalkan nih.

44:59Ini local DB terus add collection, upsert atau update, dan insert gitu.

45:05- Kayak Minimongo. - Kayak Minimongo DB.

45:08Iya, bener-bener mirip, dibuat mirip.

45:11Kayak udah terbiasa dengan, kerja dengan Minimongo DB.

45:16Jadi kita hanya perlu safe di sisi klien.

45:20Nanti dia seru otomatis MongoDB-nya atau Minimongo-nya akan melakukan sincronisasi dengan server.

45:27Kira-kira seperti itu.

45:29- Ternyata bukan berat lagi. - Biasanya ada...

45:32Biasanya ada kasus juga pernah menghasilkan.

45:35Tapi sebelum jamannya ada Minimongo, PouchDB, segala macam,

45:39itu yang membuat aplikasi yang menggunakan elektron,

45:43buat sales yang bisa untuk aplikasi bisa bekerja secara offline.

45:50Nah, saat itu saya pakai storage-nya pakai index DB.

45:55Jadi sedot data dari server, file image-nya saya simpan di lokal.

46:01Bukan pakai Vasis CPI, cuma kayak lokal aja, hard disk.

46:06Dan database-nya pakai index DB.

46:10Jadi kan dia nempel di elektron, cuma lokal pos, blablabla.

46:15Jadi nempel, update, sudah.

46:18Jadi begitu laptop-nya dibawa ke tempat klien yang butuh jualan,

46:24karena dia kayak produk katalog, nggak butuh internet.

46:29Jadi semua langsung bisa presentasi.

46:32Jadi kayak terima order, ini katalognya A, B, C, D, tinggal di-search.

46:36Bisa search juga loh. Yang ini dah catat jadi duit, dah.

46:44Limit lebih nggak ada? Limit size-nya?

46:47Ada, pasti ada kan?

46:50Iya, pasti ada kan.

46:52Tapi gede banget loh, saya nggak tahu, coba saya baca dulu.

46:55Kayaknya gede banget loh, gede banget.

46:57Berarti kasus yang tadi ceritakan ini sekaligus menjawab pertanyaan dari Mas Munawar.

47:02Masih relevan nggak sih, website dashboard sekaligus dia datanya terlalu saja?

47:07Nah, ya itu tergantung use case-nya kan.

47:10Nah, oh iya, salah satu kelebihan index.db juga kan,

47:13kalau local storage, atau session storage, atau cookie kan,

47:17nggak bisa nyimpan file blob ya, B-L-O-B, binary large object.

47:22Nah, kalau index.db, karena dia full feature database, bisa buat nyimpan blob.

47:30Ini saya Google sebentar sedikit, untuk maximum size index.db itu

47:37kalau di Chrome-based browser, Chromium-based browser,

47:41dia bisa pakai 80% dari disk space.

47:44Jadi kalau punya 1TB, ya bisa 800GB.

47:51Iya, kan harus dikonsiderasi...

47:55Cuma harus hati-hati juga, berarti kita... Karena masing-masing client beda kan?

48:00Masing-masing client beda.

48:02Ya device user juga beda, jadi berarti kalau kita bikin transaksi,

48:06harus jangan lupa nge-catch ya.

48:08Betul. Nah, selanjutnya, tadi setelah local storage,

48:15ada session storage, kemudian index.db,

48:18selanjutnya kalau misalkan masih berasa kurang powerful,

48:26nah, ini ada sekarang kita sudah bisa menggunakan SQLite

48:32di browser dengan menggunakan WebAssembly.

48:36WebAssembly ini kayaknya bisa ngapa-ngapain aja ya,

48:39sampai bikin sistem sendiri juga bisa.

48:42Waktu dulu kita pernah bahas Figma ya?

48:44Iya, Figma.

48:46Figma sama apa? Codespaces.

48:50Nah, ini kali ini bisa bikin rantai database berarti,

48:55ngejalanin SQLite.

48:58Betul.

48:59Kemarin saya tunjukin WordPress bisa jalan di browser,

49:02pakai SQLite database ya.

49:04WordPress bisa jalan di browser kan.

49:08Gak usah pakai XAMPP lagi ya?

49:11Gak usah.

49:13Gak usah install lagi gitu ya.

49:15Jadi SQLite ini adalah salah satu database yang mungkin underrated ya,

49:20kalau bisa dibilang ya.

49:21Jadi kalau temen-temen nih misalkan, wah, pengen belajar SQL,

49:24tapi terbatas device misalkan,

49:28wah, gak bisa install macem-macem nih,

49:30mau install Postgreel gak bisa,

49:32ngasih SQL susah gitu misalkan,

49:34dibatasi antara terbatas mungkin sistem requirementnya,

49:39atau mungkin gak boleh install macem-macem di laptopnya gitu kan.

49:42Atau pengen cepet aja.

49:44Betul.

49:45Nah, kalau apa, mungkin bisa melirik si SQLite ini,

49:49karena SQLite ini ya,

49:50bedahannya hanya satu file, kemudian udah.

49:53Tidak ada apa,

49:56kalau misalkan kayak Postgreel mySQL gitu,

49:58dia ada di install dulu kan,

50:00di install, terus ada di folder apa,

50:02di dalamnya ada sub-folder-sub-folder lagi gitu kan.

50:05Kalau SQL ini cuma satu file,

50:06kita tinggal buka SQLite 3 spasi 6 file-nya udah.

50:09Dan kita bisa menjalankan atau belajar SQL.

50:13Semua transaksi SQL.

50:15Iya, semua sintak SQL bisa dicoba di sini.

50:18Jadi ini salah satu database yang cukup,

50:22sebenarnya cukup banyak yang digunakan ya.

50:24Di handphone semua temen-temen,

50:26mau OS-nya apa, pasti itu ada SQLite.

50:28Kalau di kalangan front-end developer nih,

50:31SQLite naik-daun gara-gara remix,

50:34apa, framework remix,

50:36ini by default semua tutorial-nya,

50:38dan semua kayak starter site yang paling basic,

50:41demonstrate-nya pakai SQLite,

50:43tapi kita bisa replace mau pakai Postgreel,

50:45atau pakai apa lah, yang lain bisa.

50:48Cuma by default, contoh-contohnya pakai SQLite.

50:51Jadi di kalangan orang yang mungkin para developer

50:54yang mungkin belum terbiasa pakai database,

50:57nggak punya Apache, nggak punya segala macam,

51:00ini SQLite ngebantu banget.

51:03- Yes. Dan sekarang,

51:06kalau misalkan merasa index DB kurang powerful,

51:09sekarang kita bisa menjalankan SQLite di sisi browser.

51:12Jadi dengan menganfaatkan WebAssembly,

51:15SQLite-nya itu bisa jalan di browser,

51:18jadi kita bisa, apa ya,

51:21kalau misalkan bikin tutorial SQL yang interaktif,

51:25website gitu, aplikasi web yang interaktif

51:28untuk belajar SQL.

51:30Itu bisa perlintah SQL-nya,

51:32bisa dieksekusi di SQLite, di browser,

51:34nggak perlu diinstall macam-macam.

51:36Tapi ada balasannya ya, nggak bisa sampai,

51:39kalau nggak salah,

51:41SQLite bisakah sampai group by?

51:45Bisa ya? - Bisa, bisa, bisa.

51:47Dia udah full support SQL ANSI, kalau nggak salah.

51:51Pokoknya udah standar lah, standar SQL itu udah bisa.

51:55- Cuma ini sih repotnya kalau kita pakai serverless,

51:59SSR serverless, semacam remix, atau Next.js,

52:03itu nggak bisa sembarang nimpah file-nya

52:06kalau udah dari remote sih.

52:08Misalnya kita pakai Next.js atau remix gitu

52:11yang udah CICD,

52:14yang misalnya kita nge-deploy, nge-push ke GitHub,

52:17ke repo, terus dia otomatis nge-build di lambda function,

52:21itu kelihatannya nggak bisa deh, nggak bisa.

52:24Jadi gatasnya di situ.

52:26Kalau mau ya, kita harus... - Bikin server sendiri, tetap ya.

52:30Atau yang gampang, jalanin transaksinya di lokal,

52:33baru di-push lagi. - Oh, iya, iya, iya. Benar, benar.

52:36Nah, ternyata si SQLite ini menganfatkan sebuah web API

52:42yang namanya file-system. - Lah, balik ke file-system berarti ya?

52:45Balik ke file-system karena

52:47file-system ini yang membuat dia bisa berjalan, karena ya itu.

52:51Jadi dari apa?

52:53Mungkin buat teman-teman yang nggak familiar dengan file-system,

52:55kalau ada yang pakai Figma,

52:57mungkin developer jarang ya, pakai Figma ya.

53:00Kalau dulu kan...

53:02Karena desainnya hand-overnya di Figma.

53:05Oh, hand-overnya lewat Figma ya.

53:07Kalau dulu kan Figma itu,

53:09kalau misalkan kita mau save file, itu kayak download kan.

53:12Download file Figma kan.

53:14Begitu kita mau load, juga kita kayak upload file-nya kan.

53:19Nah, dengan adanya file-system itu udah perlu seperti itu.

53:22Jadi dia bisa membaca folder yang ada di lokal komputer kita.

53:28Tentunya dengan permisihan tertentu ya, pasti ada ininya ya.

53:33Jadi native file-system API sudah didukung oleh browser,

53:36dan API ini yang dimanfaatkan oleh SQLite untuk meletakkan

53:42file data SQL-nya di folder atau di lokal komputer kita.

53:50Makanya dia batasannya lebih besar dibandingkan sama yang tadi apa,

53:56index DB atau lokal storage dll.

53:58Karena dia sudah berada di lokal,

54:02sudah berada di komputer kita masing-masing.

54:05Nah, ini tuh udah didukung semua browser,

54:12atau masih Chromium-only, atau gimana ya statusnya?

54:16Mari kita lihat.

54:17Coba paling bawah biasanya.

54:19Masa sudah official sudah ini.

54:25Tapi ini masih Chromium deh.

54:27Gak ada ya di sini.

54:29Kita buka Can I use ya?

54:31Can I use.com

54:34File, API.

54:41Belum bisa, Safari dan Firefox belum bisa, sayang sekali.

54:45Mana? Ini aja.

54:47File API, bukan ya?

54:49Bukan, file system.

54:51Oh, file system.

54:53Oh, masih kuning dan merah ya.

54:58Itu tuh file system dan file writer.

55:01File system access, oh ini.

55:04WebKit support with prefix.

55:07Kok WebKit? Oh, mati.

55:10Duh, tapi sharing-nya bisa. Nah, aman.

55:15Ini Safari, merah.

55:18Firefox.

55:20Firefox mana? Oh, merah juga.

55:23Itu kan file system.

55:27Kalau file system API, yang bawah gimana coba?

55:30Yang bawah, awal lagi.

55:33Berarti, udah bisa.

55:35Berarti yang...

55:38Jadi ada beberapa API-nya masih belum bisa,

55:42tapi kayaknya yang file system API-nya, core-nya udah bisa.

55:47Yang file writer-nya yang belum bisa.

55:50Saya nggak tahu perbedaannya.

55:53Belum bisa nulis ya.

55:55Tapi saya nggak tahu itu apa.

55:56Mungkin kita perlu baca, mungkin topik selanjutnya kali.

55:59Ya, file system.

56:02Return of reading and writing file to a sandbox file system.

56:06Belum pernah dengar saya malah.

56:08Menarik.

56:11Banyak ya. Ada sync juga.

56:14Ada file system entry.

56:16Apa ini? Beda-beda ya?

56:19Kayaknya dipecah kelasnya gitu biar granular.

56:23Jadi ada yang bisa read aja,

56:25ada yang sudah bisa read and write gitu ya.

56:28Lebih step-by-stepnya, lebih kelihatan gitu kali ya.

56:33Cuma kalau dilihat-lihat, berarti sepanjang yang semua kita bahas tadi,

56:37yang paling aman udah ada di semua browser,

56:39berarti kan local dan session storage sama index DB ya.

56:42Yang udah paling stable dan udah lama bertahun-tahun ada.

56:46Dan index DB juga udah banyak ini ya.

56:50Library dan layer di atasnya.

56:53Jadi kalau misalkan merasa index DB kurang menarik,

56:56mungkin bisa cek kayak pause DB.

56:58Mungkin pause DB harus connect sama pause DB ya.

57:01Yang lain-lain ada banyaknya.

57:04Nggak juga sih.

57:06Jadi nggak perlu connect.

57:07Oh, kalau mau syncing baru ya, oke.

57:10Jadi tetap bisa digunakan walaupun tidak ada server kaos DB-nya ya.

57:14Kalau nggak perlu sync ke remote database ya nggak usah pakai.

57:18Tapi pertanyaannya apakah masih...

57:23Iya tadi pertanyaan tadi.

57:24Kalau Ivan tadi kayaknya nemuin ya,

57:26ada satu kasus di mana semua aplikasi tidak membutuhkan server.

57:30Jalan di elektron, semua teknologi web tapi offline.

57:34Termasuk database-nya.

57:36Itu kasus yang umum nggak sih di aplikasi jaman sekarang gitu?

57:43Kalau aku pribadi belum pernah harus yang kayak gitu sih.

57:48Jadi biasanya malah cuma perlu local atau session storage aja.

57:53Ya kayak tadi buat handling misalnya user udah ngetik panjang-panjang

57:57biar tetap safe.

57:58Habis itu ya remote database biasa sih.

58:01Jadi belum sejauh ini.

58:03Biasanya aplikasi yang produk yang bisa offline mode.

58:09Itu lebih perlindung.

58:11Terus ingat juga ya, web worker dan service worker itu kan nggak bisa akses DOM.

58:18Jadi perantaranya middlemanenya ya ini, si storage-storage ini.

58:24Jadi anggap aja kalau misalnya teman-teman punya aplikasi

58:30yang bisa fetching data dari online, tetapi jangan diakses melalui main thread.

58:37Bisa di alokasikan, didistribusikan menggunakan web worker untuk ngambil data

58:44synchronize ke index DB.

58:48Nanti index DB-nya berubah, data-nya berubah.

58:51Otomatis UI-nya berubah.

58:53Betul. Contohnya misalnya teman-teman mau bikin spreadsheet.

58:57Spreadsheet tabular data yang besar gitu ya.

59:01Yang mau disinkronkan ke aplikasi yang lain secara real-type.

59:09Jangan pakai main thread.

59:11Karena kalau pakai main thread, kalau lagi synchron, spreadsheet-nya ngefreeze.

59:17Jadi pakai web worker.

59:19Bisa digabungkan dengan web RTC.

59:23Bisa pakai web RTC. Jadi dari peer-to-peer.

59:32Itu kayak Pub/Sub ya?

59:34Mirip Pub/Sub.

59:36Kayak torrent.

59:38Jadi bisa konek ke, jadi contohnya kita ambil spreadsheet ya

59:43yang diakses secara berbanding secara tiga orang.

59:46Jadi web RTC sesama tiga orang.

59:49Yang konek ke web RTC ini menggunakan jika ada update baru,

59:57simpan dulu si web worker yang akan mengupdate ke index DB, contohnya ya.

1:00:02Jadi index DB-nya, kalau terjadi perubahan di index DB,

1:00:05kan tadi si library-nya ada observable-nya kayak gitu,

1:00:08bisa dilihat perubahannya apa.

1:00:11Dan si UI-nya kita tinggal melihat perubahan itu,

1:00:14event itu didispatch, terus kemudian value-nya keupdate.

1:00:19Itu bisa seperti itu juga.

1:00:22Jadi aplikasinya bisa tetap performance, index DB-nya performance,

1:00:29jalur koneksinya via web RTC atau kalau misalnya online,

1:00:38bisa lewat web worker.

1:00:40- Tapi worker class berarti bisa berinteraksi sama index DB langsung ya?

1:00:47- Bisa. - Mantap.

1:00:50Kan soalnya worker class, entah itu web atau service worker,

1:00:54kan dia nggak bisa mengakses local storage ya,

1:00:56karena itu masuknya di client site, di browser, nggak bisa mengakses langsung.

1:01:03Local storage bisa sepertinya ya, local storage bisa.

1:01:10- Bisanya mengakses cash kelihatannya, belum ngecek.

1:01:15Penasaran gitu, kan service worker.

1:01:20Kalau cash bisa, memang worker bisa interaksi sama cash.

1:01:26Oh, nggak bisa.

1:01:29Gak bisa? - Iya, lanjut. Local storage nggak bisa.

1:01:33- Local storage nggak bisa, oke.

1:01:35Ini pertanyaan lanjutan dari Damar.

1:01:37Eskilite yang di browser yang tadi ya.

1:01:40Jadi kalau misalkan nyimpen data, pakai file system API,

1:01:43tapi bikinannya, bikinnya file XML supaya bisa mudah di-share.

1:01:48Bisa. Eskilite bisa nyimpen file kan, blob ya, jadi bisa.

1:01:55Possible. Jadi XML-nya disimpan di database gitu maksudnya.

1:01:58Bisa? - Bisa, bisa.

1:02:01- Ada pertanyaan satu lagi ini menarik juga.

1:02:05Jadi dia ini Nian JS.

1:02:10- Koceng.

1:02:13- Iya. Masih bingung karena ada satu artikel yang bilang

1:02:19kalau JWT itu aman disimpan di local storage.

1:02:23Tapi di artikel yang lain, simpannya di session storage.

1:02:27Lebih baik mengenak simpan token JWT di sini maksudnya ya.

1:02:31Itu lebih baik disimpan di local storage atau di session storage.

1:02:35- Bahkan ada yang bilang, Pak, kalau token ya,

1:02:38kalau contain data yang sensitif, jangan disimpan di browser.

1:02:42Cuma itu tergantung lead, team lead kalian masing-masing.

1:02:47Ada yang bilang itu nggak accept kalau nggak boleh di client side,

1:02:51nggak boleh di browser sama sekali, harus di cookie.

1:02:54Dan cookie pun ada aliran pemikiran ya, harus HTTP only.

1:03:00Maksudnya hanya bisa di server side, di request.

1:03:03Jadi di handle di sisi server, nggak bisa dibaca dari document.cookie.

1:03:08Cuma ya, kalau pun di local atau session storage,

1:03:13sebenarnya satu-satunya perbedaannya kan

1:03:15cuma session storage itu kalau tab-nya ditutup, hilang.

1:03:18Jadi nanti kalau browser buka tab baru, misalnya tadi udah login.

1:03:23Terus user nutup tab, buka tab lagi, dia terlockout.

1:03:29Jadi itu behavior yang diinginkan seperti apa.

1:03:32Gitu doang sih bedanya, antara local dan session.

1:03:37- Kalau JWT ya, JWT itu kan sebisa mungkin,

1:03:43payload-nya itu kan bisa dibacakan cuma base 4.

1:03:52Sebisa mungkin itu kan isinya cuma data umum,

1:03:55dan data validasinya itulah yang kan ada private key

1:04:00yang nggak boleh di-share kan, yang untuk bisa ngevalidasi hash-nya itu.

1:04:08Sebenarnya JWT itu bagi saya, pendapat pribadi,

1:04:16nggak apa-apa sih disimpan di local storage, nggak masalah.

1:04:19Karena itu membuat supaya aplikasi kita bisa berhubungan,

1:04:24divalidasi koneksinya ke server.

1:04:27Namun, sebisa mungkin pertama di sisi server validasi,

1:04:36dari sisi hash-nya harus bisa divalidasi, dan timestamp.

1:04:42Timestamp itu juga penting divalidasi.

1:04:45- Tapi harus di-handle dari server-site ya, dari API.

1:04:50Dari API atau apapun itu service buat apa, urus authorization.

1:04:57- Betul.

1:04:59- Iya, karena kalau apa-apa disimpan ke database,

1:05:02kasian database-nya.

1:05:04Berat ya, nulis database itu bukan pekerjaan ringan gitu ya.

1:05:08Walaupun kalau kita simpan kayaknya cepat gitu.

1:05:11Tapi kalau sudah 100 orang secara simultan kan berat gitu kan.

1:05:15Dan istilahnya membutuhkan biaya yang sangat besar juga gitu.

1:05:19Makanya kalau misalkan setiap kali request harus nge-check ke database,

1:05:25itu nggak efisien juga kan.

1:05:27Yang penting datanya itu tidak bisa dibongkar,

1:05:32kalau hanya token-nya doang kan nggak ada informasi yang bisa di-extract dari situ kan.

1:05:45Nah, kalau dapat hash-nya atau dapat salt-nya, itu baru.

1:05:50- Tapi itu pun tetap harus siap invalidate.

1:05:54Yang penting itu semua bisa segera di-invalidate

1:05:57kalau terdeteksi ada kecolongan.

1:06:02- Ya, kayak timestamp tadi, jadi harus ada time-out-nya berapa lama gitu ya.

1:06:08Masa berlakunya, expired-nya berapa lama.

1:06:11Kalau udah expired, coba dihapus lagi cookie-nya, login lagi, dan lain-lain.

1:06:16Nah, ini juga pertanyaan yang bagus tuh.

1:06:22Sebenarnya web platform PWA ini udah powerful buat storage.

1:06:27Apa masih ada lahasan untuk pakai elektron atau tauri?

1:06:30- Nah, gimana tuh? Belum ada pengalaman pribadi sih buat compare yang head-to-head.

1:06:38- Kalau sebenarnya saya sekarang preferensinya nggak pakai elektron lagi.

1:06:43Jadi sebenarnya udah murni langsung menuju web aja dan web-nya dipatahin service work dan PWA.

1:06:51Itu defaultnya.

1:06:53Kasus yang saya bilang pakai elektron itu karena itu adalah proyek 6 tahun lalu.

1:06:59PWA itu masih di awang-awang.

1:07:03Sudah ada tapi belum oke.

1:07:06- Belum ada desktopnya, kayaknya belum terlalu ini kan?

1:07:10- Desktopnya belum di-support kan? Baru akhir-akhir ini kan?

1:07:12- Baru-baru. - Akhir-akhir ini baru ada.

1:07:15Jadi, alasan untuk elektron.

1:07:21Mungkin kalau buat aplikasinya sekelas text editor, maybe ya, kayak atom.

1:07:30- Ya, atom. Atau udah mendinggal. - VSCode lah.

1:07:35- VSCode lah, VSCode ya. Seperti VSCode, mungkin masih butuh elektron.

1:07:40Karena butuh build-in browser. Jadi waktu kita...

1:07:45Distribute able-nya kita itu waktu kita kasih ke user, mereka nggak perlu install browser lagi.

1:07:51Sedangkan kalau kita PWA, mereka butuh install browser kan.

1:07:55- Itu yang dialami.

1:07:57Jadi misalkan saya pakai, sekarang sering pakai misalkan kayak xkaldraw atau pake tldraw dan lain-lain.

1:08:04Itu kan PWA ya.

1:08:06Kita mau buka aplikasi desktop-nya, kita harus buka browser-nya.

1:08:10Misalkan saya waktu install aplikasi di desktop-nya itu menggunakan Brave.

1:08:17Tapi sehari-hari saya menggunakan Firefox misalkan.

1:08:20Lagi buka Firefox tiba-tiba mau nulis-nulis, itu kan menyata buka xkaldraw, buka lah itu Brave.

1:08:27Jadi dia buka Brave dulu, baru dia buka aplikasinya.

1:08:31Jadi itu yang mungkin ada kasus dimana ya memang harus desktop.

1:08:36Harus desktop apps ya, elektron atau tower yang bisa menyelesaikan masalah itu mungkin ya.

1:08:43Tapi kalau nggak masalah, browser-nya kebuka di belakang layar ya nggak ada masalah sebenarnya menggunakan PWA juga.

1:08:56Oke, kita sudah satu jam. Masih ada yang mau didiskusikan lagi?

1:09:02Oh, ini Dito. Dita, Dita.

1:09:06- Wow, ada yang notice kita nggak lah. - Ada yang notice ya.

1:09:12Mohon maaf ya, kita absen sehari, sehari seminggu.

1:09:16Satu minggu tidak bersuai ya.

1:09:19Dita ini adalah GDG Makassar ya.

1:09:22Yang kemarin ngajakin makan ikan fugu Indonesia.

1:09:33Wah, sepertinya sudah tidak ada lagi topik yang mau kita diskusikan, kalau begitu mungkin kita udahan dulu.

1:09:43Terima kasih banyak buat semua teman-teman yang sudah menemani diskusi kita malam hari ini. Cukup seru.

1:09:50Maaf tadi koneksi jadi tiba-tiba mati dan menghilang sebentar, berapa lama.

1:09:56- Iya. - Mudah-mudahan tidak terjadi lagi.

1:09:59Maalum koneksi saya cuma satu, nggak kayak Ivan, ada redundansinya.

1:10:04Lepikasi. Loh, redundansi, redundan.

1:10:08- Load balancer, nggak bisa ya. - Load balancernya, jadi ada dua provider kan.

1:10:14- Ada satu. - Callback. - Sebenarnya ada gue sih, cuman lagi di PC nggak ada Wi-Fi.

1:10:20- Satu juga mati. - Gak bisa titeri, jadi bingung.

1:10:25- Begitu lagi harus beli Wi-Fi, dongle. - Bekabel.

1:10:32Oke, kalau gitu terima kasih banyak sekali lagi buat diskusinya seru-seru.

1:10:38Jadi mudah-mudahan kita ketemu lagi minggu depan di jam yang sama, di hari yang sama,

1:10:45di selasa malam jam 8. Kalo takut ketinggalan, subscribe aja.

1:10:52- Jadi nanti bisa... - Pencet lonceng.

1:10:55Ya, ada pencet loncengnya.

1:10:57Kalau ada yang mau ditanyakan lagi, di luar sesi live, teman-teman bisa ke bit.ly/nobrolinweb

1:11:04Atau ke sosial media kita masih mesti tanyain aja, nggak apa-apa, di DM atau di Twitter dan lain-lain.

1:11:10Oke, kita mamit. Terima kasih banyak buat teman-teman semua.

1:11:14Mudah-mudahan minggu depan kita ketemu lagi dengan topik-topik yang menarik lagi.

1:11:20Dan tetap di tunggu topik-topik menarik lainnya. Jangan sampai kita menggunakan CTPT untuk...

1:11:26Terima kasih, selamat malam. Sampai jumpa lagi. Bye-bye.

Suka episode ini?

Langganan untuk update episode terbaru setiap Selasa malam!

Langganan Sekarang

Episode Terkait

File Upload Strategy - Ngobrolin WEB
EP 146

13 Okt 2025

File Upload Strategy - Ngobrolin WEB

🗣️🕸️ Selasa malam waktunya #ngobrolinWEB! Malam ini akan mendiskusikan topik yang dikirimkan oleh penonton setia kita ...

Ngobrolin LocalFirst - Ngobrolin WEB
EP 113

21 Jan 2025

Ngobrolin LocalFirst - Ngobrolin WEB

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...

Ngobrolin Web API Baru - Ngobrolin WEB
EP 82

13 Mei 2024

Ngobrolin Web API Baru - Ngobrolin WEB

Yuk mari kita diskusi dan ngobrol ngalor-ngidul tentang dunia web. Agar tetap up-to-date dengan teknologi web terkini. ...

Komentar