EP 12

Nobrolin Image - Ngobrolin WEB ep13

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 ----------------------------------------------------------------------------------- Bergabung menjadi anggota elit di kanal ini: https://www.youtube.com/channel/UCHhAlFGFCGgIusQkQIqJLYw/join Donasi dapat meningkatkan kualitas kanal ini: 💰 https://karyakarsa.com/rizafahmi/tip 💸 https://sawe Kunjungi https://ngobrol.in untuk catatan, tautan dan informasi topik lainnya.

Transkrip Bantu Koreksi

0:00(musik)

0:14Hai Hai Hai

0:16Halo

0:18Selamat malam

0:20Selamat Hari Selasa lagi, kita ketemu lagi

0:22dan Hari Selasa adalah waktunya

0:24Ngobrol di web

0:26Ngobrol di web dan temen-temennya ya

0:28Dan masih bersama kita bertiga

0:30Belum ada perubahan dari formasi

0:32Di bagian penjaga gaung ada Ivan

0:34Penjaga gaung

0:36Karena paling bawah posisinya

0:38Ada Ivan

0:40Kemudian

0:42Eka ini apa ya

0:44Gelandang kanan ya

0:46Gelandang berelahan

0:48Dan saya juga

0:50Gelandangan

0:52Playmaker lah

0:54Playmaker

0:56Oke

0:58Jadi untuk apa

1:00Untuk episode ke 14 ya

1:02Eh ke 13 ya salah ya

1:04Hmm 13, yang sebetulnya ke 14

1:06Sebetulnya ke 14

1:08Betul, karena kita mulai dari 0

1:10Kita mulai dari 0 Javascript

Lihat transkrip lengkap

1:12Pemrograman banget

1:14Pemrograman banget

1:16Dan episode kali ini agak berbeda karena

1:18Kita rekamnya

1:20Kita rekam

1:22Karena kita ga live

1:24Iya, jadi kita rekam

1:26Karena 1 bulan lah ya

1:28Jadi mohon maaf buat temen-temen yang

1:30Komen, kita belum bisa highlight

1:32Dan belum bisa jawab, tapi jangan khawatir

1:34Karena nanti komen kita

1:36Di episode mendatang juga

1:38Dan bakal kita jawab di episode-episode mendatang

1:40Dan buat temen-temen yang punya

1:42Topik yang mau dibahas

1:44Atau ada pertanyaan, bisa langsung

1:46Tulis di

1:48www.peed.ly/ngobrolinweb

1:50Dan malam hari ini

1:52Kita akan bahas tentang

1:54Semua topik yang

1:56Images

1:58Topik yang cukup menarik karena

2:00Imagesnya masih bisa agak ke-stretch ya

2:02Oh iya ya

2:04Nah ini CSSnya harusnya aspek

2:06Rasio ini

2:08Ini walaupun bukan image

2:10Video, tapi tetep

2:12Butuh aspek rasio ya

2:14Video itu sebenarnya image

2:16Image yang banyak

2:18Image yang banyak banget

2:20Masih sih

2:22Ya udah gak apa-apa

2:24Enggak, dirimuof dulu sengaja

2:28Gak juga

2:30Gimana ini

2:32Gak enak lo liatnya

2:34Di ganti dulu

2:36Nah udah

2:42Oke, jadi malam ini kita akan

2:46Ngomongin tentang image dan

2:48Beberapa trik

2:50Untuk optimasi ya

2:52Karena image ini, kalau kita cuek

2:54Akan besar sekali ya

2:56Misalkan temen-temen

2:58Bikin image gallery dari

3:00Misalkan dari handphone atau dari

3:02Kamera digital

3:04Terus di transfer

3:06Ke hard disk dan kemudian di upload

3:08Itu kan gede-gede gaban kan

3:10Ada yang 5 mega

3:1211 giga

3:14Eh 11 mega ya

3:16Gede-gede apa sih

3:18Gede-gede lebih gede daripada kita

3:20Ya setinggi Ultraman lah gimana

3:24Setinggi Ultraman

3:26Satu seging kan

3:28Udah gak jaman ya gaban ya

3:30Sepabrik

3:32Pokoknya ukurannya

3:34Terlalu besar gitu

3:36Kita sebagai pembuat

3:38Atau develop aplikasi web

3:40Kita bukan hanya memikirkan

3:42Untuk kita sendiri, mungkin kita

3:44Punya internet yang tidak terbatas

3:46Ada koneksi wifi

3:48Dan lain-lain gitu kan

3:50Kalau user-nya kan belum tentu

3:52Ada yang pakai data

3:54Langsung habis

3:56Terus

3:58Koneksinya slow atau terputus-putus

4:00Atau gimana, kalau dia

4:02Menampilkan apa

4:04Melihat aplikasinya dari

4:06Handphone yang ukurannya

4:083 megapiksel kali 3

4:10Megapiksel, percuma kan

4:12Soalnya layarnya cuma berapa

4:14Jadi harus

4:16Lebih

4:18Lebih diperhatikan lah ya

4:20Salah satu triknya ya

4:22Ada yang mau mulai

4:24Siapa duluan

4:26Handphone itu dulu deh

4:28Yang Mas Riza punya

4:30Topik itu

4:32Ukuran, desponsi

4:34Format itu kayaknya yang dasar-dasarnya

4:36Dulu kan

4:38Kalau ukuran standar ya

4:40Jadi maksudnya

4:42Di sini, kalau dibahas tentang ukuran

4:44Yang tadi, yang barusan diomongin

4:46Kalau misalkan target pengguna kita

4:48adalah pengguna handphone

4:50Pastikan image-nya

4:52Jangan

4:54Terlalu besar, jangan

4:56Melebihi dari

4:58Resolusi dari handphone

5:00Target pengguna kita

5:02Misalkan, berapa sekarang ya

5:04Resolusi handphone, ada yang tahu gak?

5:06414

5:08Mas, sampai 414 lah

5:10400an lah

5:12320

5:14Wah, itu udah

5:162 tahun lalu

5:18Motorola G4 masih 320

5:20Apa 360 gitu

5:22Sekarang mas, Xiaomi paling kecil juga

5:24375

5:26Jangan salah lho, masih ada

5:28Yang terbaru sekarang

5:30Flip itu lebih kecil lagi lho

5:32Oh, ya bisa

5:34Yang fold

5:36Fold apa flip?

5:38Fold

5:40Kalau yang kecilnya

5:42Itu lebih kecil lagi, 280 kok gak salah

5:44Waduh, ini kita

5:46Belum mikirin ya

5:48Belum mikirin handphone yang flip

5:50Atau yang fold

5:52Udah ada yang punya belum?

5:54Belum

5:56Belum punya, tapi emulaturnya sudah ada

5:58Oh, emulaturnya sudah ada

6:00Simulate-nya sudah ada, kalau di desktop

6:02Sudah ada simulate untuk flip

6:04Menarik

6:06Nah, itu pentingnya bikin image yang

6:08Responsive, ya kan

6:10Jadi kita gak harus mikirin

6:12HP terbaru ukurannya berapa

6:14Kita gak perlu mikir lagi tuh

6:16Misalnya, apa 414

6:18Atau 320, apa 315

6:20Atau mungkin ada

6:22Kan sekarang ada tablet

6:24Ada juga phablet kan, antara phone sama tablet

6:26Nah, kita gak usah mikirin

6:28Detail

6:30Ukuran device-nya

6:32Seberapa, tapi kita bisa pakai

6:34Atribut source set, ya kan

6:36Untuk memilih

6:38Image yang ukurannya

6:40Range ukurannya sesuai

6:42Iya, ini yang mau

6:44Dibahas tadi adalah

6:46Take image yang memang

6:48Udah cukup lama ya

6:50Dari awal HTML mungkin sudah ada

6:52Biasanya kan kita pakai class

6:54Pakai ALT untuk

6:56Accessibility, dan SRC

6:58Kan, yang bawah sini

7:00Yang normal kan, yang umum sekali

7:02Itu yang standar

7:04Dan ternyata image ini sudah

7:06Dilengkapi, dipersenjatai dengan

7:08Property-property baru, seperti

7:10SRC set, sizes

7:12Terus nanti ada face priority

7:14Ada loading

7:16Lazy, dan lain-lain kan, ada banyak sekali

7:18Nah, yang mau dibahas

7:20Yang berhubungan dengan ukuran

7:22Selain kita harus memperhatikan

7:24Target

7:26Device kita, juga

7:28Responsive tadi

7:30Kita bisa pakai kondisi ya

7:32Seolah-olah kondisi, kita menyediakan

7:342 atau 3 versi dari image

7:36Misalkan, disini saya contohkan

7:38Saya menggunakan 400x400

7:40Sama 800x800

7:42Dan ketika

7:44Ukuran layar yang pada saat webnya

7:46Dibuka

7:48Maximum 570, atau lebih kecil

7:50Maka dia akan menampilkan 800

7:52Ini kebalik ya, ini saya sengaja

7:54Dibalik, karena kalau

7:56Yang versi mobile, saya justru

7:58Satu baris ke bawah

