А ви знали, що більше знайдених дублікатів не означає кращий пошук? Іноді це лише більше… помилок.
Я постійно вдосконалюю свій jscpd, тож вирішив перевірити, як справляються інші. Зібрав сім інструментів і прогнав на одній базі: 547 файлів, 150+ форматів, для всіх однакові умови.
І ось що показали цифри.
Багато клонів, мало сенсу:
⚠️ Duplo - 162 мс, 518 клонів, найбільше з усіх. Зіставляє сирий текст без токенізації, реагує на відмінності у форматуванні - тому більшість збігів false positives.
Майже нічого не бачить:
⚠️ Fallow dupes - 164 мс, 10 клонів. Аналізує лише JS/TS, решту 513 файлів із 547 не опрацьовує - непридатний для багатомовних баз.
Повільні й обмежені в покритті:
⚠️ Simian - 964 мс, 424 клони. Звітує агрегованими блоками, без поділу на мови - не зрозуміти, у якій секції коду дублікат.
⚠️ PMD CPD - 36 с, 56 клонів. Ретельний у межах однієї мови, але повільний: опрацював лише 71 файл із 547.
Один клон різниці - і 32 рази у швидкості. Переписування на Rust дало приріст, зберігши якість виявлення:
✅ jscpd v5 (Rust) - 84 мс, 212 клонів.
✅ jscpd v4 (JavaScript) - 2.7 с, 211 клонів.
Суть у тому, що велике число знайдених клонів нічого не гарантує. Текстові інструменти швидкі, але завищують кількість збігами, яких насправді немає. Точні працюють повільно або бачать лише кілька форматів. Токенізація дозволяє не вибирати: тримає і швидкість, і точність водночас.
Це перший із трьох розборів цього бенчмарку. Далі - як інструменти розпізнають дублікати між різними форматами файлів, і скільки токенів з'їдає звіт кожного з них під час роботи з LLM (частина 2)
🔗 Повний бенчмарк: jscpd.dev/benchmarks/detection-speed
💻 GitHub: github.com/kucherenko/jscpd
☕ Підтримати: opencollective.com/jscpd
#CopyPasteDetector #jscpd #TokenEconomics #LLM
Post #938
578

- 👍 6
- 🔥 4
- ❤ 1
- 👏 1