Recent posts
Refactor code ES5 sang ES6+: destructuring, spread, Map/Set
Refactor code ES5 sang ES6+ từng bước: let/const, destructuring, spread, optional chaining ?., nullish coalescing ??.
WeakMap vs WeakSet: tránh memory leak khi cache theo object
So sánh Map/Set với WeakMap/WeakSet: weak reference, GC reachability và cách tránh memory leak khi cache theo object.
React Fiber Và Thuật Toán Diffing: Vì Sao State Bị Reset?
Thuật toán diffing React và kiến trúc Fiber: heuristic O(n), key, state theo vị trí, double buffering và work loop.
Mobile-first là gì? Chiến lược responsive cho mọi thiết bị
Mobile-first và chiến lược responsive: breakpoint theo content, fluid layout và container queries cho mọi thiết bị.
Lỗi CORS: hiểu same-origin policy và preflight request
Hiểu CORS và preflight: same-origin policy chặn gì, khi nào browser gửi OPTIONS, và cách fix lỗi bằng response header.
Tự viết lại useMemo, useCallback, useRef: hiểu hooks từ gốc
Re-implement useMemo, useCallback, useRef bằng JavaScript thuần: hiểu deps array, cursor và Rules of Hooks từ gốc
WebGL, Three.js và GLSL shader: từ cơ bản đến nâng cao
Hướng dẫn WebGL, Three.js và GLSL shader từ cơ bản đến nâng cao: pipeline GPU, ShaderMaterial, uniform, varying, mix
Promise.all, race, any, allSettled: chọn đúng combinator
So sánh Promise.all, allSettled, race, any: khi nào reject, shape kết quả và cách chọn đúng combinator cho code async.
Tự viết lại Pick, Omit, Partial: hiểu utility types từ gốc
Tự viết lại Pick, Omit, Partial và utility type built-in bằng mapped type, conditional type và infer trong TypeScript
REST, WebSocket hay SSE? Chọn protocol cho app TypeScript
Chọn REST, SSE hay WebSocket cho app TypeScript: fetch đúng cách, API client type-safe, so sánh và bảo mật realtime.