8:00Kalau yang desktop, jadi 3 kolom

8:023 kolom, sorry

8:043 kolom ke kanan

8:06Jadi ukurannya jadi 400

8:08Seperti itu, jadi ada kondisi

8:10Disini kita bisa lebih dari

8:12Satu ya, ini saya hanya menentukan

8:14Satu aja, yang 800

8:16Selebihnya, fallback-nya ke 400

8:18Jadi itu value-nya

8:20Koma separated ya, jadi mau ada

8:22Berapapun, yang penting kita pisahkan dengan

8:24Koma, ya begitu pertama kali

8:26Ketemu kondisi yang

8:28Tepat, misalnya max width

8:30570, ternyata device-nya 400

8:32Begitu ketemu, ya udah dia berhenti

8:34Kalau nggak ketemu

8:36Terakhir fallback-nya

8:38Yang 400 pixel, dan serunya

8:40Ini bisa pakai apapun

8:42Valid CSS, jadi kan

8:44Misalnya gini nih, yang sering kalau

8:46Di HP atau device yang layarnya

8:48Kecil kan penuh fullscreen

8:50Terus kalau misalnya di layar

8:52Yang lebih besar, mungkin 3 kolom

8:543 kolom itu lebarnya kan kita

8:56Nggak tahu ya, apanya 3 apa

8:58Ya, seberapapun layarnya

9:00Dibagi 3, nah kita bisa pakai misalnya

9:0233 VW, atau 33%

9:04Atau bahkan, kalau nggak salah sih

9:06Pakai calc pun bisa

9:08Calculate misalnya

9:1033 VW kurang

9:12Padding-nya 2

9:14RAM, jadi apapun yang

9:16Valid CSS, itu bisa

9:18Dipakai di sizes ya

9:20Sizes, ya

9:22Dan kalau teman-teman merasa

9:24Sulit gitu ya, ini kayak

9:26String semua, ini string semua

9:28Kita bisa pakai picture

9:30Kalau picture, dibedakan

9:32Tag-nya

9:34Jadi satu source sendiri

9:36Satu kondisi dan satu source

9:38Satu elemen ya

9:40Ada di tag sendiri, ya

9:42Satu tag terpisah, jadi

9:44Mungkin lebih familiar seperti ini

9:46Bisa gunakan picture, tapi pakai

9:48Image juga nggak ada masalah, dua-duanya

9:50Hasilnya sama, gitu

9:52Cuma kalau picture, mungkin kita lebih

9:54Leluasa ya, karena apa

9:56Media query-nya juga bisa lebih

9:58Macam-macam

10:00Terus format-nya juga bisa macem-macem

10:02Misalnya kita punya format yang lebih modern

10:04Nanti mungkin bakal dibahas lebih lanjut ya

10:06Cuma kita bisa mix

10:08Format yang baru, paling terakhir

10:10Fallback-nya, kalau semua yang

10:12Semua elemen baru ini nggak didukung

10:14Fallback-nya ke image

10:16Jadi tetap

10:18Ini bagus banget, resilient

10:20Istilahnya, kalau dibuka

10:22Di browser yang nggak mendukung sama sekali

10:24Nggak bakal breaking

10:26Nggak bakal rusak, tetap ngerender image

10:28Seperti biasa

10:30Jadi kita nggak bisa rugi, baratnya nggak bisa rugi

10:32Karena tetap pasti dirender

10:34Dengan baik, dengan elemen image

10:36Tapi bisa untung

10:38Untung yang dimaksud kalau browser baru yang

10:40Mendukung semua feature itu

10:42Format baru, apa, kondisional

10:44Seperti ini, itu bisa

10:46Kita bisa memanfaatkan feature baru itu

10:48Oke

10:50Oke

10:52Itu ada

10:54Ada satu lagi loh yang

10:56Kita sering terlupakan

10:58Kalau misalnya ngetes image responsive

11:00Itu DPR

11:02Device Per Ratio

11:04Device

11:06DPR apa DPS?

11:08Device Pixel Ratio

11:12Device Pixel Ratio

11:14DPR

11:16Jadi

11:18Itu apa tuh?

11:20Jadi, untuk handphone

11:22Biasanya handphone yang

11:24Middle tier

11:26Atau low tier, itu DPR

11:28Device Pixel Ratio nya itu 1 pixel

11:301.0

11:32Jadi

11:34Per 1 pixel seikul sama 1 pixel

11:36Dari image

11:38Sekarang kalau dia bilang 2

11:40Makin baru

11:42Makin baru

11:44Contohnya kalau

11:46Retina Display

11:48Pertama dipopulerin Retina ya

11:50Retina itu istilahnya Apple kan

11:52Kali 2

11:54Jadi

11:56Misalnya image yang

11:58Untuk ukuran

12:00Mobile mungkin tinggi

12:02400 lah

12:04Anggap aja 400, tapi image yang di load itu 800

12:06Tapi sebetulnya dia

12:08Lalu 800

12:10Jadi kali 2 aja ya

12:12Dicompress ukurannya

12:14Jadi kelihatannya shallow

12:16Dan

12:18Sekarang handphone-handphone yang high end

12:20Itu rata-rata sudah 3

12:22Udah bukan 2 lagi

12:24Bahkan sekarang android

12:26Android yang mid tier pun

12:28Sekarang udah 1.75 atau 2 sih

12:30Kayak udah gak ada yang 1

12:32Jadi kalau kita kembali ke image source

12:34Tadi jangan kaget

12:36400 pixel, tapi kenapa

12:38Yang di load itu yang 800 pixel ya

12:40Bisa pake depth tools ya

12:42Buat cek-cek

12:44Betul, itu yang di load

12:46Karena yang di load itu

12:48Device

12:50Pixel operation

12:52Dan keuntungan

12:54Kita pake source set

12:56Atau pokoknya pake teknologi bawaan

12:58Web API ini

13:00Keuntungannya adalah kita gak usah ngitung

13:02Itu semua manual, pusing kan

13:04Kita harus ngitung misalnya

13:06Mobile, tapi

13:08Rasiunnya pixelnya 2

13:10Atau 3 kita harus ngaliin sendiri

13:12Kita gak perlu ngitung itu manual, tapi kita

13:14Menyediakan variasi

13:16Beberapa file image sesuai ukuran

13:18Jadi yang ngitung

13:20Yang kalkulasi browser-nya kan

13:22Ada gak sih tools yang

13:24Memudahkan kita, misalkan kita punya

13:26Original image itu

13:283 megapixel, terus kita mau bikin

13:30Versi 800, 400

13:32Versi 64, dan lain-lain itu

13:34Ada tools-nya gak sih?

13:36Sharp, yang paling beken ya

13:38Sharp ya, dia bisa

13:40Bahkan dia bisa generate berbagai

13:42Format, ya kan

13:44Tapi itu apa sih?

13:46Oh, tapi ini library ya

13:48Iya, library image processing

13:50Jadi, kalau kita pake

13:52Sama macam kalau di meta framework

13:54Next, itu ada next image

13:56Dulu pertama kali yang populering

13:58Gatsby, paling pertama banget

14:00Maksudnya yang bawaan dari meta framework

14:02Gatsby image, dan

14:04Astro pun sekarang ada

14:06Dan sebagainya

14:08Itu under the hood dia pakai

14:10Sharp, untuk generate beberapa

14:12Ukuran yang

14:14Jadi, kalau untungnya

14:16Maksudnya, kemudahan yang kita dapat

14:18Dari pake next image dan sebagainya

14:20Dia punya preset, kan kita malu

14:22Kan mikir ukurannya berapa aja

14:24256, 512

14:261094

14:28Dia udah ada template, walaupun

14:30Bisa kita override, tapi kalau kita

14:32Butuh customization yang

14:34Lebih lanjut lagi, ya kita langsung

14:36Pake Sharp-nya aja juga bisa

14:38Ini handle-nya

14:40Di aplikasi kasteel ya?

14:42Iya

14:44Cuma harus di note

14:46Harus jalan di server, kan dia memproses

14:48Image ya, dia nge-generate

14:50Image

14:52Tapi jadi

14:54Jadi berat dong ya, kalau misalnya

14:56Kebanyakan

14:58Kebanyakan

15:00Definition image-nya ya

15:02Iya, kalau kita bikin

15:04Variasinya banyak, kayak makin

15:06Apa, makin, jalannya makin

15:08Lama, kalau kita pakai serverless

15:10Atau semacamnya, ya makin

15:12Abis-abisin jatah

15:14Build minute kita

15:16Kecuali kita jalanin

15:18Di lokal, terus ya udah

15:20Kita copy aja, kita bikin apa

15:22Kayak semacam build chain aja

15:24Kita di-copy generated image-nya

15:26Ya udah di-upload sebagai image

15:28Statik, kalau mau ngeliat, ya kan?

15:30Kalau cara

15:32Yang agak sedikit manual, pakai

15:34Comment line gitu ya

15:36Ada image magic yang bisa di-upload

15:38Image magic, oh iya, andalah ya

15:40Caranya kayak gini aja udah

15:42Cuma ya agak manual ya, kita

