# Perbezaan teks: mod, kiraan dan bila ia menjadi perlahan

> Cara perbandingan aksara, perkataan dan baris berfungsi, apa yang dikira oleh Penambahan, Pemadaman dan Perubahan, cara pengakhir baris Windows dan Unix dilayan, dan had saiz praktikal termasuk had 5,000 aksara dalam mod aksara.

- Tool: [Alat Perbandingan Teks](https://toolsg.com/ms/text-diff)
- Language: ms (available: en, zh, ms, ta)
- Last verified against official sources: 2026-10-20
- Source site: ToolSG — a planning guide, not official or financial advice. Cite the agencies listed under Sources.

## Angka utama sepintas lalu

| Perkara | Nilai | Sumber |
| --- | --- | --- |
| Algoritma | Skrip suntingan terpendek Myers — Mencari set minimum sisipan dan pemadaman; Git menggunakan keluarga yang sama secara lalai. |  |
| Unit perbandingan | Aksara, perkataan atau baris — Mod aksara membandingkan titik kod Unicode; mod perkataan menyimpan ruang kosong sebagai unit; mod baris memecah pada pemisah baris (CRLF, LF dan CR dianggap sama). |  |
| Angka Perubahan | Penambahan campur Pemadaman — Perkataan yang diganti dikira satu pemadaman dan satu penambahan, jadi 2 perubahan. |  |
| Huruf dan ruang kosong | Sentiasa penting — Tiada pilihan abaikan huruf besar/kecil atau abaikan ruang kosong. |  |

## Cara perbandingan dibuat

Tampal teks asal di kiri dan teks yang diubah di kanan, pilih **Mod Perbandingan** dan **Mod Paparan**, kemudian tekan **Bandingkan Teks** (Ctrl atau Cmd serta Enter juga boleh). Ia tidak langsung; tekan Bandingkan sekali lagi selepas menyunting. **Tukar Teks** menukar kedua-dua kotak. Kedua-dua teks kekal dalam pelayar anda.

Halaman menukar setiap teks kepada senarai unit, kemudian menjalankan algoritma Myers (E. Myers, "An O(ND) Difference Algorithm and Its Variations", 1986) untuk mencari sisipan dan pemadaman paling sedikit yang menukar satu senarai kepada yang lain. Diuji dengan pengiraan subjujukan sepunya terpanjang yang tepat pada 3,000 pasangan rawak, ia sentiasa menghasilkan keputusan yang sah dan minimum.

| Mod | Unit | Catatan |
| --- | --- | --- |
| Tahap aksara | Satu titik kod Unicode | Emoji seperti 🙂 ialah satu unit, tetapi aksen yang ditulis sebagai `e` ditambah tanda gabungan ialah dua. |
| Tahap perkataan | Perkataan **dan** ruang kosong di antaranya | Urutan ruang kosong ialah unit tersendiri, jadi ruang tambahan dipaparkan sebagai perubahan. |
| Tahap baris | Satu baris (dipecah pada pemisah baris) | Pilihan terbaik untuk kod, konfigurasi dan senarai. CRLF, LF dan CR dianggap pemisah yang sama. |

## Contoh (dikira dengan kod halaman)

| Mod | Asal | Diubah | Perbezaan |
| --- | --- | --- | --- |
| Aksara | `kitten` | `sitting` | `-k +s`, `i`, `t`, `t`, `-e +i`, `n`, `+g` (3 penambahan, 2 pemadaman) |
| Perkataan | `the quick brown fox` | `the quick red fox` | `-brown +red` (1 penambahan, 1 pemadaman) |
| Perkataan | `a b` | `a  b` | satu ruang dibuang dan ruang berganda ditambah (1 + 1) |
| Baris | `l1`, `l2`, `l3` | `l1`, `L2`, `l3` | `-l2 +L2` |
| Aksara | `a🙂b` | `a😀b` | `-🙂 +😀` |
| Baris | `a` serta baris baharu | `a` | satu baris kosong tambahan dibuang |

## Maksud angka

Penambahan ialah bilangan unit yang hanya ada dalam teks yang diubah, Pemadaman bilangan unit yang hanya ada dalam teks asal, dan **Perubahan ialah jumlahnya**. Ia bukan bilangan kawasan yang disunting. Menukar satu perkataan oleh itu ialah dua perubahan. Dalam mod perkataan, kiraan termasuk unit ruang kosong, jadi "perkataan" pada label adalah anggaran. Label unit di bawah setiap angka (aksara, perkataan atau baris) memberitahu apa yang dikira.

## Perkara yang mungkin mengejutkan

- **Pengakhir baris diseragamkan.** CRLF (Windows), LF (Unix) dan CR tunggal (Mac lama) dianggap pemisah baris yang sama sebelum membandingkan dalam setiap mod, jadi `l1`, CRLF, `l2` berbanding `l1`, LF, `l2` tidak menunjukkan perbezaan. Perbezaan tidak kelihatan yang lain, seperti ruang di hujung, masih dikira; [pengesan pengakhir baris](https://toolsg.com/ms/line-ending-detector) boleh mengenal pasti pengakhir yang bercampur.
- **Huruf besar/kecil dan ruang kosong penting.** `Hello` dan `hello` berbeza, begitu juga tab dan ruang. Tiada pilihan abaikan; normalkan teks dahulu dengan [penukar huruf besar/kecil](https://toolsg.com/ms/case-converter) atau [pemadat teks](https://toolsg.com/ms/text-minifier).
- **Anak tetingkap sebelah menyebelah tidak sejajar.** Setiap anak tetingkap hanya menyenaraikan unit yang sama dan perubahannya sendiri, tanpa pengisi kosong, jadi baris yang tidak berubah boleh berada pada ketinggian berbeza.
- **Paparan bersepadu bukan fail tampalan.** Dalam mod baris ia menunjukkan dua lajur nombor baris dan penanda `+` / `-`, tetapi tiada pengepala hunk atau had konteks, jadi anda tidak boleh menggunakannya dengan `patch`.
- **Mod perkataan tidak memahami makna.** Ayat yang dialihkan muncul sebagai pemadaman di satu tempat dan penambahan di tempat lain.

## Had saiz dan kelajuan

Algoritma menyimpan syot kilat keadaannya untuk setiap langkah, jadi masa dan memori meningkat kira-kira dengan kuasa dua bilangan perbezaan, bukan dengan panjang teks. Halaman terlebih dahulu melangkau permulaan dan pengakhiran yang sama pada kedua-dua teks, jadi teks yang serupa pantas: 3,000 baris dengan satu baris berubah dibandingkan dalam kira-kira 3 milisaat, dan dua teks 40,000 aksara yang berbeza satu aksara dalam kira-kira 6 milisaat, kedua-duanya dalam Node.js. Teks yang sama sekali berbeza tidak: dua rentetan rawak yang tidak berkaitan sebanyak 1,000 aksara setiap satu (2,000 keseluruhan) mengambil kira-kira 0.7 saat, 2,000 setiap satu kira-kira 3 saat dan 2,500 setiap satu (5,000 keseluruhan, iaitu had) kira-kira 4 saat dalam mod aksara pada mesin ujian; 5,000 setiap satu mengambil 22 saat sebelum had diperkenalkan. Kelajuan pelayar berbeza, tetapi coraknya sama.

**Mod aksara mempunyai had.** Jika bahagian yang berbeza, dikira pada kedua-dua teks bersama selepas permulaan dan pengakhiran yang sama diabaikan, melebihi **5,000 aksara**, halaman memaparkan mesej dan tidak membandingkan. Tukar ke mod perkataan atau baris yang mempunyai jauh lebih sedikit unit, atau bandingkan bahagian demi bahagian. Mod perkataan dan baris tiada had sebegitu, tetapi dokumen yang sangat besar (puluhan ribu perkataan) masih mungkin perlahan.

> **Petua:** Jika mod aksara perlahan, tukar ke mod baris atau perkataan dahulu, kemudian teliti hanya baris yang berubah.

## Kesilapan biasa

- Membaca Perubahan sebagai bilangan suntingan dan bukannya unit yang ditambah campur dibuang.
- Menjangka ruang atau tab di hujung diabaikan apabila membandingkan teks daripada sistem berbeza; hanya gaya pengakhir baris yang diseragamkan.
- Menggunakan mod aksara untuk dokumen panjang. Melebihi 5,000 aksara yang berbeza, ia berhenti dan meminta anda bertukar.
- Menjangka alat mengabaikan ruang di hujung atau huruf besar/kecil.

## Alat berkaitan

[Pengesan pengakhir baris](https://toolsg.com/ms/line-ending-detector) menunjukkan CRLF berbanding LF. [Buang pemisah baris](https://toolsg.com/ms/remove-line-breaks) dan [Pengisih teks](https://toolsg.com/ms/text-sorter) mengemas senarai sebelum membandingkan. [Pembersih aksara tersembunyi](https://toolsg.com/ms/hidden-character-cleaner) membuang perbezaan tidak kelihatan. [Pengira perkataan](https://toolsg.com/ms/word-counter) mengukur saiz setiap versi.

## Soalan lazim

**Adakah teks saya dihantar ke pelayan?**

Tidak. Semua perbandingan teks berlaku sepenuhnya dalam pelayar web anda menggunakan JavaScript. Teks anda tidak pernah meninggalkan peranti anda, memastikan privasi dan keselamatan penuh untuk dokumen sensitif.

**Berapakah panjang maksimum teks yang boleh saya bandingkan?**

Mod perkataan dan baris tiada had tetap, walaupun teks yang sangat besar (puluhan ribu perkataan) boleh memperlahankan pelayar anda. Mod aksara membandingkan sehingga 5,000 aksara yang berbeza (permulaan dan pengakhiran yang sama tidak dikira); melebihi itu, anda diminta bertukar ke mod perkataan atau baris kerana perbandingan aksara demi aksara memerlukan jauh lebih banyak masa dan memori.

**Bolehkah saya membandingkan fail kod dengan alat ini?**

Sudah tentu! Mod perbandingan tahap baris direka khusus untuk membandingkan kod sumber, fail konfigurasi dan teks berstruktur. Ia menyerlahkan perbezaan baris demi baris dengan jelas.

**Mod perbandingan manakah yang patut saya gunakan?**

Gunakan tahap aksara untuk perbandingan yang tepat aksara demi aksara; tahap perkataan untuk dokumen dan artikel; dan tahap baris untuk kod serta fail konfigurasi. Mulakan dengan tahap perkataan untuk teks umum.

**Bolehkah saya menyimpan atau mengeksport hasil perbandingan?**

Buat masa ini, anda boleh menyalin sama ada teks asal atau teks yang diubah suai ke papan klip anda menggunakan butang salin. Untuk simpanan kekal, ambil tangkapan skrin perbandingan atau simpan teks yang telah disalin.

**Adakah alat ini berfungsi di luar talian?**

Setelah halaman dimuatkan, fungsi perbandingan berfungsi tanpa sambungan internet kerana semua pemprosesan berlaku dalam pelayar anda menggunakan JavaScript.

**Sejauh mana ketepatan algoritma diff ini?**

Kami menggunakan algoritma Myers diff standard, iaitu algoritma yang sama digunakan oleh sistem kawalan versi popular seperti Git. Ia memberikan pengesanan perbezaan yang tepat dan boleh dipercayai.

**Bolehkah saya menggunakannya untuk membandingkan teks bukan bahasa Inggeris?**

Ya! Alat kami menyokong semua aksara Unicode, menjadikannya sesuai untuk membandingkan teks dalam apa-apa bahasa termasuk Cina, Arab, Jepun, Korea dan banyak lagi.

**Apakah maksud kod warna?**

Sorotan hijau menunjukkan teks yang ditambah dalam versi yang diubah suai. Sorotan merah menunjukkan teks yang dibuang. Teks yang tidak berubah kekal tanpa format untuk memudahkan pembacaan.

**Bolehkah saya membandingkan lebih daripada dua teks?**

Buat masa ini, alat ini membandingkan dua teks pada satu masa. Untuk membandingkan berbilang versi, lakukan perbandingan berpasangan antara versi yang berbeza.


## Sumber rujukan

- [Git — git-diff documentation (--diff-algorithm)](https://git-scm.com/docs/git-diff) — Describes Myers as the basic greedy algorithm and the current default.
- [MDN — String iterator (code points)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Symbol.iterator)
