Neredeyse her “en iyi açık kaynak scraper” derlemesinin sessiz bir kusuru var: araçlar aynı sayfalar üzerinde çalıştırılmıyor. Scrapy bir haber yazısı üzerinde deneniyor, Playwright bir e-ticaret demosunda, Colly ise yazarın elinin altında ne varsa onunla ölçülüyor — sonra da bunlar sanki aynı şeyi ifade ediyormuş gibi bire bir kıyaslanıyor. Oysa bu sıralama size araçları değil, sayfaları anlatır.
Ben de listelerin atladığı o sıkıcı ama gerekli şeyi yaptım. Tek bir test seti kurdum ve dokuz aracı onun içinden geçirdim: statik bir katalog, JavaScript ile render edilen bir katalog, navigasyon ve footer kalabalığına gömülmüş bir makale, bilerek bozulmuş bir HTTP 500, küçük bir iç bağlantı tarama grafiği ve ayrıca iki herkese açık pratik site. Aynı doğruluk verisi, aynı ölçümler, her çalıştırmada aynı koşullar. Scriptler ve ham çıktılar açık benchmark deposunda duruyor; isterseniz hepsini kendiniz yeniden çalıştırabilirsiniz. Geri gelen sonuç, derlemelerin vaat ettiği o tertemiz liderlik tablosu değil — çünkü tek bir kazanan yok. Üç farklı iş var ve dokuz araç neredeyse kendiliğinden bu işlere ayrılıyor.
Web Veri Çekimi için Thunderbit’i Deneyin
Test ortamı nasıl kuruldu ve yüksek sesle söyleyeceğim tek sınır

Her araç aynı test biçimlerinden geçti: iki sayfaya yayılmış 12 statik ürün, gecikmeyle JavaScript tarafından eklenen 8 ürün, gerçek üç paragrafın etrafı nav/footer kalabalığıyla sarılmış bir makale, bilerek üretilmiş bir 500 hatası ve bir iç bağlantı grafiği. Sonuçları hizaya getiren şey tam da bu tasarım — “8/8 dinamik ürün” ifadesi, Puppeteer üretmiş olsa da Crawlee üretmiş olsa da aynı anlama geliyor.
Çoğu derlemenin atladığı sınır da şu: Her aracın paketinde bu test biçimlerinin kendi kopyası bulunuyor, bu yüzden mutlak karakter sayıları araçlar arasında bire bir karşılaştırılabilir değil — onları yalnızca araç içi sinyal olarak okuyun, hiçbir zaman araçlar arası skor olarak değil. Gerçekten karşılaştırılabilir olan ölçüler şunlar: recall (bir oran olarak düşünün), JavaScript geçme/geçememe durumu ve yapısal davranış. Aynı ruhla bir not daha: Crawl4AI’ın statik katalog testi yalnızca ilk sayfayı kapsıyordu; bu yüzden 6/6 sonucu daha dar bir kesitte tam recall anlamına geliyor. Diğer araçlar ise iki sayfayı da tarayıp 12/12 elde etti — yani eksik değil, kapsamı daha dar bir test. Her bir fixture için ayrıntılı mantık, yöntem dokümanında yer alıyor.
Rakamlar öncesi son bir uyarı daha. Her pakette geçici bir araştırma skoru da var, ama bunları bilerek sıralı bir tablo halinde basmıyorum. Bunlar, her aracı kendi kanıtıyla kontrol etmek için kullanılan iç araçlardı; bir lig tablosu değildi — ve onları böyle yayınlamak, bu çalışmanın kaçınmaya çalıştığı o sahte kesinlik sorununu bire bir yeniden üretirdi. Bu bir skor tahtası değil, test ortamının gösterdiği şeylerin sentezi.
Tüm alan, tek bir testte
Bu tablodaki iki sütunu — “Renders JS?” ve “Built-in crawl queue” — aşağı doğru okuyun; üç iş neredeyse kendini ilan ediyor.
| Tool | Language | Renders JS? | Static recall | Structured output | Built-in crawl queue | Setup weight | License |
|---|---|---|---|---|---|---|---|
| Crawl4AI | Python | Yes (browser) | 6/6 (page 1) | CSS schema | BFS/DFS built-in | Heavy (2 browser stacks) | Apache-2.0 |
| Firecrawl | Self-hosted | Yes (playwright-service) | Full Markdown | Yes | /v1/crawl | Heaviest (6 containers) | AGPL-3.0 |
| trafilatura | Python | No | 3/3 article | No (text only) | No | Light | Apache-2.0 |
| Crawlee | Node/TS | Engine-optional | 12/12 | Via extraction | Yes (RequestQueue) | Medium (+~80 MiB) | Apache-2.0 |
| Playwright | Node/multi | Yes | 12/12 | Manual | No (hand-written BFS) | Medium (browser) | Apache-2.0 |
| Puppeteer | Node | Yes (Chrome) | 12/12 | Manual | No (hand-written BFS) | Medium (Chrome) | Apache-2.0 |
| Scrapy | Python | No | 12/12 | Feed export (JSON/CSV/XML) | Yes (built-in) | Medium (Twisted deps) | BSD-3 |
| Colly | Go | No | 12/12 | Via callbacks | Depth control | Light (1 binary + Go) | Apache-2.0 |
| Scrapling | Python | No (HTTP fetcher) | 12/12 | Yes | No | Medium ([fetchers]) | BSD-3 |

