EP 9

Ngobrolin Konsep JS: Event Loop - Ngobrolin WEB Ep5

Bagikan:

Konsep concurrency: async & paralel - https://blog.avenuecode.com/understanding-the-javascript-concurrency-model - https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif Callback: - https://www.youtube.com/watch?v=cCOL7MC4Pl0 - https://developer.mozilla.org/en-US/docs/Web/API β€” konsep Web API, API yang hanya ada di browser, tidak ada di JS runtime lain - Kenapa perlu mempelajari event loop, call stack, dsb? Apakah diajarkan di kurikulum web development? Apa manfaat konkritnya, khususn Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.

Transkrip Bantu Koreksi

0:10[Pintu teater dua dibuka]

0:13Perhatian-perhatian, pintu teater dua belum dibuka.

0:18Halo Selamat Malam, selamat hari Selasa.

0:21Hari Selasa adalah waktunya ngobrolin web dan masih bersama kita bertiga di sini.

0:28Ada saya Riza, co-foundernya Hektifate, terus juga ada teman saya namanya Ivan.

0:34- Halo Ivan. - Hai, nama saya Ivan.

0:36- GDI web. - GDI web dan ada Eka tentunya.

0:40- Halo. - Halo, Eka GDI web juga.

0:43Gimana, gimana, gimana.

0:47Oh iya, untuk episode ini disponsori oleh, belum ada sponsor kita ya.

0:52- Belum ada sponsor. - Kalau ada yang mau sponsor bisa email ke Ivan @Ivan.

0:57- istianto.com - istianto.com

1:00Ya bisa jadi short ke saya Eka atau Mas Riza, silahkan.

1:04Enggak, enggak, enggak, enggak. Kita belum mencari sponsor dan belum butuh.

1:08Jadi, jadi malam hari ini kita akan ngobrolin tentang konsep fundamental dari JavaScript,

1:14- yaitu event look. - Event look.

1:18Ya, ini adalah salah satu konsep yang, apa ya, yang cukup penting karena

1:25kalau kita tidak mengerti konsep ini, bisa-bisa kita, ya enggak.

1:30Alur perjalanan JavaScript itu gimana, stres, terus enggak suka, benci, gitu ya.

1:36Dan kita mengalami sendiri ketika kita bekerja, terus dapat JavaScript, dan ketemu res kondisi,

1:45kok ini muncul duluan, kok ini muncul belakangan, padahal ini udah di-print duluan, gitu-gitu.

1:49Itu semuanya adalah event look.

1:52- Berkaitan sama event look. - Berkaitan dengan event look.

1:56Dulu waktu saya bekerja, tim saya sangat-sangat tidak seduka dengan JavaScript.

2:01Katanya, ini programming language yang tidak pasti.

2:08- Oh iya, susah diprediksi, ya. - Gak benar-benar pasti.

2:11- Susah diprediksi. - Ya, outcome-outcome itu enggak pasti.

2:13Itu apa sih, gini. Masa kita mau manggil baca, contohnya baca local stories aja,

2:20atau manggil API, hasilnya kok enggak ada sih.

2:25Hasilnya kok enggak ada sih, gimana hasilnya, kok hasilnya malah fungsi.

Lihat transkrip lengkap

2:30- Promising, gitu ya. - Atau kadang bisa, kadang enggak pasti jalanin,

2:35kadang kalau kita menghitung dengan tanda kutip, bener, urutannya normal sesuai ekspektasi,

2:41giliran di pitching ke client atau di hand over, langsung berubah semua.

2:47- Nah, itu kan repot ya. - Nah, mungkin teman-teman yang nonton

2:53mungkin punya pengalaman juga, boleh di-share juga ya ke kita,

2:56pengalaman berkaitan dengan JavaScript.

3:00- Terus ada dulu itu istilahnya callback hell, gitu ya.

3:06- Callback hell. - Karena saking enggak ngerti nya JavaScript,

3:10semuanya di dalam callback, kayak sampai nested, callback kemana-mana.

3:15- Terus sampai dia bingung sendiri, aduh, callback-nya banyak banget.

3:21- Jadinya malah ini ya, sekonsial ya, jadi enggak guna itu si asingkronusnya ya.

3:27- Iya, betul sekali. - Mungkin dulu juga,

3:30karena belum terlalu stabil ya, API yang memudahkan, web API yang memudahkan kita

3:37jalanin asing, kayak promise all, sama promise all settled, mungkin belum ada asing-wait, belum ada semua ditaruh.

3:45Masih pakai XHR itu loh. - X-H-R ya, X-H-R.

3:52- X-H-R Amsterdam, pakai X-H-R. Jadi apa boleh buat karena emang dulu

3:58belum terlalu mendukung ya, jadi kayak semua ada callback.

4:01Nah, callback-nya nested sudah banyak, kita nge-handle yang di tengah ini bingung,

4:05jadi kan skip ya. - Iya. Nah, konsep si event loop asingkronus ini sendiri sebenarnya

4:14bahasa dasarnya kalau di platform atau di bahasa pemorgana itu adalah konkurrensi.

4:21Konkurensi itu adalah mengakukan sebuah task atau pekerjaan, baik itu secara paralel atau secara asingkronus.

4:29Dan kebetulan si Javascript pakai cara asingkronus. Kalau misalkan kayak bahasa seperti Golang,

4:36terus Erlang Alixir, terus apa lagi yang paralel ya, dan beberapa yang lain lah ya, itu ada yang paralel.

4:43Nah, sebelum kita masuk ke bahas tentang event loop, saya mungkin bahas sedikit aja tentang perbedaan antara asingkronus

4:52dan juga paralel, biar agak jelas sedikit ya. Dan ini adalah salah satu materi yang diajarkan di bootcamp,

5:00jadi saya memperlihatkan sedikit slide-nya. Nah, ini analogian cukup bisa ditangkap lah sama student-student

5:13karena ada gambar dan lain-lain. Jadi konsepnya si asingkronus ini, dia mengerjakan misalkan si worker-worker ini

5:24atau tujuh anak ini, diminta untuk menyelesaikan tujuh kado sampai selesai. Jadi mulai dari dimasukin hadiahnya,

5:33ditutup, dibungkus, kemudian diikat dan lain-lain. Jadi mereka melakukan satu pekerjaan masing-masing.

5:41Misalkan ini dia mengerjakan tujuh, tapi dia mengerjakan pekerjaannya adalah membuat kotaknya,

5:47kemudian anak kedua misalkan masukin mainannya, anak ketiga menutup kotaknya, anak keempat membungkus,

5:53kelima dan seterusnya sampai selesai. Setiap anak akan mengerjakan tujuh kotak atau tujuh hadiah, gitu.

6:01Ini konsep asingkronus. Jadi dia melakukan pekerjaan yang berbeda untuk setiap worker atau setiap anak disini dalam hal ini.

6:12Kalau paralel itu dia seperti delegasi, dia dikasih tugas, satu anak dikasih tugas untuk menyelesaikan satu mainan saja

6:22atau satu hadiah saja, gitu. Tapi dia mengerjakan banyak tas, tasnya banyak. Mulai dari bikin kotaknya,

6:29masukin kado-nya, terus ditutup, diikat dan lain-lain. Masing-masing ada plus minus.

6:35Kalau minus yang paling besar dari asingkronus adalah, besar kemungkinan terjadinya kegagalan di satu anak,

6:44maka semua proyeknya atau semua tasnya akan hancur. Misalkan di tengah-tengah ini lemot, atau dia nggak bisa.

6:51Anak keempat ngambek, anak kelima nggak bisa ngelanjutin berarti.

6:54Ya, itu jadi single point of failure istilahnya ya. Sementara kalau misalkan anak keempat yang disini dia ngambek,

7:01ya udah, kado-nya tetap ada walaupun tidak lengkap.

7:04- 6 lagi, kado-nya 6. - 6 lagi masih bisa diselamatkan.

7:08Nah, itu plus minusnya. Jadi JavaScript meskipun tidak bisa berjalan paralel, artinya dia hanya bisa berjalan di satu core ya.

7:18Paralel ini bisa dijalankan di banyak core-nya CPU. Jadi masing-masing CPU bisa menjalankan, kalau misalkan disini ada 7,

