Directive Sync – Câu chuyện “dị” của Kit JS
Trong thế giới JavaScript, chúng ta đã quen với những khái niệm như bind, model, class hay style. Chúng đều xoay quanh một triết lý chung: data đi xuống, view phản ứng.

Kit Module
3 phút đọc
@kitmodule
17 tháng 10 năm 2025

Ý tưởng hình thành
Khi tôi bắt đầu phát triển Kit JS, tôi gặp một vấn đề khác — một thứ mà hầu hết các framework JS đều bỏ qua.
Trang web của tôi được render từ SSR (server-side rendering). Mọi thứ đã có sẵn trong HTML, SEO đã sẵn sàng. Nhưng khi tôi thử truyền lại state hoặc scope từ client vào những element đã được render đó, toàn bộ component bị re-render.
Và tôi nhận ra, tôi chỉ muốn đồng bộ lại dữ liệu, không phải vẽ lại thế giới.
Từ đó, Directive Sync ra đời.
Sync – một nhịp điệu khác của dữ liệu
Nếu model là cách framework truyền dữ liệu từ state ra view, thì sync là cách view nói ngược lại với state — một vòng khép kín mà không cần phá hủy hay dựng lại DOM.
Nói cách khác, sync không “làm lại”, nó nghe và ghi nhận.
Directive sync không sinh ra để ngược lại model, mà là sự kế thừa tự nhiên của nó trong bối cảnh SSR.
Nó tồn tại để giúp các trang được render sẵn từ server vẫn có thể hoạt động như một SPA nhẹ, nhưng không đánh mất giá trị SEO, tốc độ hay tính tĩnh của trang web.
Tại sao cần đến Sync?
Với các framework hiện nay, nếu bạn muốn có tính năng hai chiều (two-way binding), bạn phải để framework kiểm soát toàn bộ DOM.
Điều đó có nghĩa là khi HTML được render từ server, framework sẽ phải render lại lần nữa trên client để tạo ra binding.
Kết quả là:
- Bot SEO đọc được HTML thô nhưng không thấy trạng thái thật.
- Người dùng thấy một “nháy” khi trang re-render.
- Và bản thân ta phải chạy cả client lẫn server như hai thế giới tách biệt.
Sync giải quyết điều đó bằng cách tiêm ngược giá trị từ DOM đã render vào lại scope.
Không cần render lại, không cần diff DOM, chỉ đơn giản là đọc dữ liệu thật từ những gì server đã gửi — và giữ chúng nhất quán.
Triết lý đằng sau Kit JS và Directive Sync
Kit JS không được tạo ra để thay thế framework khác.
Nó sinh ra từ một nhu cầu rất cụ thể: kết nối lại giữa thế giới tĩnh và thế giới động, giữa SSR và reactive UI.
Đó không phải là một “ý tưởng framework mới”, mà là một tư duy ngược dòng:
Nếu dữ liệu đã ở đó, tại sao ta phải render lại?
Sync chính là sự biểu hiện của triết lý đó — đơn giản, thực tế và tôn trọng những gì đã có.
Nó không đòi làm chủ DOM, không buộc bạn phải “chạy lại” app, chỉ lặng lẽ đồng bộ để mọi thứ tiếp tục đúng như vốn dĩ.
Một mảnh nhỏ trong hành trình lớn
Kit JS, với tôi, không phải là cuộc đua framework.
Nó là một hành trình cá nhân để tìm lại sự tối giản trong cách ta viết web.
Directive Sync chỉ là một mảnh trong đó — một mảnh “dị” vì nó không chạy theo reactive thuần túy, mà hòa trộn giữa render tĩnh và sự sống động của dữ liệu.
Và có lẽ, chính trong sự “dị” đó, ta mới tìm thấy một hướng khác — nơi web vừa nhanh, vừa thật, và vẫn có linh hồn.
Link: kitjs.org
31
lượt xem
Bài Viết Liên Quan

“Nếu đi về phía mặt trời, bạn sẽ đón nắng. Còn nếu đi ngược phía mặt trời, ánh sáng vẫn sẽ dõi theo.”

Đôi khi, một giấc mơ không bắt đầu bằng những điều lớn lao. Nó chỉ đơn giản nhen nhóm từ một khoảnh khắc tỉnh thức – khi ta dám dừng lại, dám đi chậm hơn một nhịp giữa guồng quay vội vã của cuộc sống, để lắng nghe chính mình.

Thế giới công nghệ phát triển nhanh chóng, và một trong những bước tiến thú vị mà tôi có cơ hội tiếp cận là hệ giao thức phân tán. Cơ hội này mở ra từ những nhu cầu tưởng chừng đơn giản như xây dựng một ứng dụng chat trực tiếp giữa các thiết bị mà không cần máy chủ trung gian. Điều này đưa tôi đến với các giao thức phân tán như WebRTC và các phương pháp truyền dữ liệu ngang hàng (Peer-to-Peer, hay P2P).

Mười năm mơ kết mây thành hoa trắng. Mây vỡ, hoa tan – tàn giấc mơ hoa. Nhưng giấc mơ hoa này, ta xin mơ một lần... Vì đời này, ta chỉ có một giấc mơ. Và một cuộc đời.

Hành trình tìm cách kiểm soát UI reactive một cách nhẹ, an toàn và linh hoạt từ DOM thủ công, thử nghiệm nhiều framework, đến tự xây reactive engine dựa trên JavaScript Proxy.

Lại là mình, và hôm nay mình muốn nói về Kit JS — tại sao nó ra đời, tồn tại và phục vụ mục đích gì. Vì bài trước mình đã nói về câu chuyện, nhưng chưa thật sự target vào mục đích người dùng.

Golang (Go) là một ngôn ngữ lập trình đơn giản, hiệu quả, và mạnh mẽ, đặc biệt phù hợp cho những ai muốn xây dựng các ứng dụng có hiệu suất cao và dễ dàng mở rộng. Trong bài viết này, tôi sẽ chia sẻ lộ trình học Golang của mình và những trải nghiệm cá nhân trong quá trình học tập, hướng đến những người mới bắt đầu tìm hiểu ngôn ngữ này.

Khi tôi viết những dòng đầu tiên trong file README của Kitwork, nhiều người nói tôi “ngáo”.