Tablodaki ve aşağıdaki tüm metadatalara dair bir not: yıldız sayıları ve sürüm numaraları Temmuz 2026 başında alındı ve ikisi de hızlı değişiyor. Bunları güncel kabul etmeden önce her projenin GitHub ve paket sayfasından yeniden kontrol edin.
Tekil araç inceleme dizini
Bu derlemedeki her proje için eşleşen ayrıntılı bir inceleme var:
- Crawl4AI incelemesi
- Firecrawl incelemesi
- trafilatura incelemesi
- Playwright vs Puppeteer karşılaştırması
- Crawlee incelemesi
- Scrapy incelemesi
- Colly incelemesi
- Scrapling incelemesi
İşte kapak görselleri — ayrıca JavaScript render testinden iki gerçek ekran görüntüsü, böylece “8/8 dinamik” iddiası sadece sayfada yazan bir sayı olarak kalmıyor.










Birinci iş: sayfayı LLM’ye hazır metne dönüştürmek

İhtiyacınız temiz Markdown ise ve bunu bir RAG hattına besleyecekseniz, üç araç öne çıkıyor — üstelik birbirlerinden çok farklılar.
Crawl4AI, pazarlama dilinin altında aslında tarayıcı destekli bir Markdown üreticisi. Arama sonuçlarında peşinden gelen “adaptive intelligence self-learning selector” hikâyesini bir kenara bırakmak gerekiyor: böyle bir şey yok — bu, başka bir kütüphanenin numarası (Scrapling’e geldiğimizde buna tekrar döneceğiz). Gerçekte yaptığı şeyi ise iyi yapıyor. Books to Scrape pratik sitesinde 13.476 karakter Markdown üretti, yapılandırılmış çekimler için CSS şemasıyla çıkarım yapabiliyor ve yerleşik BFS derin tarayıcısı, JavaScript sayfasını render edip ekran görüntüsü alırken crawl grafiğinde 5 sayfa dolaştı. Ama iki ciddi eksiği var. Ham Markdown çıktısı, içerik filtresi açılmadıkça sayfanın süslemelerini de taşıyor; ayrıca bilerek bırakılan 500 hatası success=false olarak döndü — çünkü Crawl4AI HTTP hatasını düzgün yakaladı diye değil, kendi içerik sezgisi küçük hata gövdesine bakıp onu minimal_text ... blocked diye etiketlediği için. Bir de kurulum, diske iki ayrı tarayıcı yığını indiriyor. Sürüm 0.9.0, Apache-2.0, Temmuz başı itibarıyla yaklaşık 71 bin yıldız.
Firecrawl bu grubun ağır sikleti ve self-host etmek gerçekten çalışıyor — “gerçekten” diyorum çünkü altı konteynerlik yığın (api, playwright-service, redis, rabbitmq, nuq-postgres ve foundationdb) ayağa kalktı ve aynı Books to Scrape sayfasından 9.222 karakter LLM’ye hazır Markdown üretti. Kendi playwright-service bileşeniyle JavaScript sayfasını render etti; script sonrası görünen Einstein alıntısının çıktıda yer alması, render işleminin gerçekten çalıştığını kanıtladı. Yaşadığım iki sorun Firecrawl’dan değil, ortamdan kaynaklıydı; bunu özellikle net söylüyorum ki kimse yanlış çözümü kopyalamasın: kaynak koddan derleme sırasında colima üzerinde containerd snapshotter kaynaklı geçici bir hata aldım (bu yüzden önceden derlenmiş imajlara geçtim) ve colima’nın 198.18.x.x DNS aralığı Firecrawl’un SSRF korumasını tetikledi; bunu ALLOW_LOCAL_WEBHOOKS=true ile aştım — bu yalnızca yerel geliştirme için geçici bir çözümdür, gerçek bir dağıtımda kapatılacak bir şey değildir. Self-hosted çekirdekte ayrıca cloud tarafındaki anti-block katmanı olan Fire-engine bulunmuyor ve bulut API’sini test etmedim. Daha büyük kırmızı bayrak ise lisans: Firecrawl’un self-hosted çekirdeği AGPL-3.0; bu, ticari kullanım öncesi ciddiye alınması gereken hukuki bir konudur, dipnot değil. Temmuz başı itibarıyla yaklaşık 148 bin yıldız.
trafilatura bu grubun karşı akımı ve yapay zekâ hype listelerinin sürekli unuttuğu araç. Tarayıcı yok. Yapılandırılmış satır yok. Sadece saf Python içinde hızlı ve temiz makale metni var. Makale testinde başlığı ve gerçek üç paragrafın 3’ünün 3’ünü çekti, süslemeyi tamamen ayıkladı — “Login”, “Subscribe” ya da “Copyright” sızmadı — ve üstüne yazar ile tarihi de geri getirdi. Herkese açık bir ürün sayfasında 1.324 karakter temiz metin verdi. Sınırı, tasarımının doğal sonucu kadar net: onu bir kataloğa yönlendirdiğinizde size 12 ürün adını metin olarak verir ama 0 yapılandırılmış satır döndürür; metin vardır, yapı yoktur ve JavaScript render etmez. Sürüm 2.1.0 (mevcut sürüm), Apache-2.0, yaklaşık 6,2 bin yıldız. Salt makale çıkarımı için ilk bakacağım araç bu olur.
Bu iki Markdown karakter sayısı — Crawl4AI’dan 13.476, Firecrawl’dan 9.222 — aynı herkese açık sayfadan geldi, ama bunları bir kalite farkı olarak okumayın. Bunlar farklı Markdown stratejilerini yansıtıyor (her aracın sayfa iskeletinin ne kadarını tuttuğu gibi), kimin çıktısının “daha iyi” olduğuna dair hüküm değil. Yukarıda anlattığım araç içi sinyal kuralı burada açıkça karşımıza çıkıyor.
İkinci iş: JavaScript’i güvenilir biçimde render etmek