7:25dia bisa menggunakan 7 atau 8 core untuk masing-masing mengerjakan pekerjaan yang secara, apa ya, terisolasi.

7:33Masing-masing nggak peduli, nggak bergantung kepada pekerjaan temennya yang lain.

7:38Sementara kalau asingkronus, dia bisa berjalan di satu core saja.

7:43- Multi-trading. - Multi-trading dan single-trap.

7:48Itulah perbedaan yang apa ya, yang signifikan antara asingkronus dan paralel.

7:54Dan hal ini yang harus kita pahami dulu sebelum kita berkutat dengan JavaScript atau bahasa pemrograman yang paralel.

8:01Kalau JavaScript kita optimasinya nggak bisa seperti yang paralel gitu.

8:06Kita harus menggunakan kluster dan lain-lain untuk memanfaatkan si core yang banyak ini kan.

8:11Karena sekarang jumlah core-nya semakin banyak. Speed-nya tidak tambah banyak.

8:16Kalau ininya seperti mungkin banyak teman-teman dari background PHP, Python, itu di mana nih, antara asingkronus atau paralel?

8:27PHP dan Python itu masih di asingkronus ya, masih disingkronus.

8:33Kalau Python sekarang sudah ada asingkronus juga kan. Jadi mereka pakai ininya asingkronus juga sama.

8:41- Betul-betul. Ya, biar tahu teman-teman di mana posisinya. - Betul sekali.

8:47Nah, berikutnya adalah kita akan bahas tentang ini, apa namanya, cara si, ini bekerja ya, si apa namanya?

8:58- Si javascript... - Event loop. Oh, javascript di browser.

9:03- Javascript event loop bagaimana... - Event loop-nya bekerja.

9:06- Nah, di sini... - Arti kata lain, artinya javascript engine ya.

9:10- Javascript engine. - Javascript engine itu yang paling terkenal itu yang paling mainstream.

9:15- Itu dari V8. - V8.

9:17Ya, V8 dari Google. Meskipun ada javascript engine yang lain.

9:21Ya, jadi karena terkenalnya si javascript engine-nya Chrome, makanya Node menggunakan V8 juga.

9:33Jadi secara konsep di back-end ataupun di front-end, event loop ini dua-duanya mirip ya, bukan sama, mirip.

9:44Yang membedakan adalah API-nya. Kalau di browser kita tidak bisa, kita bisa menggunakan web API.

9:51Misalkan kayak baca file atau notifikasi dan lain-lain gitu, ya window dot something gitu ya.

9:58Yes, dom manipulation, semuanya bisa kita lakukan.

10:02Tapi kalau di Node.js tidak ada objek yang namanya window gitu.

10:05Tidak ada web API, dia bisa baca file, dia bisa stream data dan lain-lain.

10:11Makanya jebakan Batman yang sering terkenal itu adalah kalau sudah bikin react ssr,

10:18tapi baca window objek pasti tidak ada di server silent tree. Itu jebakannya.

10:25Ya, ini juga benar nih, Deka. Saya time out ya.

10:30Mungkin saya demoin dikit ya, demoin dikit yang disebutkan Deka tadi.

10:36Jadi kalau misalkan kita punya, sederhana saja, konsolok ya, ini kan.

10:44Ini adalah, akan di eksekusi pertama kan, kemudian misalkan konsolok kedua.

10:51Terus konsolok ketiga. Ini kita udah bisa tebakan karena ini adalah sinkronus kan.

11:05Jadi pasti akan baris per baris, satu, dua, tiga.

11:09Nah, lain halnya, kalau ini kita bungkus ke set time out. Set time out ini adalah sebuah fungsi asingkronus.

11:18Ini bisa disamakan dengan fetch dengan fungsi-fungsi lain yang sifatnya asingkronus

11:27yang dia butuh waktu untuk menyelesaikan suatu pekerjaan.

11:31Ini adalah simulasi, misalkan simulasi fetch atau apapun ya, tapi kita pakai set time out saja biar sederhana.

11:36Ada banyak kan. Yang penting isilahnya itu menggunakan callback kalau sudah selesai apa yang akan di eksekusi.

11:43Set time out ini ada juga set interval dan lain-lain ya.

11:47Jadi set time out ini adalah sebuah fungsi yang menerima dua parameter.

11:50Parameter pertama adalah fungsi callback-nya. Apa yang akan dilakukan setelah beberapa waktu?

11:58Dan ini adalah berapa lama waktunya? Kita ingin misalkan delay-nya misalkan satu detik.

12:04- Ini adalah mili second ya? - Iya, mili second. Jadi 1000 mili detik.

12:10Dan ini tentu teman-teman sudah bisa nebak ya, ini hasilnya adalah one, three, dan two.

12:16One, three, dan satu detik kemudian baru keluar two.

12:20Begitu juga dengan kalau kita kasih misalkan 10 mili detik, ya tetap saja sama.

12:25Gitu ya. One, three, and two.

12:28Nah pertanyaannya seperti yang ada di cat.

12:33Kalau time out-nya 0, ada yang bisa nebak gak hasilnya seperti apa?

12:40Hasilnya juga tetap sama ternyata. Walaupun dia 0 detik, tidak ada delay.

12:46Tapi karena dia ini sudah di set kembali asingkronus, dia akan dikirimkan ke event loop.

12:53Jadi dari sini kalau lihat gambar ini, setiap ada sesuatu yang sifatnya asingkronus

13:02seperti set time out atau patch atau yang lain, dia tidak langsung dieksekusi.

13:07Mereka akan masuk ke call stack dulu, kemudian dieksekusi di belakang layar.

13:12Ketika sudah selesai, dia akan masuk ke queue atau amtrian.

13:15Dan ketika main thread-nya atau bagian utama dari java sudah selesai, call stack-nya kosong, betul.

13:23Baru dia... - Baru dia eksekusi.

13:25Ini yang tugasnya manggil dari queue ke dalam call stack.

13:29Betul. Meskipun dia berhasil menyelesaikan pekerjaannya dalam 0 detik, dia tetap masuk ke dalam amtrian dulu.

13:39Karena set time out itu adalah mengirimkan atau mendelegasikan tugas ke bagian yang lain dari JavaScript.

13:49Jadi tidak langsung dieksekusi meskipun hasilnya bisa langsung dinikmati, bisa langsung ada hasilnya.

13:55Kira-kira penjelasan sederhananya seperti itu.

14:00Mau menambahkan kalau di sisi backend.

14:04Ini perbandingan engine-nya JavaScript dengan apa yang bisa kita capai di sisi backend

14:10dengan menggunakan PHP atau Python dan sejenisnya.

14:13Yang asynchronous juga, yang single thread, maksudnya.

14:18Itu dengan menggunakan bantuan yang namanya message queue.

14:23Kalau ada teman-teman tahu, message queue atau kalau paling sering itu kita menggunakan Chrome.

14:30Chrome dari Unix Chrome. Pilihan Linux, Chrome job.

14:35Jadi kalau di message queue, misalnya contoh, paling sering itu kalau menggunakan message queue.

14:43Ada yang check out di sebuah toko online, check out.

14:48Tentu kita harus kayak insert to database segala-gala itu proses kan panjang.

14:53Sedangkan user harus redirect, harus kirim notifikasi, harus kirim notifikasi gimana.

14:59Kalau misalnya kita itu kita lakukan satu per satu, tentu proses check out kita akan lama banget.

15:05User akan marah-marah.

15:07Kalau kita mau bikin itu menjadi sebuah sesuatu yang pasti dengan prosesnya

15:15yang bisa kita bagi ke berbagai macam komputasi server.

15:19Kayak server kita udah besar dan kita mau memanfaatkan server.

15:23Kita menggunakan yang namanya message queue.

15:26Jadi kayak kirim email, kirim SMS, kirim insert ke notifikasi kemana gitu ya.

15:34Itu masukin ke queue, nanti queue-nya yang akan jalankan satu per satu.

15:39JavaScript sudah punya queue itu, stack itu by default, sudah di dalam core engine-nya gitu.

15:46Banyak juga hal-hal yang kayak kita lakukan secara paralel di program yang lain

