Diff Checker

Diff Checker

So sánh hai đoạn văn bản hoặc mã với highlight theo dòng và từ. Cạnh nhau hoặc hợp nhất, bỏ qua khoảng trắng, bỏ qua hoa thường — hoàn toàn trong trình duyệt của bạn.

Không. Toàn bộ công cụ là JavaScript chạy bên trong trang này. Thuật toán diff (longest-common-subsequence) chạy trên CPU của bạn và kết quả được render trực tiếp vào DOM. Mở DevTools → Network và quan sát — không có yêu cầu nào được gửi trong quá trình diff. An toàn để dán mã nội bộ, dữ liệu khách hàng, dự thảo hợp đồng hoặc bất cứ điều gì bạn không muốn công cụ máy chủ ghi lại.

Đầu tiên chúng tôi tách cả hai đầu vào thành các dòng và chạy thuật toán LCS (longest common subsequence). Các dòng khớp giữa hai bên được đánh dấu là bằng nhau. Các dòng không khớp được ghép thành hàng 'thay đổi' khi một dòng thêm xuất hiện cạnh một dòng xóa. Với mỗi cặp thay đổi, chúng tôi chạy LCS lần thứ hai trên các từ của dòng (tách theo khoảng trắng) để chỉ những từ đã chỉnh sửa thực sự sáng lên đỏ/xanh — không phải cả dòng.

Tại sao chọn iKit Diff Checker

Một sân chơi diff văn bản gọn gàng, nhanh chóng, không quảng cáo, không popup, không trình theo dõi của bên thứ ba — dành cho lập trình viên, người viết và bất kỳ ai cần phát hiện điều đã thay đổi.

Chế độ xem cạnh nhau và hợp nhất

Chuyển đổi giữa chế độ tách (hai cột, cảm giác IDE cổ điển) và hợp nhất (một cột với dấu +/−) chỉ bằng một cú nhấp. Cả hai chế độ đều hiển thị số dòng và highlight mọi thay đổi nội tuyến.

Highlight theo từ

Khi hai dòng có thay đổi, chúng tôi chạy thêm một lần diff theo từ để chỉ phần khác biệt thực sự được làm nổi bật — không phải toàn bộ dòng. Dễ dàng phát hiện một lỗi đánh máy trong dòng dài 200 ký tự.

Bỏ qua khoảng trắng và hoa thường

Bật/tắt độ nhạy với khoảng trắng và chữ hoa/thường để lọc ra những thay đổi mỹ quan (định dạng lại thụt lề, chỉnh sửa viết hoa) và tập trung vào các chỉnh sửa thực sự.

Riêng tư từ thiết kế

Cả hai văn bản đều ở trong tab trình duyệt của bạn. Thuật toán diff chạy cục bộ bằng JavaScript. Có thể kiểm chứng trong DevTools → Network: không có yêu cầu nào được gửi đi khi bạn nhập.

Thống kê và sao chép

Xem nhanh có bao nhiêu dòng đã được thêm, xóa và sửa đổi. Một cú nhấp sao chép diff vào clipboard để dán vào code review hoặc commit message.

Hoạt động ngoại tuyến

Sau khi trang được tải, mọi byte đều được tính toán cục bộ. Hoạt động trên máy bay, sau tường lửa công ty, hoặc khi không có mạng — hữu ích cho các đợt review mã bảo mật.

Diff checker thực sự hoạt động như thế nào

Toán học bên trong còn cũ hơn cả web — một thuật toán năm 1965 gọi là LCS, cộng với cải tiến năm 1986 của Eugene Myers.

  1. 1

    Tách thành dòng

    Cả hai đầu vào được ngắt theo \n (hoặc \r\n). Mỗi dòng trở thành một token. Chúng tôi so sánh token — không phải ký tự — vì hầu hết chỉnh sửa trong mã hoặc tài liệu thực tế đều thêm, xóa hoặc sửa cả dòng.

  2. 2

    Tính LCS

    Longest Common Subsequence là tập hợp dòng lớn nhất xuất hiện theo cùng thứ tự ở cả hai đầu vào. Chúng tôi điền một bảng DP đi từ góc dưới phải; mỗi ô lưu độ dài LCS từ vị trí đó đến cuối. Việc này tốn thời gian và bộ nhớ O(m × n).

  3. 3

    Đi ngược lại để suy ra các thao tác

    Bắt đầu từ góc trên trái của bảng, chúng tôi đi tới: nếu hai dòng hiện tại khớp, xuất ra equal; ngược lại chọn hướng (phải hoặc xuống) bảo toàn độ dài LCS, xuất ra delete hoặc insert. Kết quả là một chuỗi thao tác biến Bản gốc thành Bản chỉnh sửa.

  4. 4

    Diff theo từ trong các cặp đã thay đổi

    Khi một dòng xóa được theo sau bởi một dòng thêm, chúng tôi ghép chúng thành hàng change. Để chỉ làm nổi bật các phần khác nhau trong dòng, chúng tôi chạy lại thuật toán LCS lần thứ hai trên các từ của mỗi bên, tách theo ranh giới khoảng trắng.

Các tác vụ diff thường gặp

Những tình huống thực tế bạn sẽ cần đến diff checker.

Review một PR trước khi bình luận

