{"id":22040,"date":"2021-03-28T05:06:59","date_gmt":"2021-03-27T22:06:59","guid":{"rendered":"https:\/\/speed.family\/?p=20007"},"modified":"2023-07-23T19:45:50","modified_gmt":"2023-07-23T12:45:50","slug":"cumulative-layout-shift","status":"publish","type":"post","link":"https:\/\/kiencang.net\/cumulative-layout-shift\/","title":{"rendered":"Ch\u1ec9 s\u1ed1 Cumulative Layout Shift (CLS) l\u00e0 g\u00ec? [ph\u1ea7n m\u1ed9t]"},"content":{"rendered":"\n

Ch\u00fa th\u00edch: v\u00ec b\u00e0i d\u00e0i & nhi\u1ec1u th\u00f4ng tin k\u1ef9 thu\u1eadt n\u00ean t\u00f4i chia l\u00e0m hai ph\u1ea7n cho b\u1ea1n ti\u1ec7n theo d\u00f5i & t\u00f4i c\u0169ng d\u1ec5 bi\u00ean t\u1eadp h\u01a1n. So v\u1edbi c\u00e1c ch\u1ec9 s\u1ed1 kh\u00e1c c\u1ee7a PageSpeed Insights<\/a>, ch\u1ec9 s\u1ed1 n\u00e0y \u00edt mang y\u1ebfu t\u1ed1 t\u1ed1c \u0111\u1ed9 nh\u1ea5t (n\u1ebfu kh\u00f4ng mu\u1ed1n n\u00f3i l\u00e0 kh\u00f4ng c\u00f3!). Nh\u01b0ng m\u1ee9c \u0111\u1ed9 quan tr\u1ecdng c\u1ee7a n\u00f3 th\u00ec kh\u00f4ng h\u1ec1 nh\u1ecf, b\u1edfi n\u00f3 \u1ea3nh h\u01b0\u1edfng r\u1ea5t l\u1edbn \u0111\u1ebfn tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng, v\u00e0 suy cho c\u00f9ng, t\u1ed1c \u0111\u1ed9 cao m\u00e0 c\u00e1c tr\u1ea3i nghi\u1ec7m kh\u00e1c th\u00ec t\u1ec7 th\u00ec t\u1ed5ng l\u1ea1i c\u00f3 khi l\u1ea1i t\u1ec7 h\u01a1n tr\u01b0\u1edbc. Ch\u1ec9 s\u1ed1 n\u00e0y l\u00e0 m\u1ed9t c\u1ea3nh b\u00e1o quan tr\u1ecdng v\u1edbi ng\u01b0\u1eddi t\u1ed1i \u01b0u t\u1ed1c \u0111\u1ed9, hi\u1ec7u su\u1ea5t website<\/a>. N\u00f3 n\u00f3i v\u1edbi ch\u00fang ta r\u1eb1ng c\u1ea7n ph\u1ea3i bi\u1ebft c\u00e2n \u0111\u1ed1i, v\u00e0 \u0111\u1eb7t tr\u1ecdng t\u00e2m v\u00e0o ng\u01b0\u1eddi d\u00f9ng.<\/p>\n\n\n\n

OK, gi\u1edd ch\u00fang ta v\u00e0o b\u00e0i th\u00f4i.<\/p>\n\n\n\n


\n\n\n\n

Ch\u1ec9 s\u1ed1 Cumulative Layout Shift (CLS) l\u00e0 m\u1ed9t th\u00f4ng tin quan tr\u1ecdng, l\u1ea5y ng\u01b0\u1eddi d\u00f9ng l\u00e0m trung t\u00e2m \u0111\u1ec3 \u0111o \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh v\u1ec1 m\u1eb7t hi\u1ec3n th\u1ecb (visual stability), v\u00ec n\u00f3 gi\u00fap \u0111\u1ecbnh l\u01b0\u1ee3ng t\u1ea7n su\u1ea5t ng\u01b0\u1eddi d\u00f9ng ph\u1ea3i tr\u1ea3i qua s\u1ef1 thay \u0111\u1ed5i b\u1ed1 c\u1ee5c b\u1ea5t ng\u1edd (kh\u00f4ng l\u01b0\u1eddng tr\u01b0\u1edbc & s\u1ebd g\u00e2y kh\u00f3 ch\u1ecbu) \u2014 CLS (ch\u1ec9 s\u1ed1 thay \u0111\u1ed5i b\u1ed1 c\u1ee5c t\u00edch l\u0169y) th\u1ea5p gi\u00fap \u0111\u1ea3m b\u1ea3o r\u1eb1ng trang c\u1ee7a b\u1ea1n th\u00e2n thi\u1ec7n h\u01a1n.<\/p>\n\n\n\n

B\u1ea1n \u0111\u00e3 bao gi\u1edd g\u1eb7p chuy\u1ec7n th\u1ebf n\u00e0y ch\u01b0a: \u0111ang \u0111\u1ecdc m\u1ed9t b\u00e0i b\u00e1o tr\u00ean m\u1ea1ng th\u00ec \u0111\u1ed9t nhi\u00ean c\u00f3 c\u00e1i g\u00ec \u0111\u00f3 thay \u0111\u1ed5i tr\u00ean trang? N\u1ebfu kh\u00f4ng c\u00f3 c\u1ea3nh b\u00e1o n\u00e0o, v\u0103n b\u1ea3n s\u1ebd di chuy\u1ec3n v\u00e0 b\u1ea1n \u0111\u00e1nh m\u1ea5t v\u1ecb tr\u00ed \u0111\u1ecdc \/ xem c\u1ee7a m\u00ecnh. Ho\u1eb7c th\u1eadm ch\u00ed t\u1ec7 h\u01a1n: b\u1ea1n chu\u1ea9n b\u1ecb nh\u1ea5n v\u00e0o m\u1ed9t li\u00ean k\u1ebft ho\u1eb7c m\u1ed9t n\u00fat n\u00e0o \u0111\u1ea5y, nh\u01b0ng ngay tr\u01b0\u1edbc th\u1eddi \u0111i\u1ec3m ng\u00f3n tay c\u1ee7a b\u1ea1n ch\u1ea1m v\u00e0o m\u00e0n h\u00ecnh th\u00ec \u2014 B\u00d9M \u2014 li\u00ean k\u1ebft di chuy\u1ec3n v\u00e0 cu\u1ed1i c\u00f9ng b\u1ea1n nh\u1ea5p v\u00e0o m\u1ed9t th\u1ee9 ho\u00e0n to\u00e0n kh\u00e1c!<\/p>\n\n\n\n

Th\u00f4ng th\u01b0\u1eddng, nh\u1eefng tr\u1ea3i nghi\u1ec7m ki\u1ec3u n\u00e0y ch\u1ec9 g\u00e2y kh\u00f3 ch\u1ecbu, nh\u01b0ng trong m\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p kh\u00e1c, ch\u00fang c\u00f3 th\u1ec3 g\u00e2y ra thi\u1ec7t h\u1ea1i th\u1ef1c s\u1ef1 \u0111\u00e1ng k\u1ec3. Xem video v\u1ec1 m\u1ed9t v\u00ed d\u1ee5 nh\u01b0 v\u1eady:<\/p>\n\n\n\n

1. CLS l\u00e0 g\u00ec? <\/h2>\n\n\n\n

CLS \u0111o l\u01b0\u1eddng t\u1ed5ng \u0111i\u1ec3m c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c \u0111i\u1ec3m thay \u0111\u1ed5i b\u1ed1 c\u1ee5c<\/em> (layout shift scores) ri\u00eang l\u1ebb cho m\u1ecdi thay \u0111\u1ed5i b\u1ed1 c\u1ee5c kh\u00f4ng mong mu\u1ed1n<\/em> (unexpected layout shift) x\u1ea3y ra trong to\u00e0n b\u1ed9 th\u1eddi gian t\u1ed3n t\u1ea1i c\u1ee7a trang.<\/p>\n\n\n\n

S\u1ef1 thay \u0111\u1ed5i b\u1ed1 c\u1ee5c<\/em> x\u1ea3y ra b\u1ea5t c\u1ee9 khi n\u00e0o m\u1ed9t ph\u1ea7n t\u1eed hi\u1ec3n th\u1ecb thay \u0111\u1ed5i v\u1ecb tr\u00ed c\u1ee7a n\u00f3 t\u1eeb m\u1ed9t khung \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb sang khung k\u1ebf ti\u1ebfp. (Xem th\u00f4ng tin chi ti\u1ebft b\u00ean d\u01b0\u1edbi \u0111\u1ec3 bi\u1ebft c\u00e1ch t\u00ednh \u0111i\u1ec3m thay \u0111\u1ed5i b\u1ed1 c\u1ee5c ri\u00eang l\u1ebb).<\/p>\n\n\n\n


\n\n\n\n

\u0110i\u1ec3m CLS t\u1ed1t l\u00e0 g\u00ec?<\/h3>\n\n\n\n

\u0110\u1ec3 cung c\u1ea5p tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng t\u1ed1t, c\u00e1c trang web n\u00ean c\u1ed1 g\u1eafng c\u00f3 \u0111i\u1ec3m CLS t\u1eeb 0,1<\/strong> tr\u1edf xu\u1ed1ng. Nh\u1eb1m \u0111\u1ea3m b\u1ea3o b\u1ea1n \u0111\u1ea1t \u0111\u01b0\u1ee3c m\u1ee5c ti\u00eau n\u00e0y cho h\u1ea7u h\u1ebft ng\u01b0\u1eddi d\u00f9ng c\u1ee7a m\u00ecnh, ng\u01b0\u1ee1ng t\u1ed1t \u0111\u1ec3 \u0111o l\u01b0\u1eddng l\u00e0 ph\u00e2n v\u1ecb<\/strong> t\u1ea3i trang th\u1ee9 75<\/strong> , \u0111\u01b0\u1ee3c ph\u00e2n \u0111o\u1ea1n tr\u00ean c\u00e1c thi\u1ebft b\u1ecb di \u0111\u1ed9ng v\u00e0 m\u00e1y t\u00ednh \u0111\u1ec3 b\u00e0n.<\/p>\n\n\n\n

\u0110\u1ec3 t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 nghi\u00ean c\u1ee9u v\u00e0 ph\u01b0\u01a1ng ph\u00e1p \u0111\u1eb1ng sau \u0111\u1ec1 xu\u1ea5t n\u00e0y, h\u00e3y t\u00ecm \u0111\u1ecdc b\u00e0i vi\u1ebft: X\u00e1c \u0111\u1ecbnh ng\u01b0\u1ee1ng ch\u1ec9 s\u1ed1 Core Web Vitals.<\/p>\n\n\n\n


\n\n\n\n

2. B\u1ed1 c\u1ee5c thay \u0111\u1ed5i \u0111\u01b0\u1ee3c t\u00ednh to\u00e1n nh\u01b0 th\u1ebf n\u00e0o?<\/h2>\n\n\n\n

Thay \u0111\u1ed5i b\u1ed1 c\u1ee5c \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u1edfi API \u0111o l\u01b0\u1eddng m\u1ee9c \u0111\u1ed9 \u1ed5n \u0111\u1ecbnh c\u1ee7a b\u1ed1 c\u1ee5c<\/a>, c\u00f4ng c\u1ee5 n\u00e0y s\u1ebd b\u00e1o c\u00e1o layout-shift<\/code> cho c\u00e1c m\u1ee5c nh\u1eadp b\u1ea5t k\u1ef3 l\u00fac n\u00e0o m\u1ed9t ph\u1ea7n t\u1eed hi\u1ec3n th\u1ecb trong viewport (khung nh\u00ecn) thay \u0111\u1ed5i v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a n\u00f3 (v\u00ed d\u1ee5: v\u1ecb tr\u00ed tr\u00ean c\u00f9ng v\u00e0 b\u00ean tr\u00e1i c\u1ee7a n\u00f3 trong writing mode<\/a> m\u1eb7c \u0111\u1ecbnh) gi\u1eefa hai khung. C\u00e1c ph\u1ea7n t\u1eed nh\u01b0 v\u1eady \u0111\u01b0\u1ee3c coi l\u00e0 ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> (unstable elements).<\/p>\n\n\n\n

L\u01b0u \u00fd r\u1eb1ng thay \u0111\u1ed5i b\u1ed1 c\u1ee5c ch\u1ec9 x\u1ea3y ra khi c\u00e1c ph\u1ea7n t\u1eed hi\u1ec7n c\u00f3 thay \u0111\u1ed5i v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u (start position) c\u1ee7a ch\u00fang. N\u1ebfu m\u1ed9t ph\u1ea7n t\u1eed m\u1edbi \u0111\u01b0\u1ee3c th\u00eam v\u00e0o DOM ho\u1eb7c m\u1ed9t ph\u1ea7n t\u1eed hi\u1ec7n c\u00f3 thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc th\u00ec ph\u1ea7n t\u1eed \u0111\u00f3 kh\u00f4ng \u0111\u01b0\u1ee3c t\u00ednh l\u00e0 thay \u0111\u1ed5i b\u1ed1 c\u1ee5c \u2014 mi\u1ec5n l\u00e0 thay \u0111\u1ed5i \u0111\u00f3 kh\u00f4ng khi\u1ebfn c\u00e1c ph\u1ea7n t\u1eed \u0111\u00e3 hi\u1ec3n th\u1ecb kh\u00e1c thay \u0111\u1ed5i v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a ch\u00fang.<\/p>\n\n\n\n


\n\n\n\n

A. \u0110i\u1ec3m s\u1ed1 d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c <\/h3>\n\n\n\n

\u0110\u1ec3 t\u00ednh to\u00e1n \u0111i\u1ec3m s\u1ed1 d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c<\/em> (layout shift score), tr\u00ecnh duy\u1ec7t xem x\u00e9t k\u00edch th\u01b0\u1edbc khung nh\u00ecn (viewport) v\u00e0 s\u1ef1 di chuy\u1ec3n c\u1ee7a c\u00e1c ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> trong viewport gi\u1eefa hai khung \u0111\u01b0\u1ee3c k\u1ebft xu\u1ea5t. \u0110i\u1ec3m s\u1ed1 d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c l\u00e0 k\u1ebft qu\u1ea3 c\u1ee7a hai th\u01b0\u1edbc \u0111o c\u1ee7a chuy\u1ec3n \u0111\u1ed9ng \u0111\u00f3: ph\u1ea7n b\u1ecb t\u00e1c \u0111\u1ed9ng<\/em> v\u00e0 ph\u1ea7n kho\u1ea3ng c\u00e1ch<\/em> (c\u1ea3 hai \u0111\u1ec1u \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a b\u00ean d\u01b0\u1edbi).<\/p>\n\n\n\n

layout shift score = impact fraction (di\u1ec7n t\u00edch ph\u1ea7n t\u00e1c \u0111\u1ed9ng) * distance fraction (ph\u1ea7n kho\u1ea3ng c\u00e1ch d\u1ecbch chuy\u1ec3n)<\/code><\/pre>\n\n\n\n
\n\n\n\n

B. Ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng (impact fraction)<\/h3>\n\n\n\n

Ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng \u0111o l\u01b0\u1eddng m\u1ee9c \u0111\u1ed9 t\u00e1c \u0111\u1ed9ng c\u1ee7a c\u00e1c y\u1ebfu t\u1ed1 kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> \u0111\u1ebfn di\u1ec7n t\u00edch khu v\u1ef1c khung nh\u00ecn gi\u1eefa hai frame.<\/p>\n\n\n\n

S\u1ef1 k\u1ebft h\u1ee3p c\u1ee7a c\u00e1c v\u00f9ng hi\u1ec3n th\u1ecb c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> cho khung tr\u01b0\u1edbc v\u00e0<\/em> khung hi\u1ec7n t\u1ea1i \u2014 nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ee7a t\u1ed5ng di\u1ec7n t\u00edch c\u1ee7a khung nh\u00ecn \u2014 l\u00e0 ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em> \u0111\u1ed1i v\u1edbi khung hi\u1ec7n t\u1ea1i (current frame).<\/p>\n\n\n\n

\"ch\u1ec9<\/figure>\n\n\n\n

V\u00ed d\u1ee5 trong h\u00ecnh tr\u00ean, c\u00f3 m\u1ed9t ph\u1ea7n t\u1eed chi\u1ebfm m\u1ed9t n\u1eeda khung nh\u00ecn trong m\u1ed9t khung h\u00ecnh. Sau \u0111\u00f3, trong khung ti\u1ebfp theo, ph\u1ea7n t\u1eed d\u1ecbch chuy\u1ec3n xu\u1ed1ng 25% chi\u1ec1u cao khung nh\u00ecn. H\u00ecnh ch\u1eef nh\u1eadt c\u00f3 ch\u1ea5m ch\u1ea5m m\u00e0u \u0111\u1ecf bao quanh cho bi\u1ebft s\u1ef1 k\u1ebft h\u1ee3p c\u1ee7a v\u00f9ng nh\u00ecn th\u1ea5y c\u1ee7a ph\u1ea7n t\u1eed trong c\u1ea3 hai khung, trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y l\u00e0 75% di\u1ec7n t\u00edch c\u1ee7a t\u1ed5ng khung nh\u00ecn, do \u0111\u00f3, ph\u1ea7n \u1ea3nh h\u01b0\u1edfng<\/em> c\u1ee7a n\u00f3 l\u00e0 0.75<\/code>.<\/p>\n\n\n\n


\n\n\n\n

C. Ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch (distance fraction)<\/h3>\n\n\n\n

Ph\u1ea7n kh\u00e1c c\u1ee7a ph\u01b0\u01a1ng tr\u00ecnh \u0111i\u1ec3m d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c \u0111o kho\u1ea3ng c\u00e1ch m\u00e0 c\u00e1c ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh \u0111\u00e3 di chuy\u1ec3n, t\u01b0\u01a1ng quan v\u1edbi viewport. Ph\u1ea7n kho\u1ea3ng c\u00e1ch<\/em> l\u00e0 kho\u1ea3ng c\u00e1ch l\u1edbn nh\u1ea5t m\u00e0 b\u1ea5t k\u1ef3 ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> n\u00e0o \u0111\u00e3 di chuy\u1ec3n trong khung (theo chi\u1ec1u ngang ho\u1eb7c chi\u1ec1u d\u1ecdc) chia cho k\u00edch th\u01b0\u1edbc l\u1edbn nh\u1ea5t c\u1ee7a khung nh\u00ecn (chi\u1ec1u r\u1ed9ng ho\u1eb7c chi\u1ec1u cao, t\u00f9y theo gi\u00e1 tr\u1ecb n\u00e0o l\u1edbn h\u01a1n).<\/p>\n\n\n\n

\"ch\u1ec9<\/figure>\n\n\n\n

Trong v\u00ed d\u1ee5 tr\u00ean, k\u00edch th\u01b0\u1edbc khung nh\u00ecn l\u1edbn nh\u1ea5t l\u00e0 chi\u1ec1u cao v\u00e0 ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> \u0111\u00e3 di chuy\u1ec3n 25% chi\u1ec1u cao khung nh\u00ecn, \u0111i\u1ec1u n\u00e0y l\u00e0m cho ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch<\/em> l\u00e0 0,25.<\/p>\n\n\n\n

V\u00ec v\u1eady, trong v\u00ed d\u1ee5 n\u00e0y, ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em> l\u00e0 0.75<\/code> v\u00e0 ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch<\/em> l\u00e0 0.25<\/code>, do \u0111\u00f3 \u0111i\u1ec3m d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c<\/em> l\u00e0 0.75 * 0.25 = 0.1875<\/code>.<\/p>\n\n\n\n

Ban \u0111\u1ea7u, \u0111i\u1ec3m d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c ch\u1ec9 \u0111\u01b0\u1ee3c t\u00ednh to\u00e1n d\u1ef1a tr\u00ean ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em>. Vi\u1ec7c b\u1ed5 sung ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch<\/em> \u0111\u01b0\u1ee3c \u0111\u01b0a ra \u0111\u1ec3 tr\u00e1nh c\u00e1c tr\u01b0\u1eddng h\u1ee3p ph\u1ea1t qu\u00e1 m\u1ee9c trong tr\u01b0\u1eddng h\u1ee3p c\u00e1c ph\u1ea7n t\u1eed l\u1edbn ch\u1ec9 thay \u0111\u1ed5i m\u1ed9t l\u01b0\u1ee3ng nh\u1ecf (v\u00e0 do v\u1eady c\u0169ng ch\u1ec9 c\u00f3 \u1ea3nh h\u01b0\u1edfng nh\u1ecf \u0111\u1ebfn tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng).<\/p>\n\n\n\n


\n\n\n\n

V\u00ed d\u1ee5 ti\u1ebfp theo minh h\u1ecda c\u00e1ch th\u00eam n\u1ed9i dung v\u00e0o m\u1ed9t ph\u1ea7n t\u1eed hi\u1ec7n c\u00f3 \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn \u0111i\u1ec3m thay \u0111\u1ed5i b\u1ed1 c\u1ee5c nh\u01b0 th\u1ebf n\u00e0o:<\/p>\n\n\n\n

\"M\u1ed9t<\/figure>\n\n\n\n

N\u00fat b\u1ea5m “Click Me!” \u0111\u01b0\u1ee3c n\u1ed1i v\u00e0o cu\u1ed1i h\u1ed9p m\u00e0u x\u00e1m v\u1edbi v\u0103n b\u1ea3n m\u00e0u \u0111en, s\u1ebd \u0111\u1ea9y h\u1ed9p m\u00e0u xanh l\u1ee5c c\u00f3 v\u0103n b\u1ea3n m\u00e0u tr\u1eafng xu\u1ed1ng (v\u00e0 m\u1ed9t ph\u1ea7n \u1edf \u0111\u00e1y ra kh\u1ecfi viewport).<\/p>\n\n\n\n

Trong v\u00ed d\u1ee5 n\u00e0y, h\u1ed9p m\u00e0u x\u00e1m thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc, nh\u01b0ng v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a n\u00f3 kh\u00f4ng thay \u0111\u1ed5i n\u00ean n\u00f3 kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em>.<\/p>\n\n\n\n

N\u00fat “Click Me!” tr\u01b0\u1edbc \u0111\u00f3 kh\u00f4ng c\u00f3 trong DOM, v\u00ec v\u1eady v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a n\u00f3 c\u0169ng kh\u00f4ng thay \u0111\u1ed5i (t\u1ee9c l\u00e0 n\u00f3 c\u0169ng kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ph\u1ea7n t\u1eeb kh\u00f4ng \u1ed5n \u0111\u1ecbnh).<\/p>\n\n\n\n

Tuy nhi\u00ean, v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a \u00f4 m\u00e0u xanh l\u1ee5c \u0111\u00e3 thay \u0111\u1ed5i, nh\u01b0ng v\u00ec n\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c di chuy\u1ec3n m\u1ed9t ph\u1ea7n ra kh\u1ecfi khung nh\u00ecn, n\u00ean v\u00f9ng v\u00f4 h\u00ecnh kh\u00f4ng \u0111\u01b0\u1ee3c xem x\u00e9t khi t\u00ednh to\u00e1n ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em> (impact fraction). S\u1ef1 k\u1ebft h\u1ee3p c\u1ee7a c\u00e1c v\u00f9ng nh\u00ecn th\u1ea5y cho h\u1ed9p m\u00e0u xanh l\u00e1 c\u00e2y trong c\u1ea3 hai khung (\u0111\u01b0\u1ee3c minh h\u1ecda b\u1eb1ng h\u00ecnh ch\u1eef nh\u1eadt c\u00f3 ch\u1ea5m m\u00e0u \u0111\u1ecf) gi\u1ed1ng v\u1edbi di\u1ec7n t\u00edch c\u1ee7a h\u1ed9p m\u00e0u xanh l\u00e1 c\u00e2y trong khung \u0111\u1ea7u ti\u00ean \u2014 50% c\u1ee7a viewport. Ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em> l\u00e0 0.5<\/code>.<\/p>\n\n\n\n

Ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch<\/em> (distance fraction) \u0111\u01b0\u1ee3c minh h\u1ecda b\u1eb1ng m\u0169i t\u00ean m\u00e0u t\u00edm. H\u1ed9p m\u00e0u xanh l\u00e1 c\u00e2y \u0111\u00e3 di chuy\u1ec3n xu\u1ed1ng kho\u1ea3ng 14% c\u1ee7a khung nh\u00ecn, do \u0111\u00f3 ch\u1ec9 s\u1ed1 kho\u1ea3ng c\u00e1ch<\/em> l\u00e0 0.14<\/code> .<\/p>\n\n\n\n

\u0110i\u1ec3m d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c n\u00e0y l\u00e0: 0.5 x 0.14 = 0.07<\/code>.<\/p>\n\n\n\n


\n\n\n\n

V\u00ed d\u1ee5 cu\u1ed1i c\u00f9ng d\u01b0\u1edbi \u0111\u00e2y minh h\u1ecda tr\u01b0\u1eddng h\u1ee3p c\u00f3 nhi\u1ec1u y\u1ebfu t\u1ed1 kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> c\u00f9ng xu\u1ea5t hi\u1ec7n tr\u00ean trang:<\/p>\n\n\n\n

\"V\u00ed<\/figure>\n\n\n\n

Trong khung \u0111\u1ea7u ti\u00ean \u1edf tr\u00ean, c\u00f3 b\u1ed1n k\u1ebft qu\u1ea3 c\u1ee7a m\u1ed9t y\u00eau c\u1ea7u API cho th\u00f4ng tin v\u1ec1 \u0111\u1ed9ng v\u1eadt, \u0111\u01b0\u1ee3c s\u1eafp x\u1ebfp theo th\u1ee9 t\u1ef1 b\u1ea3ng ch\u1eef c\u00e1i. Trong khung th\u1ee9 hai, nhi\u1ec1u k\u1ebft qu\u1ea3 h\u01a1n \u0111\u01b0\u1ee3c th\u00eam v\u00e0o danh s\u00e1ch \u0111\u00e3 s\u1eafp x\u1ebfp t\u1eeb tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n\n\n\n

M\u1ee5c \u0111\u1ea7u ti\u00ean trong danh s\u00e1ch (“Cat”) kh\u00f4ng thay \u0111\u1ed5i v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a n\u00f3 gi\u1eefa c\u00e1c khung, v\u00ec v\u1eady n\u00f3 l\u00e0 th\u00e0nh ph\u1ea7n \u1ed5n \u0111\u1ecbnh. T\u01b0\u01a1ng t\u1ef1, c\u00e1c m\u1ee5c m\u1edbi \u0111\u01b0\u1ee3c th\u00eam v\u00e0o danh s\u00e1ch tr\u01b0\u1edbc \u0111\u00e2y kh\u00f4ng c\u00f3 trong DOM, v\u00ec v\u1eady v\u1ecb tr\u00ed b\u1eaft \u0111\u1ea7u c\u1ee7a ch\u00fang c\u0169ng kh\u00f4ng thay \u0111\u1ed5i. Nh\u01b0ng c\u00e1c th\u00f4ng tin c\u00f3 nh\u00e3n “Dog”, “Horse” v\u00e0 “Zebra” \u0111\u1ec1u thay \u0111\u1ed5i v\u1ecb tr\u00ed ban \u0111\u1ea7u c\u1ee7a ch\u00fang, khi\u1ebfn ch\u00fang tr\u1edf th\u00e0nh c\u00e1c y\u1ebfu t\u1ed1 kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em>.<\/p>\n\n\n\n

M\u1ed9t l\u1ea7n n\u1eefa, c\u00e1c h\u00ecnh ch\u1eef nh\u1eadt c\u00f3 ch\u1ea5m ch\u1ea5m m\u00e0u \u0111\u1ecf th\u1ec3 hi\u1ec7n s\u1ef1 k\u1ebft h\u1ee3p c\u1ee7a ba ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh n\u00e0y<\/em> tr\u01b0\u1edbc v\u00e0 sau, trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y l\u00e0 kho\u1ea3ng 38% di\u1ec7n t\u00edch c\u1ee7a khung nh\u00ecn (ch\u1ec9 s\u1ed1 t\u00e1c \u0111\u1ed9ng<\/em> chi\u1ebfm 0.38<\/code> viewport).<\/p>\n\n\n\n

Ba m\u0169i t\u00ean th\u1ec3 hi\u1ec7n kho\u1ea3ng c\u00e1ch m\u00e0 c\u00e1c ph\u1ea7n t\u1eed kh\u00f4ng \u1ed5n \u0111\u1ecbnh<\/em> \u0111\u00e3 di chuy\u1ec3n t\u1eeb v\u1ecb tr\u00ed ban \u0111\u1ea7u c\u1ee7a ch\u00fang theo th\u1ee9 t\u1ef1. Ph\u1ea7n t\u1eed “Zebra”, \u0111\u01b0\u1ee3c bi\u1ec3u th\u1ecb b\u1eb1ng m\u0169i t\u00ean m\u00e0u xanh lam, \u0111\u00e3 di chuy\u1ec3n nhi\u1ec1u nh\u1ea5t, kho\u1ea3ng 30% chi\u1ec1u cao khung nh\u00ecn. \u0110i\u1ec1u \u0111\u00f3 l\u00e0m cho gi\u00e1 tr\u1ecb d\u1ecbch chuy\u1ec3n distance fraction<\/code> trong v\u00ed d\u1ee5 n\u00e0y 0.3<\/code> (ch\u1ec9 s\u1ed1 d\u1ecbch chuy\u1ec3n cao nh\u1ea5t c\u1ee7a ph\u1ea7n t\u1eeb \u0111\u01b0\u1ee3c l\u1ea5y).<\/p>\n\n\n\n

Cu\u1ed1i c\u00f9ng \u0111i\u1ec3m d\u1ecbch chuy\u1ec3n b\u1ed1 c\u1ee5c l\u00e0: 0.38 x 0.3 = 0.1172<\/code>.<\/p>\n\n\n\n

M\u1eb9o<\/strong> – l\u00e0m ch\u1eadm qu\u00e1 tr\u00ecnh t\u1ea3i trang \u0111\u1ec3 \u0111\u00e1nh gi\u00e1 CLS b\u1eb1ng m\u1eaft d\u1ec5 h\u01a1n:<\/p>\n\n\n\n