Bazı veriler, script’ler çalışmadan HTML’in içinde görünmez; tam da bu anda gerçek bir tarayıcı artık opsiyon değildir. Bu işi üç araç üstleniyor — ve bunların ikisi neredeyse aynı araç çıktı.
Playwright ve Puppeteer verdiğim tüm testlerde berabere kaldı. İkisi de yerel testteki 8/8 dinamik ürünü ve herkese açık Quotes JS sitesindeki 10 öğeyi render etti, ikisi de 12/12 statik recall aldı ve ikisi de 500 hatasını sorunsuz yönetti (Puppeteer burada exception fırlatmak yerine response nesnesi döndürüyor). İkisinde de yerleşik bir crawl kuyruğu yok, bu yüzden 12 sayfalık bağlantı grafiğini gezmek için elde yazılmış BFS gerekiyordu. Tek gerçek fark erişim alanında: Playwright Chromium, Firefox ve WebKit’i sürüyor; Python ve .NET ile konuşuyor. Puppeteer ise Chrome merkezli ve yalnızca Node destekli. İki önemli not düşeyim, çünkü sürümler burada hızla değişiyor: Playwright 1.56.0’ı mevcut 1.61.1’e karşı test ettim ve yalnızca Chromium kullandım; Puppeteer 24.16.0’ı mevcut 25.3.0’a karşı test ettim — yeniden çalıştırın ya da bu farkı hesaba katın. İkisi de Apache-2.0; yıldız sayıları kabaca 92 bin ve 95 bin civarında.
Crawlee ise kuyruk problemini çözen araç. Tek bir API arkasında Cheerio (HTTP) motorunu ve Playwright (tarayıcı) motorunu sarıyor; tek bir sayfadaki fark her şeyi anlatıyor: Cheerio motoru JavaScript ile eklenen öğelerin 0’ını gördü, Playwright motoru yerelde 8/8’i (ve public sitede 10’u) gördü ve bunlar arasında geçiş tek satırlık bir değişiklik. Ayrıca gerçek bir RequestQueue sunuyor; bu da onu üçüncü iş değil, bu iş kategorisine dahil ediyor. Başlıkların pek söylemediği bir sıkıntı ise şu: tarayıcı motoru ayrıca npx playwright install gerektiriyor; yani npm install crawlee ile gelmeyen yaklaşık 80 MiB’lik bir ek indirme var. Sürüm 3.17.0, TypeScript, Apache-2.0, yaklaşık 24,6 bin yıldız.
Üçüncü iş: tarayıcı olmadan hızlı tarama yapmak
Sayfada JavaScript yoksa tarayıcı pahalı bir aşırı çözümdür. Burada üç HTTP-öncelikli araç yarışıyor; her biri farklı bir dil felsefesini temsil ediyor ve ilginç biçimde birbirlerinden ayrışıyorlar.
Scrapy bu grubun mühendislik sınıfı çerçevesi — spider’lar, JSON/CSV/XML’e feed export, AutoThrottle ve daha fazlası. 12/12 statik recall elde etti, makaledeki 3/3 paragrafı çekti, crawl grafiğinde derinlik 0–2 arasında 11 sayfa dolaştı ve handle_httpstatus_list üzerinden 500 hatasını yakaladı. Onu ilginç yapan şey dünya görüşü: render etmez, isteği yeniden üretir. JavaScript sayfasına atıldığında 0 düğüm aldı — ama aynı sayfanın arkasındaki JSON API ona 8/8 verdi. Scrapy’nin felsefesi tek bir veri noktasında özetleniyor: tarayıcı sürmek yerine sayfanın yaptığı isteği bulun ve onu tekrar edin. Bedeli ise oldukça büyük bir bağımlılık yığını (Twisted, lxml, parsel) ve benim onu yalnızca küçük test setlerinde denemiş olmam. Sürüm 2.17.0, BSD-3-Clause, yaklaşık 63 bin yıldız.
Colly ise Go tarafındaki cevap; ne olduğunu sade biçimde anlatması ferahlatıcı: OnHTML, OnResponse ve OnError callback’leriyle çalışan tek bir statik binary ve derinlik kontrolü. 12/12 statik recall yaptı, JSON API üzerinden OnResponse ile 8/8 çekti, 500’ü OnError ile yakaladı ve depth-2 crawl’da 17 sayfaya ulaştı — ve bunu özellikle böyle söylüyorum, çünkü bu sayfa sayısı Colly’nin verdiği bir garanti değil, test düzenimin kendi sayacı. Yapmadığı şey ise JavaScript: dinamik fixture ve Quotes JS sitesi tasarımı gereği 0 döndü. Derlemek için Go toolchain gerekir ve modül sürümü (v2.3.0) şu anda etiketli sürümün (v2.2.0) önünde gidiyor. Apache-2.0, yaklaşık 25 bin yıldız.
Scrapling ise uzman araç ve bu etiketi hak ediyor. Adaptif seçicileri, HTML değiştiğinde öğeyi yeniden bulmak için tasarlanmış — yani bir hedefin HTML sınıfını product-name’den product-title’a çevirdiğimde düz bir seçici 0 eşleşti, ama adaptif yeniden eşleme yine izlenen öğeyi buldu. Düz HTTP çıkarımında 12/12 statik ve JSON API’de 8/8 sonuç verdi. Kendi dokümantasyonunun da saklamadığı kısım şu: sentetik çok öğeli testte 3’ün 1’ini geri getirdi — bu, dayanıklı öğe takibidir, tam kurtarma değil; kafanızda olduğundan büyük satmayın. Temel pip install scrapling kurulumu ayrıca çalışması için [fetchers] eklentisini istiyor ve StealthyFetcher bir özellikten çok uyum/compliance açısından dikkat edilmesi gereken bir nokta. Sürüm 0.4.10 (mevcut sürüm), BSD-3-Clause, yaklaşık 68,7 bin yıldız.
Üç işin altındaki ortak desen
Dokuz aracı yan yana koyunca temiz bir tablo ortaya çıkıyor. Saf HTTP araçları için tam statik recall — düz 12/12 — temel beklenti; kolay vakayı hiçbiri kaçırmadı, bu yüzden ayırt edici bir özellik değil. Tarayıcı araçları ekstra ağırlıklarını ancak gerçekten JavaScript varsa hak ediyor ve bunun bedelini kurulumda ödüyorlar: tarayıcı yığını, ek kurulum veya komple konteyner filosu. “Built-in crawl queue” sütunu ise aslında çerçeve ile motor arasındaki çizgi: Scrapy ve Crawlee orkestrasyonu beraberinde getirirken, Playwright ve Puppeteer BFS’yi sizin yazmanızı istiyor. Alanın şekli tam olarak bu. Kimse genel toplamda kazanamıyor çünkü kimse aynı oyunu oynamıyor.
Peki hangisini seçmelisiniz?
Test ortamı tek bir kazanan ilan etmiyor; çünkü doğru cevap bir araç değil, bir soru: Bu üç işten hangisini yapıyorsunuz?
- LLM’ye hazır Markdown mı gerekiyor? Temiz makale metni istiyorsanız trafilatura’ya, CSS çıkarımı ve JavaScript render’ı tek kütüphanede istiyorsanız Crawl4AI’a, özellikle self-hosted bir servis istiyor ve hem AGPL-3.0 lisansı hem de altı konteynerlik yükü kabul edebiliyorsanız Firecrawl’a bakın.
- JavaScript render’ına mı ihtiyacınız var? Ham render için Playwright veya Puppeteer; motor ve dil tercihine göre seçin, çünkü başka her şeyde berabere sayılırlar. Tarama orkestrasyonu da istiyorsanız, bunu el ile yazmak yerine Crawlee alın.
- Statik sayfaları veya tekrar üretilebilir API’leri büyük ölçekte mi tarayacaksınız? Tam bir Python çerçevesi için Scrapy, tek binary içinde Go hızına ihtiyacınız varsa Colly, markup değişiminden sağ çıkmak sizin tekrar eden derdinizse Scrapling.
Aracı işle eşleştirin; bu araçların her biri savunulabilir bir seçim olur. Ama yanlış kategoriden seçim yaparsanız — statik sayfada bir tarayıcı aracı, JavaScript uygulamasında bir HTTP ayrıştırıcısı — internetteki en yüksek puanlı kütüphane bile sizi kurtaramaz.
Yönetilen bir AI API bunun neresine oturuyor?