15:44Kita bikin base script aja

15:46Ya, bikin base script

15:48Seperti ini, versi 400, versi

15:50800, versi berapa

15:52Seperti itu tinggal di-upload ke

15:54Folder image gitu

15:56Kalau yang sederhananya, seperti itu

15:58Nah, itu solusi juga

16:00Enak, cuma harus dari

16:02Maksudnya kalau kita develop di lokal

16:04Ya udah, paling simple

16:06Itu sih paling enak

16:08Ya, paling nanti bisa

16:10Bisa ditambahkan

16:12NPM script-nya untuk menjalankan

16:14Ketika ada image baru misalkan

16:16Gitu lah

16:18Kira-kira

16:20Atau alternatif solusi lain

16:22Kita bisa pakai layanan

16:24Kayak yang terkenal itu

16:26Cloudinary Image

16:28M-G-I-X, gimana tuh

16:30Bacanya, Imagix

16:32Imagix

16:34Iya, jadi

16:36Mulai banyak produk

16:38Yang kayak gini nih, jadi

16:40Bukan hanya cdn

16:42Kalau cdn image, kan kita ngebayanginnya

16:44Cuma bucket buat

16:46Serve image file

16:48Jadi ini punya kapabilitas

16:50Yang lebih dia bisa

16:52Jadi kita masukin satu image

16:54Dia generate

16:56Variasi image

16:58Berbagai ukuran, berbagai format

17:00Terus berbagai, kalau ini lebih canggih sih

17:02Kayak cropping

17:04Cropping setting, sama cropping center-nya

17:06Misalnya kita upload foto yang besar

17:08Dia bisa otomatis

17:10Nge-crop dengan center

17:12Pilih muka orang, atau algoritma lainnya

17:14Nah, dia bisa generate

17:16Berbagai ukuran, jadi kita tinggal

17:18Panggil aja, udah kita tinggal masukin

17:20Ke image source set-nya

17:22Dia punya SDK juga, jadi

17:24JavaScript dan

17:26Lain-lain, dan bahasa lain, jadi kita tinggal

17:28Masukin aja tuh ke

17:30Kayak tadi, image atau picture

17:32Source set-nya

17:34Ya, ya, ya, dan

17:36Kita bisa manggil itu

17:38Mau tentukan ukurannya

17:40Bahkan bisa dari URL kan, misalkan

17:42Image A/

17:4430 x 30

17:46Terus tiba-tiba dia generate sendiri

17:48Yang 30 x 30, apun

17:50Sebelumnya belum pernah kita gunakan itu

17:52Dan kita bisa ngamanin juga

17:54Kan takut tuh

17:56Didos oleh orang lain

17:58Jatah akun kita jebul kan

18:00Nah, kita bisa

18:02Ada banyak security setting-nya, jadi misalnya

18:04Cuma bisa di-request dari

18:06Preferer atau origin

18:08Domain tertentu

18:10Domain kita

18:12Apa istilahnya tuh, bahasanya tuh

18:14Dulu ya?

18:16Course bukan?

18:18Bukan

18:20Kita pakai image dari tempat

18:22Lain, terus kita pakai ini aja

18:24Hot linking

18:26Hot linking

18:28Biasanya dulu pas forum-forum

18:30Online masih ngetrain ya

18:32Paling sering hot linking

18:34Biasanya dikerjain

18:36Dimunculin apa?

18:38Dimunculin gambar yang aneh-aneh

18:40Atau paling gambar bahwa

18:42Dilarang hot linking

18:44Iya, dilarang hot linking

18:46Dan ada

18:48Free-nya juga ya

18:50Yang bisa dicoba untuk

18:52Kreditnya tuh 25

18:54Monthly credit ini apa?

18:56Dia punya hitungan sendiri sih

18:58Cukup banget sih

19:00Kalo buat

19:02Misalnya personal site

19:04Atau punya apapun yang ga banyak

19:06Pengunjungnya

19:08Ga banyak pengunjungnya, dan ga banyak versi

19:10Dari aplikasi ini, cuma 2-3 versi

19:12Gitu kan, iyalah

19:14Oke, oke

19:16Menarik, ada satu

19:18Tools lagi, yang apa?

19:20Yang berhubungan dengan ukuran

19:22Dan juga, oh iya kita belum bahas tentang ini ya

19:24Tentang format baru ya

19:26Kita bahas tentang format dulu ya, baru kita bahasin ya

19:28Ya, formatnya adalah

19:30Kalo dulu kan ada ini ya

19:32Ada beberapa yang lain juga kan, kayak SVG kan

19:34Intinya adalah JPG ini

19:36Untuk fotografi

19:38Format gambar jadul

19:40Yes

19:42Kalo PNG itu

19:44Biasanya dia untuk

19:46Logo ilustrasi dan lain-lain kan

19:48Nah

19:50Kalo yang

19:52Karena ini munculnya kan di tahun 90-an ya

19:54JPG dan PNG itu tahun 90-an kan

19:56Itu dioptimasi untuk

19:58Browser jaman itu 90-an

20:00Dan sekarang browser udah

20:02Berevolusi dan sudah cukup

20:04Cukup modern

20:06Dan sudah cukup powerful

20:08Sehingga format-format yang

20:10Baru bermunculan, ada WebP

20:12Ada HAIC

20:14Ada Aviv

20:16Tapi yang paling sering kita dengar adalah

20:18WebP dan Aviv ya

20:20Kalo HAIC itu baru

20:22Sering digunakan di

20:24Ecosistemnya Apple

20:26iPhoto salah satunya yang menggunakan

20:28Iya, yang paling

20:30Susah

20:32Karena belum

20:34Diadaptasi sama

20:36Yang lain ya

20:38Sebenernya kita bisa menggunakan WebP

20:40Atau Aviv untuk

20:42Image apapun

20:44Untuk fotografika, untuk

20:46Ilustrasi atau logo dan lain-lain

20:48Base praktisnya adalah

20:50WebP ini lebih optimis

20:52Kompresinya lossless

20:54Sehingga dia bisa menggantikan

20:56Jpg lebih cocok

20:58Kalo misalkan ada

21:00PNG, kalo ada file PNG

21:02Bisa dikonversi ke WebP

21:04Tapi kalo untuk

21:06Fotografi

21:08Itu lebih cocok Aviv

21:10Karena kompresi lossingnya paling bagus

21:12Bisa 10x lebih kecil

21:14Dari Jpg

21:16Katanya

21:18Cuma Aviv kayaknya supportnya masih

21:20Belum semua engine supportnya

21:22Masih lebih kurang

21:24Daripada WebP

21:26WebP lebih udah menggunakan

21:28Apa sih beda lossi sama lossless?

21:30Kalo lossi itu

21:32Analoginya kayak

21:34Unzip

21:36Jadi kalo lossless

21:38Kita bisa mengbalikan

21:40Kita udah kompres

21:42Kita bisa balikan ke bentuk yang hampir

21:44Bentuk semula

21:46Jadi udah bisa di kompres jadi

21:48Image nya di lag, image nya kurang bagus

21:50Terus bisa dibalikin lagi

21:52Karena informasi-informasi masih tetap dipertahankan

21:54Makanya ukurannya agak lebih besar

21:56Kalo lossi

21:58Udah hilang, jadi kalo misalkan kita kompres

22:00Ke versi yang lebih kecil atau

22:02Yang resolusi, bukan resolusi

22:04Kualitas yang lebih rendah

22:06Makanya begitu kita gak bisa

22:08Balikin lagi, jadi udah zip gak bisa

22:10Dianzip gitu

22:12Kurang lebih seperti itu

22:14Sederhananya

22:16Berarti kayak

22:18Jpg itu

22:20Lossless? Jpg itu lossi

22:22PNG lossless

22:24Makanya kalo kita

22:26Kompres dengan

22:28Spesifikasi yang sama, antara Jpg sama PNG

22:30Itu lebih kecil Jpg

22:32Karena dia lossi, dia menghilangkan informasi-informasi

22:34Yang dibutuhkan untuk mengbalikan

22:36Image itu ke bentuk semula

22:38Oke, oke

22:40Jadi

22:42Best practice nya adalah kalo

22:44Aviv ini bisa digunakan untuk fotografi

22:46Kalo webp ini untuk elemen desain

22:48Seperti logo dan lain-lainnya

22:50Dan tools yang

22:52Yang sangat membantu adalah

22:54Squoosh apps

22:56Nah ini keren sekali

22:58Squoosh, jadi ini ada image sebesar

23:00796, saya coba

23:02Kompres dengan Aviv

23:04Belum di resize, ukurannya masih sama, persis

23:06100% sama

23:08Kualitasnya di 50%

23:10Kita sudah hemat 64%

23:12Jadi dari

23:14Hampir 800 kilobyte menjadi

23:16Hampir 300 kilobyte

23:18Dan kalo kita, ini bisa kita bandingkan ya

23:20Ini kayaknya

23:22Ada rambut-rambutnya mungkin

23:24Sedikit hilang gitu, tapi masih

23:26Masih oke lah ya, gitu kan

23:28Tapi kalo mata telanjang

