Membandingkan dua versi teks — kode, dokumen, file konfigurasi, kontrak — adalah salah satu tugas teknis yang paling umum, dan alat pembeda yang baik membuat perbedaan antara tinjauan cepat dan kerja keras yang rawan kesalahan. Perintah `diff` Unix dibuat pada tahun 1974 dan algoritme di balik alat diff modern tidak berubah secara mendasar sejak tahun 1980-an, namun UI untuk memvisualisasikan perbedaan telah meningkat secara dramatis. Bagian di bawah ini membahas bagaimana algoritma diff sebenarnya bekerja, kapan menggunakan perbandingan tingkat baris versus tingkat kata, dan alur kerja spesifik di mana alat diff berbasis browser lebih baik daripada menjalankan `git diff` atau membuka IDE yang berat.
Bagaimana Sebenarnya Algoritma Diff Bekerja
Alat diff modern dibuat berdasarkan algoritme Longest Common Subsequence (LCS), sebuah masalah pemrograman dinamis klasik yang pertama kali diselesaikan pada tahun 1970an dan disempurnakan sejak saat itu. Dengan adanya dua teks masukan, algoritme LCS menemukan rangkaian token terpanjang (biasanya baris atau kata) yang muncul di kedua masukan dalam urutan yang sama, meskipun dipisahkan oleh token lain. Segala sesuatu di dalam LCS ditandai sebagai "tidak berubah"; segala sesuatu di luar LCS diklasifikasikan sebagai tambahan (hanya ada di versi baru) atau penghapusan (hanya ada di versi lama). Algoritma LCS sendiri berjalan dalam ruang dan waktu O(m × n), dimana m dan n adalah jumlah token dari setiap input. Untuk dokumen biasa dan file kode yang terdiri dari beberapa ratus hingga beberapa ribu baris, ini pada dasarnya bersifat instan. Untuk file yang sangat besar (100.000+ baris), algoritme yang lebih canggih seperti diff Myers (digunakan oleh Git) atau diff kesabaran (menangani beberapa kasus edge dengan lebih baik) menghasilkan hasil serupa dengan lebih efisien. Hasil dari algoritme ini adalah skrip edit minimal — penambahan dan penghapusan paling sedikit yang mengubah satu masukan menjadi masukan lainnya. Alat diff yang berbeda menerapkan skrip edit ini secara berbeda di UI-nya, namun matematika dasarnya sama. Perbedaan tingkat baris diberi token berdasarkan baris baru; perbedaan tingkat kata diberi token berdasarkan batas spasi; perbedaan tingkat karakter diberi token berdasarkan titik kode Unicode individual. Setiap level menangkap berbagai jenis perubahan — level baris paling baik untuk kode, level kata paling baik untuk prosa, level karakter berguna untuk mendeteksi perubahan kecil seperti kesalahan ketik.
Kapan Menggunakan Perbedaan Tingkat Garis vs Tingkat Kata
Tingkat tokenisasi yang Anda pilih sangat memengaruhi seberapa berguna keluaran diff untuk tugas Anda. Perbedaan tingkat garis memperlakukan setiap baris sebagai unit atom — sebuah garis cocok sepenuhnya atau ditandai sebagai berubah. Ini berfungsi dengan baik untuk kode, di mana sebagian besar perubahan berarti melibatkan penambahan, penghapusan, atau penggantian seluruh baris atau blok. Perbedaan tingkat baris adalah apa yang digunakan oleh Git, tampilan GitHub PR, tab kontrol sumber VS Code, dan alat penggabungan IDE secara default. Untuk dokumen prosa seperti postingan blog, kontrak, atau dokumentasi, perbedaan tingkat baris memberikan hasil yang membingungkan karena sebagian besar pengeditan prosa mengubah beberapa kata dalam paragraf yang identik — dan tingkat garis menandai seluruh paragraf sebagai telah diubah, sehingga memaksa pengulas untuk melihat perbedaannya secara manual. Perbedaan tingkat kata memperbaikinya dengan membagi spasi dan hanya menandai kata-kata yang diubah. Kalimat yang beralih dari "rubah coklat cepat" menjadi "rubah coklat cepat" ditampilkan hanya dengan "the" → "a" dan "quick" → "fast" yang disorot, sehingga "rubah coklat" tidak berubah. Hal ini sesuai dengan cara berpikir penulis dan editor tentang perubahan. Perbedaan tingkat karakter dicadangkan untuk kasus tertentu: mendeteksi perubahan spasi tambahan, menangkap substitusi karakter Unicode yang tidak terlihat, dan beberapa alur kerja koreksi ejaan. Sebagian besar alat praktis menggunakan tingkat garis secara default dan menawarkan tingkat kata sebagai tombol pengalih, dan itulah yang dilakukan alat ini.
Ketika Diff Berbasis Browser Mengalahkan Git atau IDE
Git dan IDE modern memiliki alat diff bawaan yang sangat baik, jadi mengapa ada alat diff berbasis browser? Beberapa skenario praktis menjadikan alat browser pilihan yang lebih baik. Membandingkan teks yang tidak ada dalam repositori: konten yang ditempel dari email, respons dari titik akhir API yang berbeda, dua versi konfigurasi yang disalin dari server berbeda, keluaran dari dua proses skrip yang sama. Git dan IDE memerlukan konten untuk berada dalam file dalam sebuah proyek, yang merupakan hambatan untuk perbandingan ad-hoc. Membandingkan keluaran yang dihasilkan untuk proses debug: dua respons JSON, dua file log, dua halaman HTML yang dirender — alat browser menerima tempel dan langsung menampilkan perbedaan tanpa pengelolaan file sementara. Pengguna non-pengembang yang tidak menginstal Git atau IDE: manajer produk membandingkan revisi spesifikasi, penulis membandingkan draf, tim hukum membandingkan versi kontrak, guru membandingkan kiriman siswa. Pemeriksaan cepat satu kali selama rapat atau panggilan: tempelkan dua string yang disengketakan seseorang dan dapatkan jawabannya dalam hitungan detik. Konten sensitif privasi: perbedaan ini berjalan sepenuhnya di browser Anda, jadi membandingkan teks sensitif (kebijakan internal, dokumen HR, konfigurasi keamanan) tidak perlu diunggah ke layanan cloud diff atau disimpan di repo lokal. Alat browser juga mendukung berbagi URL perbandingan tertentu, yang berguna untuk merujuk pada temuan tertentu dalam komentar tinjauan kode atau laporan bug tanpa mereproduksi konteks perbandingan secara manual.