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
@kitmodule
3 phút đọc
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
8
lượt xem
Bài Viết Liên Quan

Chỉ là mình thích cách lập trình web của mình. Có thể tùy chỉnh theo ý thích và không phụ thuộc vào framework.

Cuối cùng, tôi vẫn tự hỏi: “Nếu có một dự án lớn, mình sẽ làm gì?”. Tôi chẳng có gì ngoài những nợ nần và niềm đam mê. Nhưng tôi biết, chỉ cần còn đam mê, tôi vẫn sẽ bước tiếp. "Coding and life" - đó là cách mà kẻ dại khờ này tiếp tục.

Hôm nay, mình muốn kể cho mọi người nghe về Kit JS, một framework JavaScript nhỏ bé mà mình tự tay viết nên. Nó vẫn đang trong giai đoạn thử nghiệm – còn nhiều điều phải tối ưu, mở rộng – nhưng mình muốn chia sẻ nó với tinh thần #buildinpublic và #opencoding. Nó chưa hoàn hảo để ứng dụng vào sản phẩm thật, nhưng nó đủ để học hỏi, để mơ mộng và để nhớ lại tại sao ta yêu lập trình đến thế.

Hành trình của tôi không bắt đầu ở một công ty lớn, cũng chẳng gắn liền với những startup gọi vốn hàng triệu đô. Nó bắt đầu từ một chiếc laptop cũ, từ căn phòng nhỏ ở quê nhà Tam Kỳ, nơi tôi vừa làm việc, vừa tự học code – và mang trong mình một khát khao duy nhất: “ Làm chủ công nghệ. Tạo ra giá trị thực bằng chính đôi tay mình.”

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.

Sau hơn 1 năm chật vật với kinh tế. Tôi chỉ có 2 khách hàng đầu tiên từ website và ads. Tôi ngồi nói chuyện vu vơ với vài người bạn, tôi nhận ra rằng? Tại sao mình không sử dụng các data của mình đã thu thập để làm affiliate. Vậy là samdy ra đời, tôi viết một website về tìm kiếm sản phẩm giá tốt trên 3 nền tảng lazada, tiki và shopee.

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.

Có vẽ dạo gần đây có nhiều câu chuyện về quảng cáo Youtube và sự can thiệp của Server Side Render từ sever của youtube đang dần trở nên phổ biến. Bài viết này sẽ chia sẽ những điều tôi biết vê Server Side Rendering...

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).

Khi bản thân tự định hướng cho mình một lối đi. Một con đường và một ánh sáng thì cứ đi theo ánh sáng đó.