Artikel
Membandingkan potongan kode tanpa mengunggahnya
Setiap kali Anda menempelkan dua file ke tool diff online, kode tersebut meninggalkan mesin Anda. File konfigurasi, kueri database, kunci API yang tersembunyi dalam potongan .env: semuanya berjalan ke server yang tidak Anda kendalikan. Artikel ini membahas cara algoritma diff bekerja, apa arti opsi granularitas dalam praktik, dan mengapa menjaga perbandingan tetap lokal itu penting.
Apa yang Dihitung oleh Diff
Tool diff mengambil dua teks dan menemukan kumpulan perubahan minimal yang mengonversi satu menjadi yang lain. Ide intinya adalah subsequence umum terpanjang, atau LCS: urutan baris (atau token) terpanjang yang muncul di kedua teks dalam urutan yang sama, meskipun tidak berdekatan. Semua yang tidak ada dalam subsequence umum tersebut adalah tambahan di versi baru atau penghapusan dari versi lama. Algoritma klasik untuk ini dikemukakan oleh Myers (1986), yang menemukan skrip edit terpendek dalam waktu O((N+M)D), di mana N dan M adalah panjang kedua teks dan D adalah jumlah edit. Dalam praktik, sebagian besar tool menambahkan langkah praproses untuk mengabaikan baris umum awal dan baris umum akhir, mereduksi masalah ke wilayah yang berubah. Hasilnya adalah patch: urutan hunk, masing-masing menggambarkan blok berkesinambungan berupa baris konteks, penghapusan, dan penambahan. Ini adalah format yang digunakan oleh Unix diff, Git, dan sebagian besar tool tinjauan kode.

Granularitas Baris, Kata, dan Karakter
Granularitas diff menentukan apa yang dihitung sebagai unit perbandingan. Diff berbasis baris adalah default di sebagian besar tool: setiap baris diperlakukan sebagai satu token. Ini cepat dan menghasilkan output yang mudah dibaca dalam konteks, tetapi menandai seluruh baris sebagai berubah bahkan jika hanya satu kata di baris tersebut yang berbeda. Diff tingkat kata membagi setiap baris menjadi kata-kata sebelum menjalankan LCS. Ini memberikan gambaran yang lebih halus tentang apa yang berubah dalam sebuah baris, yang berguna untuk prosa, nilai konfigurasi, atau JSON. Diff tingkat karakter melangkah lebih jauh dan dapat menyorot satu huruf yang berubah di dalam identifier yang panjang. Penanganan whitespace menambahkan noise. Baris yang berakhir dengan CRLF dan baris yang sama yang berakhir dengan LF akan terlihat berbeda dalam perbandingan byte ketat. Sebagian besar tool menawarkan flag untuk menormalkan akhir baris sebelum diff. Demikian pula, spasi trailing, indentasi tab-versus-spasi, dan baris kosong semuanya dapat menghasilkan output diff yang tidak perlu. Mengaktifkan normalisasi whitespace biasanya adalah default yang tepat saat membandingkan kode dari editor atau sistem operasi yang berbeda.
Risiko Privasi Tool Diff Online
Layanan diff dan pastebin online memang praktis: buka URL, tempelkan dua potongan, dapatkan output berwarna. Masalahnya adalah teks yang Anda tempelkan dikirimkan ke server pihak ketiga. Bergantung pada layanannya, teks tersebut mungkin dicatat, diindeks, disimpan tanpa batas, atau dibagikan dengan penyedia analitik. Ini paling penting ketika kode mengandung materi sensitif. Kredensial yang di-hardcode, nama host internal, logika bisnis eksklusif, atau data yang dapat mengidentifikasi individu semuanya dapat berakhir dalam paste. Bahkan tanpa rahasia eksplisit, struktur kode internal dapat mengungkap keputusan arsitektur yang ingin Anda rahasiakan. Risikonya bukan hipotetis. Peneliti keamanan telah berulang kali menemukan kredensial dan token internal dalam paste publik. Beberapa layanan menyimpan paste bahkan setelah pengguna menghapusnya, karena salinan ada di cache atau backup. Tidak ada cara untuk memverifikasi apa yang dilakukan layanan jarak jauh dengan teks setelah tiba. Satu-satunya mitigasi yang dapat diandalkan adalah menjaga diff tetap lokal, yang berarti menjalankannya di tool yang tidak pernah mengirim teks melalui jaringan.