15:53yang kita memanfaatkan, Chrome dari si... Chrome jawab si Linux gitu ya.

16:00Yang mana setiap waktu tertentu jalankan tugas-tugas yang sudah ada di queue.

16:07Sama JavaScript engine-nya by design core-nya seperti itu.

16:13Oke. Nah, terus kita lanjut ke pembahasan berikutnya tentang, masih tentang event loop.

16:25Ini ada video yang menarik tentang event loop.

16:29Kalau teman-teman tertarik mau belajar lebih lanjut bagaimana cara kerjanya.

16:33Di sini video di tahun 2018 ya, sudah cukup lama.

16:39Tapi penjelasan, yes, penjelasan yang sangat luar biasa bagus.

16:45Dan satu lagi sebenarnya ada ini nih, ini juga keren juga nih.

16:49Sering apa, beberapa kali saya jadikan referensi juga.

16:52Nanti akan dibahas, eh kak, setelah ini.

16:56Dan ada yang mau dijelaskan dari video ini, Ivan?

17:02Ya, bisa-bisa. Jadi di video ini ya, kalau kita lihat dari sisi tengah itu, itu yang looping-nya.

17:10Dan di sebelah kiri itu adalah worker-nya, worker queue yang sedang menjalankan.

17:17Queue-nya paling kiri kan yang urutan T itu.

17:20Itu queue-nya. Sedangkan yang kuning yang di tengah itu, itu adalah proses worker-nya untuk mengeksekusi queue itu.

17:27Sedangkan yang sisi sebelah kanan itu adalah proses rendering.

17:31Ya, jadi proses rendering dari si browser itu.

17:35Jadi apa istilahnya? Paint, proses paint untuk si DOM.

17:43DOM yang sudah dieksekusi, hasilnya dipaint ke browser.

17:47UI bahasa simpelnya.

17:49Ya, sama sih ngomongnya.

17:52Nah, yang terjadi adalah begini.

17:55Pertama video ini membuka mata saya, bagaimana proses JavaScript itu bekerja.

18:03Karena background saya itu banyak berkutat dengan PHP, semuanya semuanya synkronus.

18:10Dan saya udah tahu nih kalau saya bikin kode di line 1, line 2, line 3, line 4.

18:17Saya tahu tuh 1, 2, 3, 4 pasti akan dieksekusi secara berurut gitu ya.

18:22Sedangkan di JavaScript itu berbeda.

18:25Ternyata pakai yang istilahnya banyak hal yang disebut callback lah.

18:29Atau kalau misalnya saya fetching sesuatu dari API,

18:32kalau di PHP, saya fetch API, dia nunggu respon dulu baru selesai.

18:38Responnya mau error atau mau success, saya bisa langsung baca tuh hasilnya.

18:42Sedangkan kalau di JavaScript, responnya itu belakangan.

18:47Responnya pending doang kalau dipanggil di line selanjutnya.

18:52Iya, nah.

18:54Jadi, yang terjadi adalah si worker kalau nggak ada kerjaan, dia akan muter.

19:01Akan looping bahasanya, bahkan looping aja.

19:05Begitu ada task, dia akan jalankan satu per satu.

19:09Di JavaScript Engine, di core-nya itu, itu pasti single-track.

19:17Saat ini masih single-track, artinya hanya menggunakan satu proses trading di CPU aja.

19:24- Jadi tidak bisa... - Hanya bisa mengedikan satu kerjaan dalam satu waktu ya.

19:28Betul sekali, jadi nggak bisa multi-trading.

19:31JavaScript setau saya sampai saat ini belum bisa multi-trading.

19:36Jadi, kalau misalnya dia muter dan melakukan sesuatu,

19:42dia akan menunggu ada hasil dan begitu ada tugas, dia akan kerjakan.

19:49Dan kalau misalnya tugas itu butuh ada pain, nanti dia akan update di DOM

19:54dan akan pindah ke proses untuk pain.

19:58- Ke loop yang sebelah kanan ya? - Iya, betul.

20:01Nah, ini...

20:03Ini tadi karena kode-nya tadi kan yang dicoba itu adalah wild loop.

20:08- Ini pakai se-timeout. - Nah, itu dia.

20:11- Jadi nggak nge-blocking. - Definit.

20:13Nah, jadi dia...

20:15Jadi makanya si JavaScript ini itu unblocking process.

20:20Oh, mungkin bisa dimunurin sedikit videonya ke kiri sedikit.

20:24Jadi pertama kali dia nyontohin yang pakai wild loop yang always true.

20:30Jadi itu kalau dampaknya di UI kan, kadang mungkin kita pernah kena error yang freeze.

20:37Nggak bisa diapapain atau nggak bisa di-select.

20:39Po-nya beneran freeze, pas dilihat di console log-nya ada maximum call stack exceeded.

20:44Nah, contoh pertama tuh tentang itu.

20:46Karena si task-nya itu beneran nggak pernah selesai, nggak pernah pergi dari queue.

20:52Nah, itu di contoh pertama yang pas wild true.

20:55- Itu kayaknya kiri lagi deh. - Kiri lagi.

20:58- Terus... - Mana?

21:01Contoh gambar kucing juga, cuma po-nya contoh pertama yang tadi ada gambar animasi gif kucing.

21:09- Oh, gif kucing tadi di mana ya? - Tapi yang pertama.

21:14Yang pertama? Wah, lupa. Ini bukan.

21:18Nah, itu kayaknya coba deh.

21:20Tapi intinya sebenarnya JavaScript itu dia ini ya, bahasa yang selalu sangat mudah untuk move on.

21:30Jadi ketika ada task dan task-nya belum selesai, dia langsung berjalan aja.

21:36- Ya udah tinggal aja dulu. - Karena memang dia naturalnya seperti itu.

21:39Kalau di web, misalkan kita butuh apa ya, butuh webcam, permission untuk webcam.

21:45Kalau usernya belum klik allow atau block, ya webnya tetap bisa loading kan, tetap bisa...

21:51webnya tetap terbuka walaupun ya webcamnya adama-adama nggak ada gitu kan.

21:56- Ya, karena unblocking. - Ya, dia tinggal, dia anggap berarti nggak mau.

21:59Berarti kalau dia punya internal algoritm, internal logic, kalau misalnya usernya tetap nge-scroll

22:07dan mengabaikan permintaan enable webcam, ya udah berarti dia nggak mau.

22:11- Oke, move on. - Move on.

22:14Satu-satunya yang nge-block adalah alert. Makanya alert jalan dipakai kan, untuk UX kurang bagus.

22:21Karena ketika kita jalankan alert, itu di belakang itu udah berhenti.

22:25- Emang dengan sengaja di-freeze semua. - Iya.

22:28- Nah ini juga berhenti sih. - Iya, kita buka Facebook atau buka Tokopedia gitu ya.

22:35Meskipun datanya belum nyampe, tapi sudah ada skeleten-skeletennya kan kelihatan.

22:40Itu adalah salah satunya dimungkinkan karena asingkronus ini.

22:44- Ya. - Lanjut, lanjut.

22:46Yang ini tadi, when while loop itu makanya dia bisa nge-hang.

22:50Jadi kalau mau kerjain, kalau mau kerjain, kok malah nggak jarin yang ngejelek sih.

22:55Nah kalau ini kan contoh yang contrive, ya maksudnya apa, di JavaScript jarang banget sih bisa blocking

23:01kecuali beneran bikin function yang kayak gini nih, while true.

23:04While true ya akan selalu true maksudnya. Jadi kan si tugasnya itu, si task yang warna kuningnya itu

23:13nggak pernah selesai, jadi si event loop-nya yang kotak putih itu ya nggak pernah bisa keluar, nggak bisa lanjut.

23:19- Nggak bisa ke arah sebelah kanan ya. - Nggak bisa muter, emang ditahan terus.

23:24Dan biasa itu bakal ada error, apa, maximum call stack exhibit kan.

23:29Artinya apa juga di sini, kalau dari sisi ini, kalau misalnya kita punya JavaScript-nya kegedean

23:39atau berat bahasa istilahnya, berat, itu bisa membuat scrolling kita kerasa jengky kayaknya.

23:46- Oh iya. - Kayak dia nggak smooth gitu.