23:30Gak bakal sadar juga kan ya

23:32Ya maksudnya, itu terserah kita

23:34Buat nentuin kalo emang

23:36Cuma ilustrasi kan, gak terlalu penting kan

23:38Tergantung matanya

23:40Tergantung matanya

23:42Tergantung retina

23:44Display atau bukan

23:46Tergantung retina mata user juga

23:48Tergantung tujuan website-nya kan

23:50Buat apa, kalo emang buat display

23:52Artwork, mungkin emang harus

23:54Sharp banget dan detailnya harus

23:56Rich banget, tapi kalo cuma buat

23:58Ilustrasi, pendukung kan

24:00Gak perlu tuh

24:02Gak perlu terlalu tajam juga kan

24:04Dan menariknya dari Squash App ini

24:06Selain dia ada library-nya, yang bisa dilihat

24:08Di Github atau di NPM

24:10Dia menyediakan ini

24:12Konversi, jadi kalo kita copy gitu

24:14Clipboard di sini

24:16Itu kita bisa menjalankan

24:18NPM comment

24:20Yang bisa kita

24:22Masuk ke CD

24:24Ke image, terus kita kasih aja

24:26bintang.jpg

24:28Dia akan konversi semua file jpg kita

24:30Menjadi avif

24:32Otomatis

24:34Enak ya

24:36Ini yang bikin Mas Jack Archibald kan ya

24:38Dan temen-temennya

24:42Dan temen-temennya si Surma juga bikin

24:44Dia pakai Wasm kan

24:46Jadi seru sekali

24:50Dan kalo di Githubnya juga ada

24:52Kalo temen-temen cari Squash/Cli

24:54Di Github itu ada

24:56Kalo mau

24:58Programmable SDK-nya

25:00Kalo mau langsung dari

25:02Seperti yang ini, seperti yang Sharp ini

25:04Jadi kita bisa coding disitu

25:06Untuk menggunakan si Squash-nya juga

25:08Jadi bisa automate ya

25:10Iya bisa automate

25:12Mungkin kita bisa bikin

25:14Next image versi kita

25:16Bisa bikin sendiri

25:18Oke, kalo dari saya itu

25:22Kalo biasa aja temen-temen itu

25:24Kalo bangun aplikasi

25:26Pakainya apa sih

25:28Untuk

25:30Untuk

25:32Strateginya

25:36Biasanya pakai

25:38Bikin sendiri

25:40Imagenya

25:42Atau

25:44Maksudnya compres sendiri

25:46Udah misalnya

25:48Dari sisi user

25:50Uploadnya 1 image, terus kita

25:52Kita bikin sendiri

25:54Kita compres sendiri

25:56Kita resize sendiri

25:58Baru di serve

26:00Atau sukanya pakai langsung

26:02Kalo dari, jadi dari sisi

26:04Aplikasi aja

26:06Mikirin

26:08Aplikasi aja

26:10Bisa mikirin kaya

26:12Compresi image, resize image itu gimana

26:14Tergantung budget

26:16Tergantung budget

26:18Tergantung kebutuhan

26:20Iya, kalo budgetnya gede sih

26:22Koordinari langsung

26:24Gak mau mikir lagi

26:26Kalo dikerjaan sehari-hari

26:28Karena

26:30Ya karena penggunaannya cukup heavy juga

26:32Emang udah ada

26:34Toolchain-nya dan itu udah di handle

26:36Di back-end sih

26:38Upload ke bucket

26:40Kan pake AWS juga

26:42Udah pake 1 set layanan

26:44Ya otomatis, ya pasti user

26:46Upload 1 image kan

26:48Nah, di resize jadi

26:503 atau 4 image langsung

26:52Di upload ke CD-nya, ke bucketnya

26:54Ya udah, karena kalo pake

26:56Cloudinary lah, keliatannya

26:58Lumayan ya

27:00Ada yang free kan ya

27:02Ada yang free, tapi kan ya

27:04Kalau abis gimana

27:06Kalo abis

27:08Di tengah-tengah kan mau gak mau bayar

27:10Dan itu kan bisa unexpected ya

27:12Agak sulit kalo buat

27:14Product yang

27:16Udah dipake banyak orang

27:18Cuma ya kadang kalo side project

27:20Atau project lain yang lebih kecil

27:22Pernah ada pengalaman pake Cloudinary

27:24Juga sih, dan misalnya

27:26Kebetulan udah pake framework yang dukung

27:28Misalnya pernah pake next image

27:30Itu enak bisa langsung

27:32Disambungin ke setting-nya

27:34Ke konfigurasinya

27:36Next image

27:38Bisa nyambung ya

27:40Jadi sebenernya gak perlu mikirin

27:42Resize-resize

27:44sendiri lagi ya

27:46Iya, cuman

27:48Kalo satu resize cape juga

27:50Iya, kalo dari sisi

27:52Kitanya yang menggunakan next image

27:54Kalo kita udah ngerti cara pakenya

27:56Sebenernya gak masalah

27:58Harus tau kan, di belakang laya

28:00Apa yang terjadi

28:02Betul, apa yang terjadi

28:04Dan belum tentu juga aplikasi kita

28:06Sekompleks harus

28:08Menggunakan next image

28:10Jadi kalo masih bisa

28:12Dikerjakan sendiri ya, kerjakin sendiri aja

28:14Misalkan hanya butuh 2-3

28:16Versi dari image ya

28:18Pakai shell script juga

28:20Bisa kok gitu

28:22Jangan manja lah

28:24Jadi developer ya

28:26Kalo dikerjakan sih malah dulu karena

28:28Dulu karena ada tuntutan

28:30Apa, dulu pernah

28:32Belum boleh pake

28:34Framework QI dulu

28:36Jadi ya hand roll sendiri

28:38Semua sih, ya dan dengan teknologi

28:40Yang sekarang sih cukup simple ya

28:42Tinggal pasang intersection

28:44Observer, tunggu apa

28:46Image nya sebelumnya

28:48Source nya di load dengan data

28:50Data attribute, data source

28:52Kalo masuk viewport

28:54Ya tinggal diganti aja

28:56Source dan source set

28:58Atributnya, value nya

29:00Terus karena itu tadi

29:02Udah pake cdn sendiri

29:04Jadi apa, strukturnya kan udah tahu

29:06Udah predictable, itu tinggal

29:08Replace string, tinggal generate aja

29:10Udah ada satu function nya buat generate

29:12Bentuk URL image

29:16Ya, betul

29:18Entah kita hand roll sendiri

29:20Atau pake library yang udah ada

29:22Sebetulnya ya itu nggak terlalu masalah

29:24Kalo kita tahu prinsip dasarnya kan

29:26Prinsip dasarnya itu penting ya

29:28Oke, kita bahas apa lagi

29:32Berikutnya

29:34Performance kali ya, seru nih

29:36Performance

29:38Udah ngarah ke situ nih

29:40Preload ya, tadi yang dilakukan Eka

29:42Yang diceritakan Eka itu adalah

29:44Cara manual preload ya, pake data

29:46Image ya

29:48Sekarang, tapi

29:50Udah ada attribute yang bawaan ya

29:52Ada attribute lazy kan

29:54Lazy, ya

29:56Tapi untuk image above the fold

29:58Kita jangan sampe bikin dia lazy

30:00Malah nggak boleh lazy

30:02Lazy eager, sorry

30:04Loading eager

30:06Eager dan face priority

30:08High

30:10Face priority high

30:12Loading eager

30:14Terakhir bisa ditambahin

30:16Preload

30:18Sebelum kita masuk

30:20Ke kata kuncinya

30:22Kalau kita image responsive itu ya

30:24Kan responsive image itu kan ada banyak

30:26Tadi source setnya, anggap aja

30:28Temen-temen punya

30:304 images

30:32Yang di generic pake responsive

30:34Source setnya ada 4

30:36Untuk kita kalo

30:38Preload 4/4nya

30:40Ya sama aja boong, akhirnya

30:42Ngapain browser ngedownload

30:444/4 image yang preload semuanya

30:46Yang dipake cuma 1

30:48Betul

30:50Jadi kalau sebelum

30:52Artikel ini muncul dan

30:54Itu menjadi sebuah API

30:56Jangan mereka preload image

30:58Kalau responsive ya kan

31:00Bahaya gitu

31:02Akhirnya muncul 1 image tag

31:04Namanya

31:06Untuk preload image kita bisa pake

31:08Image source set

31:10Untuk preload image

31:12Jadi ini

31:14Kan kita ada source set

31:16Kita nge preload

31:18Tapi kan kita mau preload yang mana

31:20Kita belum tau dengan browser

31:22Browser yang mikirkan, yang hitung

31:24Yang menentukan dia mau ambil yang mana

31:26Kita scroll lagi ke bawah

31:28Jadi

31:32Scroll, scroll, scroll

31:34Image source set dengan image sizes

31:36Ini kuncinya

31:40Kita link preload

31:42Ya kan

31:44Terus utamanya apa

31:46Sama seperti image tag

31:48Yang kita source set, image tagnya kan ada source

31:50Dan source set