Yukarıdaki araçların hepsi ücretsiz, açık kaynak ve kendi ortamınızda çalıştırabileceğiniz şeyler. Ama test ortamının sürekli görünür kıldığı ortak takas da bu: tarayıcı ortamından crawl koduna, anti-bot yarışından bakım yüküne kadar her şeyi siz üstleniyorsunuz. Pek çok ekip için tam kontrol zaten asıl hedef; lisans haritası da burada önem kazanıyor — alanın çoğu esnek lisanslı (Crawl4AI, Crawlee, Playwright, Puppeteer ve Colly’de Apache-2.0; Scrapy ve Scrapling’de BSD-3), Firecrawl’un AGPL-3.0 self-hosted çekirdeği ise ticari kullanım öncesinde ciddi inceleme gerektiren istisna.
Ama test ortamının ayrıca neyi gösterdiğine de dikkat edin: bu araçların yapmadığı şeyler. Render etmek, taramak, yapılandırmak ve bloklara göre rotasyon yapmak — nadiren hepsini birden, üstelik bakım gerektirmeden. Yönetilen bir AI scraping API bu yığını tek bir çağrıya indirir. Thunderbit üzerindeki geliştirici yüzeyimiz bunun için bir seçenek; teknik bir kitle için önemli olan şey tarayıcı eklentisi değil, API, MCP sunucusu ve CLI. POST /distill temiz Markdown döndürür, POST /extract ise şema tanımlı JSON üretir; JavaScript render ve anti-bot işlemleri makinenizde değil sunucu tarafında çözülür. Ajanlar ve kod asistanları için resmi bir MCP sunucusu da var — thunderbit_suggest_fields ücretsiz çalışarak bir çıkarım planı oluşturur, ardından thunderbit_distill (1 kredi) ve thunderbit_extract (20 kredi) işi tamamlar — ayrıca terminal ve cron işleri için npx @thunderbit/thunderbit-cli ile alabileceğiniz bir CLI mevcut. Ekipte kod yazmayanlar için no-code bir Chrome uzantısı da var; fiyatlandırma sayfası da iki kullanım tipini kapsıyor.
Takas yine aynı: Sıfır istek başı maliyetle dokuz adede kadar kütüphaneyi kendiniz çalıştırıp bakımını yapabilirsiniz ya da altyapıyı devredip istek başına ödeme yaparsınız. İkisi de yanlış değil. Mesela meseleniz, yığının ne kadarını gerçekten sahiplenmek istediğiniz. Çıkarma işleminin pratikte nasıl göründüğünü izlemek isterseniz, Thunderbit YouTube kanalı bunu adım adım gösteriyor.
{{INTERNAL_BLOG_LINKS}}
Sonuç
Tek bir en iyi açık kaynak scraper yok; bunu kesin bir dille söyleyen her liste, gerçekte kararı veren soruyu sessizce saklıyordur: Bu üç işten hangisini yapıyorsunuz? Bir sayfayı metne dönüştürmek, JavaScript render etmek ya da tarayıcı olmadan hızlı tarama yapmak — alan bu başlıklara temiz biçimde ayrılıyor ve her birinde seçim, evrensel bir şampiyondan çok dil ve kurulum ağırlığına dayanıyor.
Tüm bunlardan tek bir alışkanlık alacaksanız, şu olsun: Bir şeye bağlanmadan önce kendi sayfalarınızda test edin. Buradaki her sayı, tam da bu nedenle benchmark deposunda yeniden üretilebilir durumda — çünkü genel bir derlemede zirveye çıkan araç ile sizin gerçek hedeflerinizde ayakta kalan araç her zaman aynı olmayabilir.
Web Veri Çekimi için Thunderbit’i Deneyin Get Started Free
SSS
En iyi açık kaynak web scraper hangisi? Tek bir cevap yok — işin türüne bağlı. LLM’ye hazır metin için trafilatura veya Crawl4AI; JavaScript render için Playwright, Puppeteer ya da Crawlee; hızlı HTTP taraması için Scrapy veya Colly. Ortak bir test ortamında her araç kendi kategorisinde güçlü, onun dışında ise belirgin biçimde daha zayıf çıktı; bu yüzden tek beden herkese uyan sıralamalar yanıltıcı olur.
Hangi açık kaynak scraper’lar JavaScript render eder? Crawl4AI, Firecrawl, Playwright, Puppeteer ve Crawlee’nin Playwright motoru JavaScript render eder. Scrapy, Colly, trafilatura ve Scrapling’in varsayılan HTTP fetcher’ı etmez — ya sayfanın arkasındaki tekrar üretilebilir bir API’ye ihtiyaç duyarlar (Scrapy’nin yaklaşımı; JSON uç noktasından 8/8 aldı) ya da ayrı bir tarayıcı moduna.
Bir siteyi scrape etmek için headless browser gerekir mi? Yalnızca veri JavaScript çalıştıktan sonra görünüyorsa gerekir. Düz bir HTTP isteği ve ayrıştırıcı içeriğe ulaşabiliyorsa, tarayıcı pahalı bir aşırılıktır — bu durumda Scrapy, Colly veya Scrapling çok daha hafif ve hızlı olur.
Ticari kullanım için en dost lisans hangisi? Çoğu esnek lisanslıdır: Apache-2.0 (Crawl4AI, Crawlee, Playwright, Puppeteer, Colly) veya BSD-3-Clause (Scrapy, Scrapling). İstisna Firecrawl’un self-hosted çekirdeği; bu çekirdek AGPL-3.0’dur ve onunla ticari ürün kurmadan önce ciddi lisans incelemesi gerekir.
Bu benchmark rakamları yeniden üretilebilir mi? Evet. Tüm çalıştırıcılar, fixture’lar ve ham sonuçlar herkese açık, MIT lisanslı bir depoda yer alıyor. Ancak akılda tutulması gereken tek sınır şu: recall ve yapısal sonuçlar araçlar arasında karşılaştırılabilir, fakat mutlak karakter sayıları yalnızca araç içi sinyaldir; çünkü her paket fixture’ların kendi kopyasını yansıtıyor, tek bir kanonik kopyayı paylaşmıyor — yani ham karakter toplamlarını değil, oranları ve geçme/geçememe durumunu kıyaslayın.