23:50Itu karena JavaScript kita banyak banget eksekusi atau, jadi proses loop-nya itu terus ngerjain tugas

23:58dan untuk proses rendering-nya dia jadi telat.

24:02- Dia nggak ngerender dengan benar ya, nggak bisa ngerender dengan benar karena dia tinggal-tinggal kerjaan yang lain.

24:10- Iya, karena proses waktu dia ngerjain task-nya itu kelamaan.

24:14Yang menjadi target kan untuk kita kasih pengalaman experience terbaik untuk ke user itu kan,

24:23rata-rata mobile phone yang sekarang itu kan screen-nya sudah 120Hz ya,

24:30atau 90Hz atau 60Hz lah minimal gitu ya, refresh rate-nya gitu ya.

24:35Maka pane yang bagus itu ya minimal di 30 gitu ya, supaya terasa scroll-nya itu terasa apa istilahnya, smooth gitu.

24:47- 30 fps ya berarti ya. - 30 fps.

24:50Nah ini contoh selanjutnya nih, apa sorry, yang tadi kan while sebenarnya coding-nya sama,

24:57tapi dipindahin ke set timeout dengan delay-nya 0ms ya, sama kayak yang tadi dicontohin.

25:04- Coding-nya mana? Ini ya? Mana tadi? Ini ya? Eh susah ya.

25:10- Nah while true kan yang blocking ya? - Ini yang pertama.

25:15Yang kedua dipindahin ke set timeout aja, cuma di set timeout dulu.

25:23Nah jadi dia bisa muter karena tadi kan yang set timeout itu dipindahin dulu,

25:33itu kan sebenarnya recursive loop juga kan, di argument apa callback function-nya itu loop kan,

25:41itu kan recursive function tapi dia nge-blocking, karena ya itu tadi yang dijelasin di paling awal.

25:48Kan dia pindah dulu ke web API, pindah ke queue, antrian, dimasukin satu persatu.

25:55Jadi walaupun recursive tetap bisa melakukan semua task itu tadi.

26:03- Dia ngambil task-nya tetap. - Jelasnya kayak gini nih.

26:06Nah muncul lagi kan, si event loop-nya, mekanisme event loop itu memanggil task-nya satu persatu dari antrian, dari queue.

26:15Jadi walaupun recursive, emang recursive, gak ada abisnya kan tuh muncul lagi, muncul lagi.

26:20Tapi dia bisa muter, bisa jalan, jadi tetap bisa styling, layout, paint, give-nya bisa muter.

26:28Give-nya bisa muter, dia bisa select text dan lain-lain. Itu tadi ilustrasi.

26:33Yang bikin aku paham event loop itu apa.

26:37Nah gimana tadi soal request animation frame, nyambung juga sama ini sih ya, apa?

26:45Video ini kayaknya ada tentang animation frame juga ya.

26:48- Dia di belakang, soal request animation frame, request adjunct callback. - Ini bukan.

26:54Wah iklan dulu.

27:01Sambil iklan. Nah berarti kalau frame rate-nya 60 Hz, berarti bagusnya tadi animation-nya justru 30 ya separohnya.

27:11Iklan lagi, aduh banyak sekali iklannya. Lanjut, lanjut, lanjut.

27:16Itu gak ada, itu bukan sebuah teori atau hard and fast rule. Jadi sebenarnya jangan sampai di bawah itu.

27:27- Jangan sampai di bawah 30? - Iya, kalau di bawah 30 frames per second artinya

27:32sudah mulai terasa jengky, mata kita sudah bisa lihat kalau itu terasa patah-patah.

27:38Gimana cara ngecek sebuah web itu 30 fps atau belum?

27:42Ada kayaknya ini ya, ada API-nya, gue lupa, ada tulisan, gue lupa.

27:49- Ntar gue cari deh, gue lupa, ada API-nya kok. - Oke lanjut.

27:57Ini apa? Oh ini yang soal animation callback.

28:01Ini artinya maksudnya gini, kalau kita punya JavaScript code, jangan sampai kelamaan ya memanggil

28:12atau melakukan sebuah tugas, kalau bisa dilakukan kecil-kecil maksudnya.

28:17Jadi biasanya kalau kita menggunakan untuk yang banyak melakukan pain atau melakukan manipulation.

28:28Contoh paling gampang slider ya, slider itu supaya bisa smooth gitu kan harus ada

28:36kalkulasi perubahan X dan Y position ya, itu kan bisa terjadi sliding.

28:45Yang itu sebisa mungkin saat kita melakukan itu jangan sampai proses sliding-nya itu

28:52memberatkan, membutuhkan lebih dari, kita bisa bikin kalkulasi supaya dia

28:59dipecah-pecah 30 fps, bisa dihitung lah istilahnya.

29:04Oke, kita lanjut ke pembahasan dari Eka tentang web API.

29:14Tadi kan sempat ada ya, sempat ini ya, ini kan ada call stack, kemudian ada queue,

29:20kemudian ada heap, dari JavaScript engine-nya, dari fungsi kode yang kita tulis masuk ke

29:27call stack, kalau dia butuh di delegasikan misalkan membaca file, nampilin notifikasi

29:35dan lain-lain itu dia kan memanggil atau menyerahkan kepada API, web API dalam hal ini.

29:41Web API itu sendiri adalah sebuah API. - API yang ada di browser.

29:50Jadi cerita aja sih ini, kebetulan kali ini aku nggak punya materi yang teknikal banget,

29:58jadi lebih kecerita soalnya apa, kan Papiknya ngebahas event loop nih, jadi inget dulu

30:04pertama kali banget belajar JavaScript, mungkin agak beda dengan teman-teman yang

30:10lainnya, aku belajar JavaScript itu nggak dari backend sama sekali, dan bahkan

30:16bukan dari dunia pemrograman, jadi kayak cuma iseng-iseng aja, terus jadi belajarnya dengan

30:22cara yang salah, pokoknya kalau ada alur belajar yang salah, itu kayaknya semua

30:26kesalahan dalam belajar coding, itu kayaknya gue udah ngelakuin semua.

30:31Jadi pertama kali mulainya cuma di HTML, CSS, cuma ya udah, udah rada basah

30:38dikit nyemplung sekalian kan JavaScript, cuma ya mungkin karena approach-nya kurang

30:43tepat, cuma apa sih, Googling aja cari, terus kopas-kopas, terus dulu jamannya

30:49jQuery, jadi mungkin, apa, jQuery-nya sih nggak apa-apa, cuma mungkin

30:54pemahamanya kurang kuat juga, jadi apa, suka banyak kesandung dikit lah.

31:01Nah, dulu tuh aku belum paham tentang web API, karena kan ini bukan di level

31:09yang praktikal ya, semua kalau misalnya orang yang murni awam dan baru belajar

31:14dan nggak ngikutin kurikulum yang baik dan benar ya, mungkin ngerti-nya semua itu

31:20JavaScript, udah gitu doang. Nah, padahal sebetulnya kan browser punya

31:26JavaScript Engine yang tadi udah dibahas kayak Chrome punya V8, yang jalan di

31:31Node dan Dino juga, Firefox punya Spider Monkey, nah JavaScript Engine itu

31:36bisa menjalankan atau memproses JavaScript berdasarkan standarnya

31:42ECMAScript, ya udah itu, cuma kan itu stand alone, nah browser sendiri kan

31:47sebetulnya punya yang namanya itu web API, yaitu implementasi JavaScript

31:54dengan menggunakan standar ECMAScript juga, yang dibuat khusus untuk browser

32:01dan otomatis hanya berjalan di browser, nah makanya dia kenapa ada API itu,

32:06dia kan buat ngejawab kebutuhan-kebutuhan yang unik atau yang khas,

32:11cuma buat ada di browser, makanya tadi kita punya apa itu, ada animation,

32:17ada rendering, ada apa, layout, styling, painting, ya kalau di server-side kan

32:23dibutuh ngelakuin hal-hal itu ya, walaupun prinsip, apa, prinsip queue-nya

32:28bahwa ada task yang harus queue, yang harus di queue, ada pekerjaan yang

32:33harus diantri, ya emang sama, cuma kan kebutuhan-kebutuhannya unik di web,