31:52Yang kita preload juga sama itu

31:54Harifnya apa

31:56Terus kita kasih image source set

31:58Dan image sizes

32:00Sizes, oke

32:02Bedanya adalah

32:04Dia gak pake image, tapi pake link

32:06Rail preload ya

32:08Ini kan, ini 2 tag yang berbeda ya

32:10Kalian tetep harus pake

32:12Image source setnya itu

32:14Di feature image biasanya

32:16Iya feature image tetapi yang di preload

32:18Di header

32:20Tapi seedling tag itu bikin dia bisa

32:22Roboast antrian ya, bisa manggil dulu

32:24Iya, jadi dia nge preload

32:26Nge preload dulu image source

32:28Dia siap-siap manggil ke

32:30Yang sesuai dengan

32:32Ukuran

32:34Sesuai dengan viewport

32:36Viewport, oke

32:38Viewport masing-masing user

32:40Tadi kan kita gak tau user kita

32:42Pakai device apa

32:44Jadi

32:46Tercipta lah kondisi yang best

32:48Kondisi yang itu preload tetapi

32:50Sesuai ukuran

32:52Mantap, baru tau ini

32:54Image source set dan image sizes

32:56Oke, ini

32:58Di apa

33:00Dikombinasikan dengan

33:02Face priority high

33:04Juga bisa ya

33:06Bisa, sebenernya sama aja

33:08Jadi kalau preload itu sudah highest

33:10Udah paling tinggi ya

33:12Di atasnya

33:14Face priority high berarti

33:16Iya

33:18Preload itu

33:20Bahkan begitu ketemu langsung download

33:22Jadi enak ya

33:24Reasonable defaultnya

33:26Memudahkan ya berarti

33:28Jadi sebenernya

33:30Face priority kan

33:32Masih berantem ya, belum pada

33:34Masih berantem, betul-betul

33:36Kalau ada face priority high

33:38Ada dua atau ada lima, kan dia berantem tuh ya

33:40Bukan, browser itu

33:42Masih berantem

33:44Face priority itu masih baru di Chrome

33:46Oh, belum compact

33:48Belum compact

33:50Sedangkan image source set dan image

33:52Size ini

33:54Sudah lebih menerik ya

33:56Ya, sudah

33:58Nanti lihat aja di Can I use itu sudah

34:00Semua browser sudah mendukung

34:02Jadi lebih bagus

34:04Ini kunci kan

34:06Oke, oke, menarik

34:10Jadi opsinya dua kan ya

34:12Kalau above default

34:14Kita harus ambil

34:16Secepat mungkin, panggil secepat mungkin

34:18Kalau below default

34:20Harus panggil semalas mungkin

34:22Place in load

34:24Oke

34:26Kalau malas-malas, tolong bilang

34:28Malas-malasan panggil image-nya

34:32Oke

34:34Nayut

34:36Itulah gunanya

34:38Ngobrolin mu ya

34:40Terus, kalau priority

34:44Hints, ini apa priority hints

34:46Priority hints itu yang face priority

34:50Face priority itu

34:52Untuk

34:54Jadi saat base load

34:56Nge-parsing HTML

34:58Si browser itu

35:00Nge-parsing HTML

35:02Jadi kalau kita ketemu face

35:04Priority hints itu

35:08Ya, masih tahu

35:10Ini dibutuhkan lebih awal

35:12Maka untuk

35:14Di waterfall

35:16Untuk download resource-resource itu

35:18Ya, lebih tinggi

35:20Tertinggi itu adalah preload

35:22Preload dan preface

35:24Jadi DNS

35:26Preface, preload itu

35:28Sangat tinggi

35:30Sedangkan kalau kita tagging

35:32tertentu

35:34Mungkin teman-teman nggak cuma image ya

35:36Video kali ya

35:38Jadi kita mau

35:40Video itu pengen muncul

35:42Secepatnya bagi user

35:44Bisa aja kalian kasih face priority

35:46Kalau memang putus cepat itu

35:48Tapi dia nggak bisa

35:50Override, nggak bisa nandingin

35:52Si preload dan preface

35:54Tadi ya

35:56Salah satu casenya adalah

35:58Kalau misalkan kita punya hero image

36:00Seperti ini

36:02Hero image seperti ini

36:04Kalau kita face prioritynya auto

36:06Atau tidak menggunakan face priority

36:08Dia justru di download

36:10Sudah terlambat

36:12Udah duluan image-image yang lain

36:14Yang dibawah-bawah sini yang sebenarnya

36:16Bukan menjadi highlight di face ini kan

36:18Bukan

36:20LCP juga

36:22Iya, menyebabkan LCP jadi

36:24LCP dan CLS

36:26CLS kalau shift

36:28Geser ke bawah

36:30Bisa juga kan kemungkinan dia

36:32Largest meaningful

36:34Largest content itu

36:36Largest content full pain

36:38Bisa jadi itu jadi elemen

36:40Paling dominan atau content paling dominan

36:42Di viewport atas kan

36:44Kita tambahkan face prioritynya

36:46Jadi high

36:48Selain high ada low

36:50Yang paling rendah dan auto itu terserah sama browser

36:52Jadi kalau yang ini auto

36:54Suka-suka browser aja

36:56Sesempetnya

36:58Nah ketika kita ganti

37:00Akhirnya dia menjadi yang lain

37:02Ditunda dulu

37:04Si hero image ini dulu yang

37:06Di download dan di render

37:08Itulah kira-kira

37:10Benar gak

37:12Nah cuma ini bisa munculin masalah

37:14Nggak sih nimbulin masalah

37:16Dengan kemampuan buat

37:18Customize priority

37:20Sebetulnya istilah yang

37:22Sering muncul juga secara umum di luar development pun

37:24Kalau semua hal penting

37:26If everything is important

37:28Jadi ada yang penting deh

37:30Karena semua ada yang gak penting kan

37:32Nah ini kan ngaruh juga nih

37:34Misalnya kalau kasus ekstrimnya

37:36Semua di pre-fetch atau pre-load

37:38Servernya justru apa

37:40Sibuk manggilin file-file itu

37:42Nggak sempet

37:44Berkurang waktu, kedilai waktu

37:46Buat memproses yang lain

37:48Priority-nya high

37:50Banyak yang high malah jadi

37:52Malah jadi clogging juga

37:54Menum-menuhin antrian

37:56Nah ini mungkin bisa jadi masalah

37:58Kalau komponen ya

38:00Kalau komponen base apa

38:02UI kita banyak pakai komponen kecil-kecil

38:04Misalnya skenario yang kebayang

38:06Ini hypothetical sih

38:08Belum pernah ngalamin sendiri, tapi kan mungkin

38:10Misalnya tadi banner yang di atas

38:12Itu hero-komponen

38:14Di komponennya pake fetch

38:16Priority high karena tadinya di atas

38:18Tapi terus ada request dari

38:20Product owner atau yang lain

38:22Bahwa di atasnya lagi

38:24Ada banner lain, mungkin karena ada program

38:26Atau promo lain kan, itu ke push ke bawah

38:28Nah yang di atas itu juga fetch

38:30Priority-nya high, karena dia di atas

38:32Cuma mungkin

38:34Yang ngerjain misalnya anggaplah itu

38:36Developer lain yang lupa

38:38Ngilangin prioritas dari

38:40Komponen yang paling bawah

38:42Atau pada pakai

38:44Micro front-end

38:46Pada pakai micro front-end

38:48Terus mikirin komponennya

38:50Dia sendiri bisa jadi

38:52Iya

38:54Make sense sih, maksudnya

38:56Hero image gitu kan, misalkan udah

38:58Face priority high, maksudnya sih

39:00Begitu tambahin banner di atas, terus kita bikin itu

39:02Jadi low atau dihilangkan, kayaknya

39:04Jarang, kayaknya

39:06Gak bakal kita lakukan, kecuali kalau

39:08Ada yang notice kan

39:10Tolong ini face priority-nya

39:12Dijadikan auto lagi, atau dijadikan low

39:14Berarti itu harus jadi pertimbangan juga

39:16Karena kan dia sebetulnya secara

39:18Fungsi dan prioritas kan, dia ke push

39:20Malah mungkin kedorong gak terlalu

39:22Above the fold, misalnya yang jadi

39:24Penting, yang banner baru

39:26Nah berarti kita sebagai developer juga harus

39:28Ingat bahwa ada

39:30Ada hal seperti itu ya

39:32Iya, itu harus

39:34Didokumentasikan juga

39:36Maksudnya dijelaskan di spesifikasi

39:38Pada saat kita mau ngerjainnya

39:40Tolong yang ini

39:42Kalau ada yang di pindah ke atas, yang sebelumnya di atas

39:44Harus diturunin prioritasnya

39:46Iya ya, benar juga ya

39:48Semakin kompleks jadinya ya

39:50Makin canggih, makin banyak yang harus diurus

39:54Betul, makin banyak

39:56Yang harus diurus

39:58Oke, oke

40:00Semakin seru

40:02Perbincangan kita, terus gimana?

40:04Masalah performance lainnya