Penggunaan Praktis untuk Diff Lokal
Diff bukan hanya untuk tinjauan kode. Beberapa kasus umum di mana diff lokal berguna: Meninjau suntingan pada dokumen atau file konfigurasi sebelum commit. Membandingkan dua versi Dockerfile, konfigurasi Nginx, atau manifes Kubernetes untuk memahami persis apa yang berubah di antara deployment. Memeriksa drift konfigurasi antar lingkungan. Jika konfigurasi produksi dan staging seharusnya identik kecuali nama host dan rahasia, diff langsung menunjukkan penyimpangan yang tidak disengaja. Membandingkan respons API saat debugging. Menempelkan dua payload JSON dari REST atau GraphQL API dan menjalankan diff tingkat kata menunjukkan field yang ditambahkan, nilai yang berubah, atau kunci yang dihapus tanpa membaca ratusan baris secara manual. Meninjau kode yang dihasilkan LLM terhadap baseline. Ketika model menulis ulang suatu fungsi, diff tingkat baris menunjukkan logika mana yang berubah dan mana yang tetap sama, lebih cepat daripada membaca kedua versi secara terpisah. Dalam semua kasus ini, teks yang terlibat bisa jadi sensitif, dan menjaganya dari server jarak jauh adalah pilihan yang tepat.
Melakukannya di Browser, Tanpa Mengunggah
Tool text-diff di situs ini menjalankan seluruh komputasi diff di browser Anda menggunakan JavaScript. Anda menempelkan dua teks ke dua panel dan diff langsung dirender, baris demi baris, hingga 3000 baris per sisi. Tidak ada yang dikirim ke server. Teks tidak pernah meninggalkan perangkat Anda. Implementasinya menggunakan algoritma berbasis LCS standar yang beroperasi pada baris: setiap baris adalah sebuah token, dan alat menentukan apakah baris itu tidak berubah, ditambahkan, atau dihapus dengan mencari longest common subsequence antara kedua versi. Baris yang tidak berubah dirender tanpa sorotan, baris yang ditambahkan dalam hijau, baris yang dihapus dalam merah, di samping hitungan berjalan penambahan dan penghapusan. Belum ada mode tingkat kata atau tingkat karakter dan belum ada sakelar normalisasi whitespace hari ini, sehingga baris yang hanya berbeda pada whitespace akhir atau gaya akhir baris tetap ditampilkan sebagai berubah. Karena komputasi berjalan di sisi klien, tool ini bekerja secara offline. Tidak ada akun, tidak ada riwayat, tidak ada retensi. Anda dapat membandingkan file konfigurasi lokal terhadap template, meninjau patch sebelum menerapkannya, atau memeriksa dua respons API tanpa teks tersebut mencapai pihak ketiga.
Alat dalam artikel ini
Pertanyaan yang sering diajukan
Apakah diff berbasis baris atau diff berbasis kata lebih baik untuk kode?
Untuk sebagian besar tugas tinjauan kode, diff berbasis baris adalah standar dan paling mudah dibaca, karena kode terstruktur berdasarkan baris. Diff berbasis kata bisa membantu ketika baris panjang dan hanya sebagian kecil yang berubah, seperti dalam nilai JSON satu baris, tetapi alat ini hanya membandingkan pada tingkat baris; untuk kasus itu, gunakan baris yang disorot sebagai penunjuk dan periksa sendiri perbedaan kecil di dalamnya.
Mengapa tool diff online menimbulkan risiko privasi meskipun menggunakan HTTPS?
HTTPS melindungi teks dalam transit dari penyadapan, tetapi tidak melindunginya setelah tiba di server. Operator layanan memiliki akses penuh ke konten yang ditempelkan dan dapat mencatat, menyimpan, atau membagikannya. TLS berkaitan dengan keamanan transport, bukan tentang apa yang dilakukan penerima dengan data tersebut.
Apakah tool text-diff menyimpan riwayat perbandingan sebelumnya?
Tidak. Tool ini tidak memiliki backend dan tidak membuat permintaan jaringan. Setelah Anda menutup atau memuat ulang tab, teks tersebut hilang. Tidak ada akun, tidak ada riwayat tersimpan, dan tidak ada log sisi server.