32:38jadi ini hal yang menarik sih, jadi mungkin kalau temen-temen ada yang

32:43masih di level baru nyoba-nyoba ngulik kodingan di web, khususnya front-end,

32:50nah mungkin ini bisa dibaca sendiri, di cek, paling enggak dimengerti bahwa

32:56browser itu bukan murni hanya berisi JavaScript engine aja,

33:02tapi ada implementasi khusus untuk media web untuk browser yang namanya web API,

33:09itu akan nyambung banget sama apapun yang kita pelajarin, kayak tadi ada asynchronous,

33:15ada call stack, ada event loop, ada queue, ini semua berkaitan kayak si set time out aja,

33:22jadi set time out itu kan bagian dari browser API, walaupun dia juga ada di node,

33:29nah di environment node-nya itu, implementasi set time out-nya itu sedikit berbeda,

33:36minimal dulu sih kayaknya, di awal agak berbeda dengan punya browser,

33:42karena masing-masing dia punya cara integrate sendiri,

33:46jadi minimal kita tahu tentang adanya perbedaan, apa sih,

33:52dimana suatu JavaScript runtime di eksekusi, itu web API, itu apa segala tentang web API.

34:02- Mungkin ini ya, kita sudah sangat terbiasa untuk apa-apa pakai terpatri library,

34:09kalau dulu kita mau request, kita harus pakai XHR, something-something gitu kan,

34:16terus dimudahkan dengan adanya jquery.ajax aja atau .get atau .post gitu kan,

34:22gampang gitu kan, padahal sebenarnya di JavaScript, di browser sudah ada,

34:29walaupun agak tricky ya, pakainya agak susah gitu kan, akhirnya muncul face API,

34:35bukan face API ini, di browser kita nggak perlu install kan, nggak perlu npm install,

34:40nggak perlu pakai CDN dan lain-lain, kita udah bisa pakai by default,

34:44ketika kita buka konsol gini aja, face aja udah ada gitu kan, kita bisa jelankan,

34:48di sini sudah disediakan face, itu jadi kayak built-in-nya ya.

34:53- Iya, bahwa unbuilt-in di browser.

34:55- Iya, sudah built-in. Nah, bahkan node.js sendiri pun belum ada,

35:00sampai baru beberapa bulan... - Barusan banget ini kan.

35:03- Baru bisa. - Node 16 baru ada tuh ya.

35:06- Iya, yang benar-benar fetch ya, kalau dulu ada fetch-fetch dibuat.

35:11- Oh dulu node fetch, dulu kan polyfill ya, semacam polyfill.

35:14- Ada isomorphic fetch lah apa namanya gitu ya, berbeda-beda gitu, jadi tidak built-in,

35:19itu third party. Dan dari sana mungkin karena juga dulu JavaScript sejarahnya ya,

35:25mereka tidak modular kan, tidak terlalu modular, jadi apa-apa ya bergantung kepada

35:30script yang lain gitu. Sampai akhirnya si browser ini semakin apa ya,

35:38semakin merasa, wah ini kayaknya butuh nih, akhirnya ditambahkan lah banyak-banyak apa,

35:43berbagai API, ya tadi seperti fetch, kemudian bisa baca file, bisa banyak sekali nih.

35:49Kalau teman-teman buka what-web can-do.today, bisa kita lihat nih,

35:54kita bisa ada offline mode, ada background sync, kalau misalkan datanya apa,

35:59kalau kita bikin aplikasi terus datanya mungkin agak banyak, kita bisa syncing data

36:05di background untuk safe dan untuk baca, bahkan bisa payment ya, menggunakan Google itu ya.

36:12- Bisa detect sensor juga sensor. - Detect sensor, NFC, Bluetooth,

36:18USB, macem-macem, ada banyak. - NFC belum bisa Mas.

36:22- Oh belum, belum, belum. - Bakal bisa, bakal bisa.

36:30- Nah jadi si web API itu memenuhi kebutuhan khusus ya user yang menggunakan browser kan ya,

36:36ya itu kalau kita pakai browser mungkin kita akan butuh apalah kamera lah, sensor segala macem

36:42yang tadi ada. Nah salah satu hal yang ternyata setelah dikulik lebih jauh

36:48bergantung sama browser kan network request tuh, jadi kayak caranya sebuah server,

36:53node server misalnya menghendal network request, ternyata beda dengan cara browser

37:00menghendal network request, makanya itu alasannya ya itu perkara fetch aja,

37:05ternyata belum seragam apa, nggak seragam sampai baru-baru ini kan.

37:10Jadi itu berguna banget buat tahu tentang mana yang bagian dari web API,

37:16mana yang bukan. - Iya, bahkan kalau teman-teman butuh

37:22apa ya, library untuk bikin sebuah, bikin kode untuk aplikasi web itu yang modular

37:33atau yang dipecah per komponen, si browser juga udah ada API-nya kan custom komponen,

37:38web komponen lah, itu sudah ada, nggak perlu kita install react, nggak perlu install view,

37:43nggak perlu install macem-macem udah ada, walaupun bisa diakui cara penggunaan

37:47ini memang agak... - Rada susah ya bikinnya rada susah.

37:50- Rada susah, tapi bisa memungkinkan. - Biasanya kan pakai library

37:54yang penengah lah, yang mudahkan kan ya. - Iya, untuk memudahkan aja.

37:58Ada yang baru apa ya, shoelace ya. - Shoelace.

38:04Gimana Ivan? - Iya, salah satu yang paling simpel.

38:10Localization, bukan lokalizasi. - Internalization.

38:14- Internalization, kalau misalnya kita bahas buat bahasa ya,

38:23misalnya dari currency, dari yang USD, Indonesia rupee,

38:31ada koma, ada titik gitu ya gimana. - Rupee, ada koma, ada titik.

38:34Itu bayangkan kalau misalnya punya toko online lagi, kita harus,

38:39kalau dia situsnya di berbagai negara, gimana kita satu codebase,

38:45maksudnya kita mau parsing satu-satu untuk atau pakai JavaScript model mana

38:50yang harus bisa untuk memisahkan, membedakan titik koma misalnya.

38:55Di web sudah ada international... - INTL.

39:01- INTL API, kayaknya ada di sini. Jadi tinggal pakai API itu, internationalization

39:09sudah bisa terjadi, mau currency, mau tanggal, sudah ada, sudah bisa dipakai.

39:15- Kalau dulu, kalau untuk tanggal, jam, waktu gitu,

39:19biasanya pakai momen JS yang gedenya segede gaban ya.

39:22- Betul. - Sekarang sudah bisa digantikan.

39:28Contoh yang lain yang dulu sempat kita bahas, intersection observer.

39:32Dulu kita harus mendetek di mana posisi tertentu sudah digantikan

39:37sama observer yang ada di API. - Nah, observer juga maksudnya

39:42mungkin ternyata sama si event loop, observer itu kan, makanya dia jalannya

39:48di web API karena itu kebutuhan yang cuma ada di browser ya, itu unik.

39:52Mustahil server kan nggak butuh observer yang untuk UI ya. Nah, ini kan observer-nya

39:58macem-macem kan ya, kalau ada resize, ada visible,

40:02kalau misalnya ketrigger, baru diantri in, task di callback-nya diantri in

40:10buat dipungut, buat dicomot, dan dikerjain sama event loop yang tadi itu kan.

40:16Nah, ini juga misalnya ini, apa, history. Kalau teman-teman ikutin kayak router,

40:24react router atau yang lain, ya dalamannya ini, history API,

40:28untuk go to routes tertentu, backward, forward. - Sampai kayak apa, yang buat

40:36parameter juga kan itu sebenarnya ada interface ya kan, URL sama URL search params.

40:41- Iya, ada push dan lain-lain. - Jadi library yang kita pakai under the hood mereka juga pakai itu.

40:46- Sebenarnya, iya. Jadi kalau apa informasi-informasi web API kayak gini,

40:53biar up-to-date gitu, ngeceknya dimana ya? Oh, ini ada API baru.

40:58- Channel ini lah, biar up-to-date, subscribe channel ini.

41:02- Subscribe channel ini dong. - Iya. Jadi kadang-kadang kita, ya itu, karena tadinya

