Đi tới nội dung

Khám phá

Toàn bộ bài viết, ghi chép và hướng dẫn — tìm kiếm, lọc theo chủ đề và cấp độ, hoặc duyệt theo năm.

Hoặc đọc theo chuỗi

Model Context Protocol thực chiến: xây MCP server production bằng TypeScript

MCP không phải phép màu, chỉ là một giao thức JSON-RPC được thiết kế tốt. Bài này giải thích host, client, server, các primitive và transport theo spec 2026-07-28, rồi dựng một server TypeScript chỉ đọc cho dữ liệu đơn hàng: thiết kế tool, phân trang, test bằng Inspector, OAuth cho remote server và những lỗ hổng bảo mật cần chặn.

Công cụ & quy trình20 phút

Caching trong Next.js 16: Cache Components, use cache và Partial Prerendering thực chiến

Next.js 16 bỏ kiểu cache ngầm của App Router cũ: mọi thứ dynamic theo mặc định, bạn tự chọn chỗ cần cache bằng use cache. Bài này đi qua static shell và dynamic hole, cache key, cacheLife, cacheTag với updateTag, revalidateTag, refresh, và một trang sản phẩm e-commerce làm từ đầu đến cuối.

Hệ thống & kiến trúc26 phút

RAG trả lời đúng trong thực tế: chunking, hybrid search với pgvector, reranking và đánh giá

Demo RAG thì ai cũng dựng được trong một buổi chiều; làm cho nó trả lời đúng mới là phần khó. Bài này đi qua một pipeline RAG viết bằng TypeScript trên PostgreSQL/pgvector: chunking theo cấu trúc, hybrid search gộp bằng RRF trong một câu SQL, reranking, phân quyền trước khi xếp hạng, trích dẫn và cách đo chất lượng bằng con số.

Hệ thống & kiến trúc30 phút

Core Web Vitals: hiểu đúng LCP, INP, CLS và cách tối ưu

Ba chỉ số Google dùng để đo trải nghiệm thật của người dùng — đo thế nào, được tính ra sao, vì sao ảnh hưởng SEO, và quy trình cụ thể để tìm đúng nguyên nhân rồi sửa.

Hiệu năng14 phút

List virtualization từ con số 0: render 100.000 dòng mà vẫn mượt

Tự tay viết một virtual list bằng React + TypeScript: toán windowing với số liệu cụ thể, overscan, chiều cao thay đổi với prefix sum và binary search, đo bằng ResizeObserver, chống giật khi scroll, accessibility — và khi nào không nên virtualize.

Hiệu năng18 phút

Ghi chép như một kỹ sư

Vì sao mình bắt đầu ghi lại những gì học được khi làm việc, định dạng đơn giản mình dùng, và cách ghi chép dần thành bài viết.

Học hỏi & sự nghiệp2 phút

Ước lượng công việc frontend một cách trung thực

Vì sao ước lượng gần như luôn sai, cách chia nhỏ công việc theo trạng thái, accessibility, responsive và i18n, dùng khoảng và độ tự tin thay cho một con số, khi nào cần spike, cách nói chuyện với PM và cách so sánh ước lượng với thực tế để giỏi dần lên.

Học hỏi & sự nghiệp7 phút

Debug như senior với Chrome DevTools

Conditional breakpoint, logpoint, DOM breakpoint, XHR/fetch breakpoint, các tiện ích console như debug(), monitorEvents(), $0, copy(), tab Network, Performance và local overrides — cùng quy trình bốn bước mình dùng để tìm ra nguyên nhân thay vì đoán.

Công cụ & quy trình8 phút

Caching cho frontend developer: từ HTTP cache đến CDN và data cache

Cache-Control, ETag, tên file có hash, s-maxage và stale-while-revalidate ở CDN, service worker, staleTime trong TanStack Query — mỗi lớp cache làm gì, nên đặt header thế nào cho từng loại tài nguyên, và những lỗi khiến người dùng thấy dữ liệu cũ.

Hiệu năng9 phút

Modal dialog dễ tiếp cận: dùng thẻ dialog native cho đúng

Từ showModal(), top layer, ::backdrop đến quản lý focus, gắn nhãn, khoá cuộn, đóng khi bấm nền và dialog lồng nhau — kèm một component React nhỏ và cách tự kiểm tra bằng bàn phím và screen reader.

Frontend & giao diện8 phút

Feature flag ở frontend: phân loại, đánh giá, rollout và dọn dẹp

Feature flag giúp tách deploy khỏi release, nhưng dùng sai thì thành nợ kỹ thuật và giao diện nhấp nháy. Bài này đi qua bốn loại flag, đánh giá flag ở server hay client, định nghĩa flag có kiểu bằng TypeScript, rollout dần, A/B test và quy trình dọn flag.

Hệ thống & kiến trúc8 phút

Code Splitting và Lazy Loading trong React

Hướng dẫn thực tế giúp giảm lượng JavaScript tải ban đầu bằng cách kết hợp lazy loading theo route và theo component.

Hiệu năng1 phút

Từ mid-level lên senior frontend: điều gì thật sự thay đổi

Lên senior không phải là code nhanh hơn hay biết nhiều framework hơn. Đó là chuyển từ hoàn thành task sang chịu trách nhiệm cho kết quả. Bài này là những hành vi cụ thể, một bảng tự đánh giá, và các cái bẫy mình từng rơi vào.

Học hỏi & sự nghiệp9 phút

Form trong React 19: action, useActionState, useFormStatus và Server Actions

React 19 đưa form về gần với HTML hơn: prop action, trạng thái pending, cập nhật optimistic và Server Actions. Bài này đi qua cách mình dựng một form đăng ký đầy đủ — validate hai phía, trả lỗi theo field, accessible, và chạy được cả trước khi JavaScript tải xong.

Frontend & giao diện8 phút

Code review là một kỹ năng: cách review và cách nhận review

Review nên nhìn gì trước, viết comment sao cho người nhận học được thay vì tự ái, giữ PR nhỏ, xử lý bất đồng — và để máy lo phần format để con người tập trung vào thứ quan trọng.

Học hỏi & sự nghiệp9 phút

State machine cho UI: loại bỏ những trạng thái không thể xảy ra

Vì sao isLoading, isError và data cùng tồn tại là mầm mống của bug, cách mô hình hoá UI bằng trạng thái và sự kiện, một state machine có type bằng useReducer cho luồng submit form, và khi nào nên dùng thư viện statechart.

Hệ thống & kiến trúc7 phút

Xây dựng UI production với shadcn/ui

Vì sao sở hữu mã nguồn component tốt hơn cài một hộp đen — và shadcn/ui chọn đúng mức trừu tượng ở đâu.

Frontend & giao diện1 phút