40:06Ini CLS, nah

40:08Menghandle CLS

40:10Gimana tuh?

40:12Gampang-gampang susah

40:14Misalnya tadi

40:16Kalau image-nya sudah

40:18Kan kita udah tahu ya

40:20Ukuran image, feature image itu berapa

40:22Apalagi dengan kondisi

40:24Yang kita sudah ada di automatic resize

40:26Atau pakai CDN

40:28Kita udah tahu nih

40:30Ukuran image, feature image itu

40:32Sudah tahu berapa

40:34Jadi gini

40:36Kita, mungkin kita nanti akan bahas lagi

40:38CLS di

40:40Satu babak sendiri

40:42Karena itu bisa panjang ceritanya

40:44Pertama, untuk mengetahui

40:48CLS itu

40:50Tidak hanya terjadi untuk di page load saja

40:52Itu

40:54Pernyataan saya yang pertama

40:56CLS itu terjadi

40:58Selama alaman itu hidup

41:00Rendering

41:02Tidak, selama kita scroll

41:04CLS itu akan terjadi

41:06Dan itu akan di counting

41:08Nanti akan ada window session dan perhitungan itu ada

41:10Nanti kita bahas

41:12Tapi seru nih

41:14Jadi

41:16Kita bicarakan feature image

41:18Yang above the fold dulu

41:20Supaya jangan terjadi CLS

41:22Pastinya tambahkan image

41:24Attribute width dan height

41:26Pastikan

41:28Dan di CSS

41:30Pastikan jangan dikasih minimum height

41:32Ya

41:34Kita

41:36Assumsi nya kan mobile ya

41:38Tambahkan minimum height

41:40Dan width nya 100%

41:42Misalnya kalau ini full ya

41:44Jadi, pastikan

41:46Terus pertanyaannya

41:48Kalau kita yang

41:50Below the fold kan ada image

41:52Loading lazy ya

41:54Itu gimana? Itu bisa terjadi

41:56Jadi CLS enggak?

41:58Jawabannya yes and no

42:00Oke

42:02It depends

42:04Iya

42:06CLS itu hanya terjadi jika

42:08Image nya

42:10Apa jika

42:12Layout shift terjadi

42:14Di dalam viewport

42:16Ya, di dalam viewport

42:18Jadi kalau si user yang scroll terlalu cepat

42:20CLS terjadi

42:22Tapi kalau loading lazy itu

42:24Dia mengambil

42:26Dua viewport ke bawah sudah di load

42:28Jadi kalau kita masih di sini

42:30Loading lazy attribute

42:32Yang bawaan maksudnya ya

42:34Jadi

42:36Anggapannya beginilah ya

42:38Gimana ya posisinya enaknya ya

42:40Gak punya dua handphone saya

42:42Ini deh

42:44Satu screen itu satu

42:46Viewport

42:48Yang di sini

42:50Nah, yang di sini

42:52Loading lazy itu akan

42:56Nge-load

42:58Yang di bawah sini

43:00Jadi di next viewport dia sudah load

43:02Yang dua tidak

43:04Jadi

43:06Begitu ini mundur ke bawah

43:08Yang di viewport ketiga

43:10Dia sudah load

43:12Jadi sebelum image itu masuk

43:14Ke dalam viewport, loading lazy itu sudah

43:16Udah download

43:18Jadi user enggak lihat pas

43:20Containernya melar ya

43:22Ya, layout shift

43:24Terjadi di luar viewport

43:26Itu tidak dianggap CLS

43:28Nah, ini penting diingat juga

43:30Buat yang hand roll apa

43:32Yang nulis sendiri

43:34Pake intersection observer ya

43:36Jadi pastikan nge-setting apa

43:38Boundary-nya, nge-trigger-nya

43:40Event-nya

43:42Manggil callback tuh saat

43:44Boundary-nya harus minus, jangan pas masuk

43:46Viewport-nya

43:48Kalau content visibility

43:50Akan ngaruh nggak sih?

43:52Karena kan ada sedikit perbedaan

43:54Antara loading lazy

43:58Dengan content visibility kan

44:00Kalau content visibility ini

44:02Gambarnya tetap di download

44:04Tapi belum di render

44:06Oh, jadi sudah

44:08Ketika sudah mendekati, baru di render

44:10Ya

44:12Itu apa lagi tuh?

44:14Content visibility, CSS content visibility

44:16Oh, ada ya? Belum pernah pakai

44:18Belum pernah ya

44:20Nah, ini ada CSS namanya content visibility

44:22Cuman

44:24Ini sedikit apa ya

44:26Support-nya juga pasti aneh nih

44:28Support-nya pasti

44:30Belang-belang

44:32Jadi dia menunda proses rendering

44:34Gambarnya, tapi download-nya

44:36Tetap, gitu

44:38Kalau browser sudah idle ya

44:40Sudah nyantai

44:42Jadi

44:44Ini tuh mungkin bisa

44:46Bisa improve total blocking

44:48Kali ya, maksudnya jadi

44:50Browser main thread-nya nggak sibuk

44:52Berusaha ngerender kan, kalau belum perlu

44:54Jadi semacam

44:56Virtual window

44:58Eh, virtual window sih

45:00Apa sih itu kalau kita ngerender

45:02List element banyak banget

45:04Nggak semua di render sekaligus

45:06Bukan namanya apa

45:08Ya, itulah

45:10Cuma ini buat image

45:12Khusus buat image ya

45:14Jadi, di sini

45:16Dilaskan kalau

45:18Dia ngerender seluruh halaman bisa

45:20232 ms

45:22Tapi kalau dia pakai content visibility

45:24Hanya 30, udah dia nggak selesai

45:26Walaupun di bawahnya itu belum ngerender

45:28Tapi image-nya sudah didownload

45:30Nah

45:32Ini sudah bisa untuk Chrome dan Edge

45:34Yang lainnya belum

45:36Chromium doang ini sih

45:38Ya, tapi lumayan lah

45:40Ini kan, apa ya, enhancement

45:42Bukan main feature, cuma enhancement

45:44Ya

45:46Jadi ini mungkin ada

45:48Ada sedikit pengaruhnya ke

45:50Layout sieve itu, karena

45:52Image-nya dia udah tahu nih

45:54Image-nya udah didownload, otomatis ukurannya

45:56Dia tahu kan, panjang lebarannya dia tahu kan

45:58Jadi dia sudah mengkalkulasi

46:00Si

46:02Layout-nya, tinggal dirender aja

46:04Gitu

46:06Dan bisa di set juga ukurannya

46:08Apa namanya

46:10Mau berapa ininya

46:12Viewport-nya ya

46:14Apa sih itu

46:16Jadi ada, nah seperti ini, size-nya

46:18Apa tuh? Contains Intrinsic Sizes

46:22Contains Intrinsic Sizes

46:24Coba tuh, next section

46:26Explain in the next section

46:28In order to realize the potential benefit of content visibility

46:30The browser need to apply size containment

46:32To ensure that rendering result

46:34Contains do not affect the size element in any way

46:36Baik gitu

46:40Yes

46:42Jadi, this means that

46:44The element will layout as if it was empty

46:46Oh berarti, kita tetep harus

46:52Ngeset, ya itu tadi

46:54Size attribute-nya, width sama height-nya

46:56Tetep harus ada

46:58Tetep harus ditambahkan di itu ya

47:00Di image ya

47:02Jadi tadi ada beberapa layer kan

47:04Untuk menentukan ukuran, pertama

47:06Harus di image element-nya sendiri, walaupun

47:08Nanti, apa, kalau image

47:10Width sama height attribute

47:12Di element image kan

47:14Harus number ya, cuma harus angka

47:16Misalnya 600x300

47:18Walaupun nanti kan

47:20Mungkin, bukan mungkin, tapi pasti

47:22Menyesuaikan ukuran device kan

47:24Karena kita bakal ngestyle lagi di layer

47:26Kedua dengan CSS

47:28Nggak mungkin semua

47:30Ngerender 600, bisa aja 100%

47:32100% itu kan ada kalkulasi-nya sendiri

47:34Waktu

47:36Browser parsing CSS ya

47:38Itung 100%-nya dia itu berapa

47:40Nah, jadi itu pertama di image

47:42Element-nya sendiri, di markup-nya

47:44Terus di CSS

47:46Nah, terus baru bisa

47:48Pakai tambahan ini tadi kan

47:50Content

47:52Ini sudah, jadi

47:54Kalau dia pakai

47:56Kembali ke kondensasi mereka

47:58Maksudnya, si browser nggak ngerender

48:00Kalau

48:02Kalau belum mau ditampil

48:04Kalau belum nyampe

48:06Mungkin 2-3 viewport sebelum itu

48:08Kayak yang tadi dijelasin

48:10Menarik ya

48:14Oke ya

48:16Abis ini pasti langsung nyoba

48:18Iya dong, langsung coba

48:20Walaupun sayangnya support-nya

48:22Masih Chromium only ya

48:24Terus, ngomong-ngomong CSS

48:26Ada lagi nih, yang penting, maksudnya yang berguna banget nih

48:28CSS udah ada