41:11si JavaScript ini kan secara natural dulu, menggunakan terparti itu udah kayak

41:18no-brainer gitu kan, apa-apa, NPM apa-apa, CDN yang dicari yang pertama kan.

41:22Tapi semakin kesini ya. - Mungkin kita perlu customize, pusing,

41:26atau mungkin giliran ada bug atau isu atau apa yang nggak sesuai kebutuhan kita, baru deh pusing.

41:33- Iya, itu dia. Makanya semakin kesini kita semakin butuh atau semakin apa ya, biar aware gitu

41:40bahwa sebelum kita kesana, kita bisa gunakan dulu API yang sudah disediakan oleh browser.

41:46Browser kan ukurannya tidak kecil gitu kan, dan sudah ada di install di masing-masing komputer.

41:51Jadi itu yang kita manfaatkan dulu gitu. - Manfaatkan native-nya dulu.

41:56Contohnya Parkour Detection API itu keren tuh. Kalau kita mau bikin sendiri kan sulit ya,

42:02masa mau kirip data ke server, server-side deteknya, atau pakai apa tuh misalnya,

42:08kalau kita mau pakai machine learning, blablabla, kan nggak bisa sulit.

42:13- OSI-R, OSI-R. - Sudah ada. Sudah ada, tinggal dipakai.

42:17Cuman belum semua browser ya, masih. - Chromium.

42:21- Chromium. - Chromia Base.

42:23- Iya. - Oke, lanjut ke pembahasan berikutnya.

42:30- Lanjut, nah ini selanjutnya malah lebih ke pertanyaan sih.

42:36- Apa tuh? - Gak, nyambung sama yang tadi tuh,

42:39kan topiknya soal event loop nih. Terus kalau di sini sebetulnya

42:45pertanyaan awalnya adalah kenapa kita perlu mempelajari hal-hal yang kelihatan pun nggak,

42:53maksudnya kelihatan secara langsung pun nggak, seperti event loop, call stack, queue.

42:58Tapi kan sebetulnya secara nggak langsung udah kejawab ya tadi.

43:01Itu penting banget karena itu mempengaruhi behavior dan codingan kita yang kita jalankan.

43:08Misalnya tadi tuh sama-sama sebuah function yang recursive, yang muter.

43:14Tapi yang satu, blocking. Beneran ngefreeze, nggak bisa terjadi apa-apa.

43:19Yang satu, nggak. Karena pakai set timeout kan kita perlu buat memahami hal-hal kayak gitu.

43:26Nah, terus ya selain itu juga tadi sempat dibahas juga soal animasi.

43:32Kita jadi paham apa, gimana caranya, kenapa kita harus apa,

43:40nge-set animation frame dengan value tertentu,

43:44karena itu berkaitan dengan cara kerja sih event loop itu.

43:49Jadi kalau soal kenapa sih mungkin udah kejawab karena itu mempengaruhi codingan kita,

43:56gimana kita merancang resitektur kode kita ya.

44:00Nah, terus pertanyaan selanjutnya adalah apakah ini sebenarnya diajarin nggak sih ya di kurikulum?

44:08Kalau orang yang, misalnya mungkin kuliah, kalau kuliah malah mungkin nggak ya.

44:12Kalau bootcamp, ini diajarin nggak sih? Sebenarnya secara proper?

44:16Eh, nggak tahu ya. Saya menyebutnya bootcamp saya, tapi bootcamp yang lain nggak tahu ya.

44:22Ya, pengetahuan bootcamp ternama di Indonesia salah satu.

44:26Mudah-mudahan diajarin ya.

44:28Menurut saya, ini harus diajarin atau at least ada pembahasan ini.

44:33Karena event loop ini dasarnya banget ya untuk event-driven di Java Sea itu dasar banget.

44:43Salah satunya baru hari ini saya menyelesaikan sebuah tiket dikerjaan saya.

44:49Itu requirementnya begini, situsnya ingin memberikan ads free.

44:58Jadi ads itu tidak boleh muncul untuk member yang sudah plus member, sudah upgrade.

45:08Premium member itu nggak bisa.

45:10Karena dibayar buat ngeremov ads.

45:12Ya.

45:13Dia bakal marah kalau ads-nya muncul.

45:15Betul. Tetapi situsnya itu nggak bisa menggunakan server set rendering karena dalam satu waktu,

45:24karena konferensinya besar jadi cache, jadi ada cache ya. Jadi kalau login user itu kita tetap cache seperti biasa.

45:31Dan semuanya harus sebuah JavaScript.

45:34Kita nggak detect dia premium member atau tidak sebelum dia ngelon ads, contoh.

45:41Apa yang harus saya lakukan supaya ads bisa tidak muncul?

45:46Tetapi untuk proses premium membernya, beda thread, beda running-nya beda.

45:55Ads-nya rendering sendiri, event-nya sendiri, ngecek premium membernya sendiri.

46:03Akhirnya harus saya buat delay bagaimana supaya ini jalannya belakangan.

46:08Ya. Saya nggak menggunakan callback. Tetapi saya menggunakan event-driven pakai dispatch.

46:17Jadi kalau misalnya dia proses untuk nge-detect dia panggil API dulu, apakah dia premium member atau tidak.

46:28Kalau dia premium, dispatch event.

46:31Jadi bahasa yang sering dipakai Windows onload event, ada DOM content loaded event atau event-event lain.

46:41Jadi saya dispatch custom event yang ads-nya ini menunggu.

46:45Dia tetap bisa initialize dulu, dia menunggu kalau ada event ini nggak.

46:50Kalau ada event ini terjadi baru dia ngerender ads atau tidak ngerender ads.

46:55Jadi tanpa pemahaman event look, solusi itu tidak bisa saya buat.

47:02Itu pentingnya bagaimana kita mau memahami event look, call stack dan web API.

47:12Ya.

47:15Tapi sebenarnya secara umum, ya kalau misalkan teman-teman belajar sebuah platform atau sebuah bahasa gitu ya.

47:23JavaScript, Node.js atau bahasa-bahasa yang lain, PHP dan lain-lain.

47:29Bukan hanya karena ada artikel yang bilang bagus, ada video yang bilang bagus.

47:35Tapi basic curiosity-nya aja lah.

47:40Ada yang bilang, "Wah Node.js lebih cepat dari PHP."

47:43Kenapa? Karena sincronus.

47:46Tapi kita sendiri nggak tahu sincronus itu maksudnya apa. Apa bedanya sama eksekusi yang ada di PHP.

47:51Kenapa? Kok Node.js bisa cepat?

47:53Padahal dia sama-sama, misalnya sama-sama high-level language kan.

47:57Sama-sama scripting language, berangkat dari scripting language kan awalnya.

48:01- Interpreter. - Interpreter.

48:04Kemudian sama-sama kalau tidak dioptimasi, cuman bisa menggunakan satu core dari CPU.

48:13- CPU. - Ya.

48:15Terus kenapa yang satu kalah cepat dibandingkan yang lain?

48:20Jadi dari curiosity itu kita harusnya bisa menggali lebih jauh, "Oh, si JavaScript ini unblocking."

48:26Maksudnya unblocking itu apa? Kalau ada request, dia terima-terima aja walaupun dikerjainnya belakangan.

48:31Sementara kalau PSP kan begitu ada satu request, dia tunggu dulu, "Eh, sabar. Saya masih ngerjain yang ini, tunggu ya."

48:37Sampai selesai. Sedangkan di JavaScript proses menunggu itu ada di belakang layar.

48:44Jadi kita kayak nggak dikasih tahu bahwa kita sedang menunggu, padahal tas kita juga belum dikerjain.

48:52- Siap kos, yang penting sedang. Siap kos. - Iya, gitu lah.

48:58Jadi dari situ juga kita bisa jangan sampai, "Wah, ini apa ya?"

49:05Kalau kita belajar sebuah bahasa atau belajar apapun ya, belajar suatu yang baru, ada istilahnya itu apa ya? Unlearn.

49:12Jadi hilangkan mindset. Misalkan tadinya PHP, kita taunya PHP.

49:19Terus abis itu kita cobain JavaScript atau Node.js. Di PHP kayak gini, di Node.js kayak gimana ya?