Chế độ xem diff của GitHub rất tuyệt, nhưng đôi khi bạn muốn chỉ thấy những thay đổi thực chất mà không có nhiễu từ formatter. Dán cả hai phiên bản, bật Bỏ qua khoảng trắng và các định dạng mỹ quan biến mất — chỉ còn lại các chỉnh sửa logic.

So sánh hai dự thảo hợp đồng

Luật sư và đội vận hành thường cần biết điều gì đã thay đổi giữa v1 và v2 của một hợp đồng. Dán cả hai, nhận diff màu sắc với highlight theo từ — không cần Word, không Track Changes, không tải các điều khoản bí mật lên máy chủ bên thứ ba.

Kiểm tra một lần chỉnh sửa script đã thực sự làm gì

Chạy regex sed/awk/Python trên một tệp cấu hình? Dán bản gốc và kết quả vào đây để xác nhận script chỉ chỉnh sửa những gì bạn mong đợi. Highlight cấp ký tự sẽ bắt được những chỉnh sửa lạc mà mắt thường có thể bỏ sót.

Phát hiện lỗi đánh máy trong văn bản đã dịch

Cặp dịch (nguồn vs bản dịch, hoặc hai bản dịch của cùng một nguồn) — diff theo từ giúp dễ dàng tìm ra một từ bị thiếu, một cụm bị lặp hoặc một dấu câu bị đảo mà người hiệu đính bỏ qua.

Tại sao diff cục bộ lại quan trọng

Văn bản bạn so sánh thường riêng tư: mã từ kho nội bộ, dự thảo hợp đồng, xuất khẩu dữ liệu khách hàng hoặc nội dung sản phẩm chưa phát hành. Dán chúng vào máy chủ của người lạ tạo ra dấu vết bạn không kiểm soát được. Diff checker của iKit là JavaScript đã được tải sẵn trong tab trình duyệt — việc so sánh chạy trên CPU của bạn và không bao giờ chạm tới socket mạng.

  • Không có yêu cầu mạng nào trong quá trình diff — có thể kiểm chứng trong DevTools → Network.
  • Đầu vào ở trong bộ nhớ trình duyệt; bị xóa khi nhấn Xóa hoặc làm mới trang.
  • An toàn cho mã nội bộ, tài liệu thuộc NDA, bản ghi hỗ trợ khách hàng và bất cứ điều gì thuộc chính sách lưu trữ dữ liệu.

Related guides

Deep-dive tutorials and tool comparisons from the iKit blog.

Câu hỏi thường gặp

Công cụ này có an toàn không? Văn bản của tôi có bị tải lên không?

Không. Toàn bộ công cụ là JavaScript chạy bên trong trang này. Thuật toán diff (longest-common-subsequence) chạy trên CPU của bạn và kết quả được render trực tiếp vào DOM. Mở DevTools → Network và quan sát — không có yêu cầu nào được gửi trong quá trình diff. An toàn để dán mã nội bộ, dữ liệu khách hàng, dự thảo hợp đồng hoặc bất cứ điều gì bạn không muốn công cụ máy chủ ghi lại.

Highlight theo dòng và theo từ hoạt động như thế nào?

Đầu tiên chúng tôi tách cả hai đầu vào thành các dòng và chạy thuật toán LCS (longest common subsequence). Các dòng khớp giữa hai bên được đánh dấu là bằng nhau. Các dòng không khớp được ghép thành hàng 'thay đổi' khi một dòng thêm xuất hiện cạnh một dòng xóa. Với mỗi cặp thay đổi, chúng tôi chạy LCS lần thứ hai trên các từ của dòng (tách theo khoảng trắng) để chỉ những từ đã chỉnh sửa thực sự sáng lên đỏ/xanh — không phải cả dòng.

Sự khác biệt giữa chế độ Tách và Hợp nhất là gì?

Chế độ Tách hiển thị hai văn bản cạnh nhau với số dòng tương ứng — gần với cách diff hiển thị trong các IDE (VS Code, JetBrains). Chế độ Hợp nhất hiển thị một cột với các dòng tiền tố +/− — gần với những gì `git diff` in ra. Chọn cái phù hợp với quy trình của bạn; cả hai đều hiển thị cùng dữ liệu.

Tại sao 'bỏ qua khoảng trắng' lại hữu ích?

Định dạng lại mã (chạy Prettier, đổi tab/space, chuẩn hóa kết thúc dòng) thêm nhiễu thị giác che lấp các thay đổi thực sự. Bật 'Bỏ qua khoảng trắng' sẽ gộp các chuỗi spaces/tabs thành một khoảng trắng và cắt phần rìa dòng trước khi diff — vì vậy bạn chỉ thấy các chỉnh sửa có ý nghĩa, không phải các thay đổi mỹ quan.

Đầu vào lớn nhất tôi có thể diff trong trình duyệt là bao nhiêu?

Thuật toán LCS sử dụng bộ nhớ O(m × n) trong đó m và n là số dòng ở mỗi bên. iKit giới hạn so sánh ở khoảng 4 triệu ô (≈16 MB), đủ để xử lý vài nghìn dòng so với vài nghìn dòng. Với các diff lớn hơn (toàn bộ database dump, log toàn tệp), hãy dùng công cụ CLI như `diff` hoặc `git diff --no-index` — những công cụ này dùng thuật toán thông minh hơn (Myers diff) có thể xử lý hàng triệu dòng.