48:30Aspek rasio kan, ada proporsi aspek rasio

48:32Dan itu support-nya sudah

48:34Bagus banget, cross-browser semua ada

48:36Jadi kalau dalam kasus tertentu

48:38Kita kan mungkin udah

48:40Tahu rasio ukurannya

48:42Misalnya thumbnail itu

48:44Selalu square

48:46Berarti 1/1

48:48Atau berapa lah

48:5016/9, jadi kalau

48:52Dalam kasus yang kita udah

48:54Tahu rasio image-nya

48:56Bisa di setting aja container-nya

48:58Pakai CSS sudah, nggak usah

49:00Saya bingung lagi

49:02Kalau dulu harus nambahin padding, top

49:04Dulu pakai hack

49:06Dulu pakai hack padding sebelum

49:08Aspek rasio itu supported, sekarang

49:10Segampang, udah aspek rasio 0.2

49:1216/9

49:14Terus kalau

49:16Itu sudah support semua browser kan

49:18Kalau nggak salah safari belum deh

49:20Eh coba ya

49:22Penasaran

49:24Coba kena use-nya

49:26Karena aku pernah mau pake itu

49:28Tapi nggak jadi

49:30Coba, use apa nih

49:32Aspek rasio

49:34Udah

49:36Kecuali IE

49:38Kecuali IE

49:40IE mah, nggak usah dipikir

49:42Ya maksudnya

49:44Kalau IE mah, emang semua yang baru

49:46Sudah resintis ya

49:48Udah legacy

49:50Sudah legacy

49:52IE 11 loh, nggak bisa ya

49:54Tapi ini udah ijo semua sih

49:56Ya relatif aman lah

49:58Kalau kita pakainya

50:00Di IE itu sendiri

50:02Misalnya aspek rasio-nya dipakai di

50:04IE sendiri, bukan kontainernya

50:06Pastikan juga pakai objek fit ya

50:08CSS property objek fit

50:10Biar nggak

50:12Gepeng, waktu ngeresize

50:14Ya

50:16Nah ini mempermudah sekali nih

50:18Kalau kita bermain-main dengan

50:20Ukuran IE yang tidak standar

50:22Ada yang 16/9, ada yang

50:244/3, ada yang

50:261x1, macem-macem

50:28Sementara source image-nya belum tentu

50:30Sesuai

50:32Belum tentu sesuai

50:34Akan sangat berguna

50:38Untuk dipakai

50:40Terutama untuk bikin

50:42Banyak web yang ada

50:44Hubungannya dengan image yang

50:46Ukurannya berbeda-beda

50:48Oke, menarik-menarik

50:50Banyak belajar ya kita malam ini

50:52Padahal image doang ya

50:54Image doang ya

50:56Masalahnya semua website

50:58Hampir semua website ada image

51:00Itu konten yang sangat nggak bisa dihindari

51:02Betul, apalagi

51:04Landing page

51:06Harus menghindari pernyataan doang

51:08Karena web itu nggak ada yang kata doang

51:10Semua bagian itu

51:12Dalam banget

51:14Padahal image doang

51:16Padahal

51:18Nggak ada image doang

51:20Image kan salah satu elemen

51:22HTML yang paling tua kan

51:24Dari tahun 1993 lah

51:26Betul

51:28Sebenarnya

51:30Tredy itu lebih banyak

51:32Ngomongin jepang skill pada

51:34Elemen utama dari

51:36Web itu, image dan

51:38Text

51:40Video terakhir

51:42Video baru sekarang-sekarang ini ya

51:44Video mulai

51:46Muncul, mulai banyak digunakan

51:48Untuk landing page juga

51:50Ada background video dan lain-lain

51:52Tapi di tahun lalu

51:54Oh ya video, harus ada video

51:56Tapi di tahun lalu, di bulan Juni

51:58Kalau nggak salah

52:00Di Web Almanak, di HTTP Archive itu

52:02Ada yang menarik

52:04Jadi dari 100%

52:06Pengguna mobile

52:08Web gitu ya

52:10Yang membuka

52:12Aplikasi web lewat mobile

52:1456% itu adalah image

52:16Hmm, ada statistiknya ya

52:18Menarik

52:2044% itu adalah gabungan dari

52:22HTML, CSS, dan JavaScript

52:24Jadi HTML, CSS, dan JavaScript digabungin

52:26Masih lebih gede image

52:28Itu dari size nya

52:30Atau dari?

52:32Ya size, ukurannya

52:34Itu juga gara-gara elemen yang

52:36Cuma nampilin satu image

52:38Ukurannya 4000 pixel

52:40Ya itu ada

52:42Contribusinya juga, tapi

52:44Karena image ini kompresinya kan

52:46Tidak

52:48Tidak bisa

52:50Sekecil text kan

52:52HTML, CSS, JavaScript kan text ya

52:54Dan font juga ditambah font lagi

52:56Itu kan text ya

52:58Jadi kompresinya sangat kecil

53:00Tapi kalau image kan nggak bisa sekecil itu

53:02Kalau kecil nanti ngeblur semua

53:04Jelek kan, jadi harus

53:06Menyeimbangkan antara

53:08Masih enak dilihat dengan ukuran

53:10Yang ramah

53:12Sama

53:14Apa ya, sama koneksi

53:16Pengguna gitu

53:18Ukuran dan strategi lazy loading ya

53:20Kalau sekarang itu jadi penting banget

53:22Salah satu strategi

53:24Lazy load itu

53:26Dia pakai ini lho, pakai

53:28Saat image itu

53:32Deload, dia pakai image yang

53:34Low resolution yang hitam putih

53:36Oh ya, background image

53:38Nah ada tuh

53:40Coba buka linknya

53:42Cloudinary dibuatin langsung

53:44Terus otomatis dibikinin

53:46Cuma ada tuh, coba buka

53:48Blur hash, kalau kita nggak pakai

53:50Cloudinary yang ngasih langsung

53:52Bisa pakai, ini nih ada

53:54Library-nya

53:56Blur hash, ini cara pakainya gimana

53:58Ya library, install aja

54:00Oh library

54:02Terus ukuran-ukurannya semua

54:04Oh dibikinin sama dia ya

54:06Oke

54:08Ya sama Cloudinary juga

54:10Mau saya pakai teknologi, jadi Blur hash itu

54:12Ternyata ada algoritmanya

54:14Ini dibikin berdasarkan algoritma

54:16Tertentu, jadi dia kayak ngambil

54:18Bagian-bagian yang dominan

54:20Dia kan harus ngedetek image-nya dulu tuh

54:22Warnanya apa aja, bagian mana yang

54:24Kontrasnya mencolok, baru dia

54:26Bikin si Blur hash yang

54:28Di kotak paling kanan itu

54:30Jadi sebenarnya itu ternyata ada

54:32Algoritmanya, cuma ya bisa

54:34Diinterpretasi macem-macem

54:36Berbagai cara oleh library

54:38Nah ini salah satu library yang

54:40Paling populer lah

54:42Bisa jalanin

54:44Cara sederhananya, cara sederhananya

54:46Saya bahas juga kemarin waktu itu

54:48Nah gini aja cara sederhananya

54:50Jadi kita bikin image versi yang lebih kecil

54:52Misalkan 42x42

54:54Terus kita load sebagai

54:56CSS atau style

54:58Background image, jadi dia ngeblur

55:00Distress, jangan lupa width sama height-nya

55:02Disesuaikan dengan ukuran image yang

55:04Kita inginkan ya

55:06Kalau gak set ukuran

55:08Nanti gak muncul

55:10Gak muncul, kecil banget

55:12Ada di pojokan doang kan

55:14Ini adalah gambar gitar yang tadi

55:16Jadi sebenarnya

55:18Image-nya itu tetap ada di belakang

55:20Jadi begitu image yang benerannya

55:22Udah muncul, dia akan menimpa

55:24Si Blur image tadi

55:26Itu kalau rajin

55:28Kalau triknya orang males, developer males

55:30Background-nya itu warna abu-abu

55:32Oh iya bener

55:34Opacity layer

55:36Misalnya opacity layer

55:38RGB

55:40255,255

55:42Alphananya 0,1

55:44Itu trik favorit

55:46Bisa on the fly juga ya

55:48Jadi gak perlu di convert dulu ya

55:50Kalau ini kan perlu di convert manual kan

55:52Tapi kalau secara estetis mungkin

55:54Kalau dari kebutuhan produk atau klien

55:56Itu kan kotak abu-abu doang

55:58Kotak opacity kurang menarik

56:00Jadi kita tetap

56:02Bisa pake 2 trik

56:04Entah pake Blur hash atau tadi

56:06Resize jadi kecil

56:08Dijadiin background image

56:10Mana contohnya

56:12Ini gak ada contohnya ya

56:14Di bawah coba

56:16Ada di github-nya

56:18Wah banyak bahasa

56:20Mana

56:22Contoh kodenya

56:24Gak ada

56:26Ini ada di github-nya tuh

56:28Oh ini

56:30Di sini

56:32Coba klik java script

56:34Java script

56:36Ini

56:38Blur hash JS