49:26Mungkin di awal begitu belajarnya, tapi makin ke sini kita juga harus tahu sejarahnya, filosofinya kenapa si Node.js ini dibuat.

49:34Alasannya kenapa? Dulu banget si Node.js ini kan awalnya, kita itu kan jaman dulu susah ya, kalau kita mau upload file,

49:42kita mau kasih progress bar, gimana caranya? Susah, setengah mati itu sebelum ada Node.js.

49:49Karena blocking kan, pada saat upload, nunggu uploadnya selesai, baru bisa kita kasih tahu ke klien bahwa ini uploadnya selesai.

49:58Jadi sebenarnya dulu progress bar itu hanya kira-kira aja. Ya, form upload dia kan waktu dia ngirim data itu kayak cuman muter,

50:08browser muter aja gitu ya, nggak apa-apa. Kalau sekarang kan klik di background dia ngirimnya.

50:15Betul. Pertama kali si Node.js muncul, yang bikin Node.js itu demo-innya adalah nunjukin progress bar pada saat upload.

50:23Karena pada saat upload data, upload file di Node.js, itu sistemnya bisa dibuat asingkronus.

50:29Jadi ketika file-nya udah dikirim, berapa persen, dia bisa ngirimin balik ke klien, memberi tahu bahwa ini 5 persen, 10 persen dan lain-lain.

50:39Jadi dari situ aja kita bisa tahu kayak filosofinya, oh ini kenapa sebuah bahasa atau sebuah platform itu dibuat untuk menyelesaikan satu masalah.

50:49Masalah utamanya dari situ nanti akhirnya berkembang, dipakai di mana-mana.

50:53Itu perkembangannya pasti semua pasti ingin bahasanya dipakai di mana-mana gitu kan.

50:59Tapi awalnya dulu filosofinya itu juga tidak kalah penting.

51:03Dari situ baru kita bisa memahami lah, lebih memahami si bahasa ini.

51:09Jangan sampai, karena JavaScript salah satu bahasa yang cukup salah dimengerti.

51:15Tidak sulit di prediksi hasilnya, kok ini yang keluar duluan yang ini, padahal kita harapannya yang ini gitu kan.

51:25Karena kita belum mengerti konsepnya.

51:27- Betul-betul.

51:29- Nah itu manfaat lainnya sih menguasain tentang event loop, karena sering banget,

51:35ya aku pribadi dulu pas baru belajar cara yang salah tadi yang kopas sana sini, tapi gak mengahamin sebenarnya dibalik itu ada apa.

51:45Ya itu kan kesul kan, kadang dicoba bener, urutannya udah sesuai ekspektasi.

51:50A, B, C. A dari A kita dapat data untuk B, dari B kita dapat data buat C.

51:58Terus ditinggal makan bentar, pas balik, tiba-tiba urutannya C, A, B. Pusing kan.

52:05Nah itu kalau misalnya kita gak menguasain tentang asingkronos sama urutan gimana task di eksekusi, itu kan sulit dibaginya.

52:14Jadi hal-hal tadi yang mungkin terkesan, maksudnya low level ya, browser engine banget,

52:23mungkin kita gak lihat secara langsung sehari-hari itu sebenarnya berguna banget karena kita bisa pakai itu untuk itu tadi dibaging in the real world,

52:36sama mungkin bisa ngebantu kita bikin keputusan-keputusan kali ya, misalnya keputusan untuk optimize performance ya kan tadi itu

52:44yang soal animasi atau misalnya kita pakai react nih atau library sejenisnya yang punya algoritma virtual DOM,

52:54ada yang berubah satu, bing, dirender ulang semua.

52:57Nah kalau misalnya kita ada yang salah dikit tuh, use effectnya salah, itu bisa muter-muter kan, itu bisa kena itu juga tadi,

53:05maksimum call stack gitu karena infinite free render ya, ngefreeze. Nah kalau misalnya kita gak menguasain tentang bagaimana browser, web API,

53:19javascript engine, bekerja sama buat bikin siklus rendering, kita bingung kan kenapa tiba-tiba ngefreeze aja gak bisa di scroll.

53:29Nah padahal itu berasal dari suatu logic atau alur di kode kita yang ngetrigger free render,

53:37jadi itu kayak ngebantu kita buat ngefix apa yang salah atau optimize performance kode kita sih.

53:45Yes. Dan kalau dilihat di sini, di selido, di bit.ly/ngobrolinweb, itu ada pertanyaan menarik yang berkaitan nih,

53:59penggunaan promise itu biasanya buat apa? - Janji, celek.

54:04- Janji. - Janji palsu gak? Ini bukan janji palsu. - Penggunaan promise itu buat apa? Buat asingkronus. Bener gak?

54:15- Buat menjalankan operasi asingkronus dan kita bisa mengkustomise responnya ya. Promise itu kan bisa pending, resolve, reject.

54:25- Recheck, ya. Kalau yang asingkronus-asingkronus, apa aja tuh tadi? Baca file, itu bisa asingkronus.

54:34Karena hasilnya tidak instant ya. - Fetch, API, network request.

54:43- Rata-rata yang baca itu read-write itu semua asingkronus, index.tv, local storage, system storage.

54:51Baca file system. - Tapi kalau di Node.js itu beberapa API-nya ada 2 biasanya.

55:01Dulu ya, jadi ada kaya read file sync. Read file-nya aja asingkronus, tapi read file sync itu yang asingkronus.

55:10Mungkin sekarang akan dihilangkan semenjak ada sync wait, mungkin lebih sederhana kan jadinya.

55:15- Ya, mungkin suatu hari dipercake. - Iya, mungkin. - Mau ngasih tau,

55:21teman-teman kalau yang mau pakai promise, asingkronus, segala macam. Atau promise dan segala macam,

55:27always catch error. Try catch, harus di dalam try catch. - Jangan terlalu otimis jadi orang berarti ya.

55:35- Iya. Karena promise itu bisa throw error loh. Jadi kalau nggak di catch, semuanya bisa berantakan.

55:44Jadi kalau eksekusinya file, tadi yang anak itu ngurusin kado, kalau satunya fail,

55:51itu semuanya bisa nggak jalan. - Semuanya akan fail, iya.

55:54- Nah, kayaknya besok-besok perlu ada mini topic promise juga ini soalnya lumayan banyak.

56:00Jadi itu kan tadi jangan terlalu otimis bahwa error, jangan lupa untuk nge-catch error.

56:07Tapi ada kasus yang semacam bisa dibilang ekspektasi awam kita tuh sebaliknya.

56:14Jadi gini, kalau kita nge-fetch, kita nge-fetch melakukan request kan, response code bisa macem-macem kan ya,

56:21kalau kepala 2 berarti sukses, kalau kepala 3 redirect, kepala 4 error.

56:27Nah, kalau fetch-nya sukses, jadi kita berhasil memanggil melakukan suatu request,

56:33di-return dengan response kepala 4, misalnya 401, unauthorized.

56:38Nah, dibalikinya itu adalah itu nggak masuk di error, kecuali kita handle custom ya manual,

56:46kita cek response code-nya apa. Nah, itu sempat...

56:51- Salah API. Salah bikin API itu.

56:56- Nggak, cuma ternyata wajibnya adalah fetch-nya sukses, lah kan berhasil.

57:03Jadi network-nya ada, maksudnya gampangnya kita online, berhasil melakukan itu,

57:10resource-nya pun yang dipanggil ada, cuma hasilnya, isinya user Anda, misalnya kita lagi nggak login,

57:18atau mungkin user kita nggak punya privilege untuk ngelakuin sesuatu, ya otomatis response-nya 401.

57:24Cuma fetch-nya sendiri kan sukses. Nah, itu kadang nyebelin di situ sih.

57:28Ya, itu bisa diakalin dengan kita ngecek status code-nya, ya kita throw error sendiri.

57:34Nah, itu seru sih. Belom ada itu tadi kalau promise all, yang tadi 7 anak ngurus kado,

57:42begitu satu ngambek, langsung dibalikin semua, nggak nunggu sisanya kan.

57:47Nah, kecuali kita pakai promise all settled, promise all settled nunggu sampai ketujuan anak itu selesai.

57:54Di situ kita bisa ngelup mana yang sukses, mana yang jalan dengan baik, mana yang error, masalah.

58:01- Untuk bisa ngerti promosi ini, harus nonton video yang tadi, event loop,

58:08harus ngerti sampai sepaham-pahamnya dulu cara kerja event loop.

58:14- Baru bisa dapet, oh, promise tuh begini tau.

58:19- Ya, jangan lupa juga kalau mau belajar promise atau bahkan asing await,

58:24belajar dulu dari callback, abis itu belajar promise, baru asing await.

58:27Jadi jangan loncat langsung ke asing await, bingung entar.

58:29- Iya, bingung. - Karena asing await itu adalah,

58:32yang dipakai adalah objeknya promise. Kalau kita nggak ngerti promise, asing await pasti pusing.

58:36- Atau mungkin kalau kita cuma kopas-kopas, asing await tanpa paham soal promise atau cara kerja asingkronos JavaScript sendiri,

58:46mungkin bisa cuma jadi kayak apa ya, misalnya kita punya dua request,

58:53kalau kita nggak memahami secara benar, secara mendalam, jadi kita bikin dua baris await,

59:01padahal itu kan jadi kurang performa, karena kan sama aja jadi kayak PHP juga.

59:07Maksudnya dia nunggu baris pertama selesai, abis itu nunggu baris kedua selesai,

59:13padahal itu bisa pakai promise all atau promise all settled kan sebetulnya.

59:17- Iya, kalau dua baris kode itu tidak saling berhubungan, misalkan dia tidak perlu menunggu sebelumnya misalkan

59:25get ID, misalkan get ID gitu ya, dan ID ini dipakai di blognya.

59:31- Nggak perlu responsnya. - Iya, nunggu respons dulu,

59:34abis itu dia mau mungkin get address gitu, nah kalau itu perlu menunggu kan, jadi di await.

59:39- Coba kalau misalnya satu get user, satu lagi get latest post gitu yang nggak ada hubungan ya sama data user itu.

59:46Masa yang waktunya kan kalau dipaksa disuruh. - Jangan saling menunggu, karena buat apa gitu.

59:52Kalau misalnya ditampilkan, ya berbarengan aja dua-duanya.

59:55Jadi disitulah sebenarnya kelebihannya si Node.js dan JavaScript.

1:00:00Dan disitu juga kekurangannya karena kita kurang mengerti cara penggunaannya.

1:00:06Jadi itu bisa pisau bermata dua.

1:00:09- Justru kalau ada kaya multiple await itu sudah salah ya, karena meskipun kita menunggu,

1:00:19at least kita harus ada render sesuatu gitu di browser.

1:00:24Kita nggak perlu menunggu itu hasilnya apa untuk bisa melanjutkan, sebisa mungkin ya.

1:00:29- Sebisa mungkin. - Ya atau berarti itu hal yang beda dipisah lah,

1:00:33harus kita bikin modular apa, fungsin yang lebih modular kan, kita ngakalin kode kita.

1:00:37- Iya betul, jadi tetap ada yang dirender di UI, misalnya contoh,

1:00:43oke kita butuh respons dari API baru bisa melakukan sesuatu,

1:00:46tetapi kan proses rendering nggak perlu nunggu itu kan.

1:00:49- Bisa kasih loading screen, spinner, atau apapun gitu ya?

1:00:53- Iya, jadi biarin aja setelah call fix selesai baru kita lakukan proses selanjutnya.

1:00:59Jadi nggak perlu nunggu, oh user name-nya apa, kita harus nunggu.

1:01:04Jadi proses rendering ke stop karena kita menunggu hasil API,

1:01:07baru bisa kita ambil user name-nya atau paling gampang avatar-nya,

1:01:14baru avatar-nya bisa dirender gitu.

1:01:17Nggak perlu gitu, kita bisa merender avatar loading screen, skeleton dulu,

1:01:25kalau itu udah selesai di belakang, nanti sudah selesai baru call back, nge-replace.

1:01:30- Nah itu kan si event loop tuh yang tadi yang apa, ngehendal dia ngerjain tasnya,

1:01:36abis itu dia muter lagi ke bagian layout, styling, painting,

1:01:39jadi sudah ada mekanismenya di browser yang mengoptimize itu kan ya?

1:01:43- Iya, itu juga yang membuat si JavaScript ini berbeda dengan platform yang lain.

1:01:49Karena platform yang lain belum tentu bisa melakukan itu kan.

1:01:52Yang tadinya placeholder, terus tiba-tiba berubah jadi avatar gitu kan.

1:01:56Nah itu mungkin di platform lain ya prosesnya akan berbeda.

1:02:00Kalau di JavaScript ya nggak apa-apa, aman kita melakukan seperti itu,

1:02:04karena dia akan update secara otomatis dalam tanda kutip gitu kan.

1:02:07Itu yang juga penting untuk dipelajari ya.

1:02:11Oke, kita sudah satu jam, ada lagi yang mau disampaikan?

1:02:17- Enggak dulu. - Enggak, sudah cukup.

1:02:21- Hal basic aja bisa, kita sejam ya. Menarik ya.

1:02:25- Menarik. Dan buat teman-teman gimana?

1:02:32- Meskipun basic tetapi butuh penting-penting-penting banget.

1:02:37Kalau ingin jadi web engineer, penting banget untuk menguasai.

1:02:41- Nah ini kan pendapat kita kan, pendapat kita fundamental, konsep dasar itu penting.

1:02:46Menurut teman-teman gimana? Apakah episode ngobrol di web perlu membahas tentang fundamental

1:02:53atau bisa kita selingi dengan hal-hal yang lain?

1:02:58Boleh kasih komentar lah, kasih komentar mau di chat atau mau di selido,

1:03:04di bit.ly/ngobrolinweb kita butuh masukannya supaya ada feedback loop ya.

1:03:10Kita butuh feedback loop. Kalau JavaScript ada event loop, kita butuh feedback loop.

1:03:15Supaya acara kita semakin keren, semakin diminati oleh teman-teman semua

1:03:21dan semakin berwanfaat lah buat teman-teman gitu.

1:03:24Jadi ditunggu pendapatnya, ditunggu masukannya.

1:03:27Untuk hari ini kita mungkin udahan dulu. Terima kasih banyak buat teman-teman yang sudah hadir.

1:03:32Kita ketemu lagi selasa depan insya Allah dengan tema yang berbeda juga.

1:03:38Kita belum tahu apa, silahkan diberikan ide-ide menarik, nanti kita akan bahas.

1:03:45Keren materinya sayang, saya telat.

1:03:48Wah makanya itu ada lonceng, subscribe.

1:03:51Nah itu adalah sistem notifikasi.

1:03:54Jadi kalau misalkan ketika kita live nanti akan dikasih tahu gitu.

1:03:59Itu callback juga namanya.

1:04:02Jadi ketika kita live nanti akan di callback.

1:04:05Kalau notifikasinya nyalah.

1:04:07Teman-teman nggak usah ngeliatin HP terus ya kan, nggak apa kita live, ntar muncul sendiri notifikasinya.

1:04:13Kalau nggak pakai yang standar aja pakai alarm setiap selasa jam 8 waktu Indonesia Barat.

1:04:19Lihat web dev Indonesia, oke?

1:04:22Terima kasih semuanya, kita ketemu lagi minggu depan.

1:04:26Selamat malam, selamat istirahat, bye-bye.

Suka episode ini?

Langganan untuk update episode terbaru setiap Selasa malam!

Langganan Sekarang

Episode Terkait

Ngobrolin Monorepo - Ngobrolin WEB
EP 119

18 Mar 2025

Ngobrolin Monorepo - Ngobrolin WEB

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

Computational Thinking - Ngobrolin WEB
EP 156

3 Feb 2026

Computational Thinking - Ngobrolin WEB

πŸ—£οΈπŸ•ΈοΈ Selasa malam waktunya #NgobrolinWEB! Malam ini kita akan belajar computational thinking. Salah satu kemampuan ya...

Ngobrolin Drama Trademark & Open Source - Ngobrolin WEB
EP 99

1 Okt 2024

Ngobrolin Drama Trademark & Open Source - Ngobrolin WEB

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

Komentar