56:40Oh dia ada banyak

56:42Nah ini ya

56:44Scriptnya di load dulu

56:46Kemudian

56:48Apa ini

56:50Encode di code

56:52Get image data as image

56:56Switch on load

56:58Promise

57:00Get image data as image

57:02Mana dia

57:04Oh ini encode ya, encode promise bukan

57:06Oh ada yang

57:08Type script-nya juga malah lebih

57:10Enak di lihat tuh, mirip sih

57:12Oh ya, Type script implementation

57:14Mana dia

57:16Kelewat, ini dia

57:18NPM install

57:22Kemudian decode

57:24Decode ini

57:26Ini decode-nya dari mana

57:28Decode dari

57:30Hash-nya

57:32Encode ya, encode dulu ya

57:34Kita butuhnya encode

57:36Encode dulu

57:38Jadi ini bisa auto

57:40Sebelum mati sih cara pakaian

57:42Dan gue lihat dulu deh

57:44Harus dicoba sih

57:46Nanti, hasil-hasil

57:48Ini sebaiknya di buffer

57:50Hasilnya base 64

57:52Hash gitu

57:54Ini kan, hasilnya kan

57:56Jadi bisa inline

57:58Oh iya bener, kalau ini

58:00Jadi berubah dia

58:02Keren sekali konsepnya

58:04Jadi inline ya

58:06Ya iya, base 64 gitu

58:08Buat inline source

58:10Ya, dipotong abis itu kan

58:12Supaya dia jadi mengecil ya

58:14Belajar lagi nih hari ini kan

58:16Only 20 and 30 characters

58:18Ini kan mungkin

58:20Kalau ribet ya

58:22Kalau gue sih kadang cari aja base 64

58:24Converter, maksudnya kalau cuma 1-2 gambar

58:26Kan gak worth it juga kan nih

58:28Kurang worth it buat

58:30Configure satu setup sendiri

58:32Ya ketengan aja

58:34Di convert ke base 64

58:36Kalau static base iya

58:38Tapi kalau

58:40Optimasi gede banget

58:42Kan gak bisa ya

58:44Yang tergantung situasi

58:46Kalau udah besar baru dipikir-pikir gini

58:48Kalau cuma buat 1-2

58:501-2 tempat

58:52Di satu static page ya

58:54Gak usah buat apa

58:56Manual aja

58:58Tapi kan yang penting kita tahu dulu

59:00Senjatanya banyak nih

59:02Tinggal pilih senjata yang mana

59:04Eh ini

59:06Di WordPress ada gak nih pluginnya

59:08Pasti ada lah yakin

59:10Ini PHP, oh udah ada PHP

59:12Ini pasti udah ada yang bikin

59:14Plugin sendiri

59:16Pasti

59:18Buru khas

59:20Kayaknya penggunaan PHP paling besar

59:22Itu dari WordPress

59:24Ecosystem deh

59:26Yang jaman sekarang

59:28Iya dong

59:30Jadi

59:32Laravel juga

59:34Oh iya

59:36Atau pengguna itu mungkin

59:38Yang jarang kedengar kan yang pakai Z-Frame

59:40Enterprise itu kan game team aja

59:42Itu kan

59:44Udah gak kedengaran tapi ya

59:46Yang pakai ya banyak ya

59:48Oke, oke

59:54Ada lagi yang mau dibahas?

59:56Kita sudah satu jam?

59:58Gak ada, pas ya bisa

1:00:00Pas abis beneran loh

1:00:02Oke

1:00:06Ivan, ada lagi?

1:00:08Wajangan

1:00:12Wajangan terakhir

1:00:14Wajangan penutup bukan

1:00:16Ujangan apa

1:00:18Kalau mau tips

1:00:20Nampilin image

1:00:22Pakailah image sesuai ukuran

1:00:26Jangan lupa kasih image

1:00:28Height dan attribute

1:00:30Dan

1:00:32Lazy load

1:00:34Semua image di bawah

1:00:36Viewport, di bawah default

1:00:38Yang default

1:00:40Preload

1:00:42Secepat mungkin

1:00:44Supaya lcp nya bagus

1:00:46Dan

1:00:48Pakai image height

1:00:50Dan attribute height dan width

1:00:52Supaya tidak terjadi CLS

1:00:54Oh iya

1:00:56Jadi ingat alt

1:00:58Pakai alt tag, sebisa mungkin

1:01:00Kalau kita bisa pakai alt tag

1:01:02Untuk aksesibilitas

1:01:04Jadi kalau misalnya

1:01:06User yang pakai

1:01:08Ngaruh ke SEO juga

1:01:10Jadi kalau user yang pakai

1:01:12Screen reader, misalnya yang

1:01:14Tuna Netra atau Lovision

1:01:16Itu bisa di narrate, itu gambar apa

1:01:18Nah, berguna juga untuk SEO

1:01:20Kalau user cari, ngetik

1:01:22Gambar tertentu

1:01:24Sesuai keyword nya, itu bisa masuk

1:01:26Cuma yang harus dihindari

1:01:28Jangan, kalau misalnya

1:01:30Image nya user generated

1:01:32Atau kita emang gak bisa

1:01:34Apa, itu dynamic ya

1:01:36Kita gak bisa ngasih alt text yang bermakna

1:01:38Jangan nulis alt text asal-asalan

1:01:40Karena justru

1:01:42Apa, bakal merusak experience

1:01:44Buat tadi screen reader user

1:01:46Bisa pakai chat GPT

1:01:48Chat GPT untuk

1:01:50Stable diffusion

1:01:54Tapi jangan, kalau asal-asala

1:01:56Nanti ngerusak SEO juga kan

1:01:58Kalau konten nya ngacu

1:02:00Nah, kalau misalnya kita

1:02:02Gak bisa ngasih alt text yang bermakna

1:02:04Alt attribute nya

1:02:06Jangan dihilangin

1:02:08Jadi, best practice nya itu tetap pakai alt

1:02:10Tapi sama dengan empty string

1:02:12Jadi, harus seperti itu

1:02:14Empty string, kosong

1:02:16Itu udah minimal banget ya

1:02:18Karena kalau gak

1:02:20Screen reader

1:02:22Itu

1:02:24Kalau gak ada altnya, bakal

1:02:26Ngebaca something like

1:02:28No image, kan mengganggu ya

1:02:30Jadi, lebih baik altnya

1:02:32Karena string kosong itu bakal di-skip

1:02:34Betul

1:02:36Dan juga, mungkin akan berguna

1:02:38Ketika image nya broken

1:02:40Misalkan image nya pindah, kita lupa

1:02:42Itu alt nya yang muncul kan

1:02:44Muncul, iya

1:02:46Jadi, keguguran nya banyak

1:02:48Image itu kalau di mobile

1:02:50Kasih, kalau memang

1:02:52Dia butuhnya

1:02:54Constraint nya ya, pasti

1:02:56Jangan sampai overflow

1:02:58Paling sering image itu ngedorong

1:03:00Itu

1:03:02Itu kebantu

1:03:04Kalau kita pakai

1:03:06CSS reset apapun

1:03:08Itu

1:03:10Udah kebantu sih, biasanya ada

1:03:12Max width nya

1:03:14Image itu max width nya 100%

1:03:16Tapi kalau kita gak pakai itu

1:03:18Ya, atau punya apapun itu

1:03:20Pastikan bahwa ada max width

1:03:22100% ya, biar gak melar

1:03:24Oke

1:03:26Oke, kalau gitu

1:03:28Tadi adalah kesimpulan

1:03:30Dari apa yang kita omongkan dari awal

1:03:32Pejangan image

1:03:34Sampai

1:03:36Penghujung acara

1:03:38Jangan lupa, topik atau tautan

1:03:40Dan pertanyaan menarik bisa dilayangkan ke

1:03:42bit.ly/ngobrolinweb

1:03:44Mungkin untuk malam ini sekian dulu

1:03:46Kita jumpa lagi

1:03:48Di episode berikutnya

1:03:50Selasa depan

1:03:52Dengan topik yang berbeda

1:03:56Jadi untuk malam ini

1:03:58Udahan dulu, selamat malam, selamat istirahat

1:04:00Sampai jumpa

1:04:02Di episode berikutnya

1:04:04Dadah

Suka episode ini?

Langganan untuk update episode terbaru setiap Selasa malam!

Langganan Sekarang

Episode Terkait

Ngborolin 2025 - Ngobrolin WEB
EP 111

7 Jan 2025

Ngborolin 2025 - Ngobrolin WEB

📖 Ulasan Tren Web 2024 - Perkembangan AI Generatif: Penyedia dan produk AI menjadi lebih beragam, tidak hanya chatbot ...

Ngobrolin Kontainer - Ngobrolin WEB
EP 77

9 Apr 2024

Ngobrolin Kontainer - Ngobrolin WEB

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

Bedah Web - Ngobrolin WEB
EP 166

12 Mei 2026

Bedah Web - Ngobrolin WEB

Berhubung banyak yang submit, malam ini kita akan kembali membedah beberapa situs. Penasaran gimana pendapat para pakar ...

Komentar