İçeriğe geç

Performans ve Testler

TailwindPHP öncelikle doğruluğu hedefler. PHP için özel bir değişiklik çıktıyı değiştirmeden hızı artırıyorsa uygulanır ve @port-deviation:performance olarak işaretlenir. TailwindCSS ile eşdeğerlik varsayılmaz; Tailwind'ın kendi test paketiyle sürekli doğrulanır.

Performans

PHP bağlantı noktası, ham işlem hızından önce TailwindCSS çıktısıyla eşleşmeye öncelik verir ve özgün TypeScript her koşulda daha hızlı kalır; V8'ın JIT'i sık kullanılan kod yollarını PHP'ın yetişemeyeceği şekilde yerel koda derler. Her istek veya sayfa için CSS üretiyorsanız bir derleyiciyi yeniden kullanın (bkz. generateExact()) ve oluşturma durumunu stateCacheFile ile kalıcı olarak saklayın.

Birkaç yoğun kullanılan kod yolu, aynı çıktıyı koruyan elle ayarlanmış optimizasyonlar içerir:

  • ast.php toCss() — parçaları art arda dize birleştirmek yerine bir dizide biriktirip implode işlemini bir kez yapar ve önceden hesaplanmış girinti dizelerini kullanır.
  • css-parser.php — ord() üzerinden geçmek yerine karakterleri doğrudan karşılaştırır ve strlen() değerini yeniden hesaplamak yerine arabellek uzunluklarını izler.

İkisi de @port-deviation:performance ile belgelenir ve test paketine bağlıdır; oluşturulan CSS çıktısını değiştiremezler.

Karşılaştırmalı testler

benchmarks/ dizini bir karşılaştırma aracı içerir. Şu komutla çalıştırın:

Kabuk
composer bench         # PHP vs TypeScript
composer bench:save    # write benchmarks/results.json

PHP 8.4.5 / Node.js v22.17.0 (Apple M1) üzerindeki örnek sonuçlar:

Karşılaştırma testi PHP TypeScript
css-parser, preflight.css üzerinde ~816 ops/s ~15.45K ops/s (≈20× daha hızlı)
toCss ~65.85K ops/s ~2.59M ops/s (≈39× daha hızlı)

TypeScript bu düşük düzeyli işlemlerde beklendiği gibi daha hızlıdır. Tam sayfa CSS üretimi — gerçek kullanım senaryosu — için PHP performansı yeterlidir (örnek çalıştırmada sayfa başına yaklaşık 14 ms). Aynı girdi tekrarlandığında dosya önbelleği maliyeti tamamen ortadan kaldırır.

Testler ve eşdeğerlik

Testler, PHP bağlantı noktasının TailwindCSS ile aynı çıktıyı ürettiğini garanti eder. İki yaklaşım birlikte çalışır.

1. Çıkarım tabanlı testler. test-coverage/ içindeki betikler TailwindCSS'ın kendi .test.ts dosyalarını ayrıştırır ve test senaryolarını JSON içine çıkarır. Ardından PHPUnit bu senaryoları TailwindPHP üzerinden çalıştırır ve çıktıyı beklenen CSS ile karşılaştırır. Beklentiler doğrudan yukarı akıştan geldiği için PHP davranışındaki her sapma hata olarak ortaya çıkar. Bu testler yardımcı programlar, varyantlar, entegrasyon, CSS işlevleri ve tarayıcı düzeyindeki ui.spec testleri gibi karmaşık alanları kapsar.

2. Elle taşınmış birim testleri. Daha basit TypeScript test dosyaları (AST, CSS ayrıştırma, kaçışlama, aday ayrıştırma, değer ayrıştırma, …) doğrudan PHP diline taşınır ve özgünlerin yapısını ve doğrulamalarını yansıtacak şekilde kaynaklarının yanında *.test.php olarak bulunur.

Döngü çıkar → çalıştır → doğrula şeklindedir: güncel TailwindCSS referansından yeniden çıkarım yapın, paketi çalıştırın; her sapma başarısız olur. Bu, bağlantı noktasını yukarı akışla eşzamanlı tutar ve TailwindCSS güncellemesinin incelemeyle değil, mekanik olarak doğrulanmasını sağlar. Sapmalar CI'da başarısız olur.

Kabuk
composer extract   # re-extract test cases from the TailwindCSS reference
composer test      # run the full suite

Sürüm 1.7.0 itibarıyla (TailwindCSS v4.3.3 referansına göre) 4,427 test geçiyor:

Paket Testler Kaynak
Çıkarılmış TailwindCSS paketleri (yardımcı programlar 706, varyantlar 164, dizin 148, css-functions 64, ui.spec 68) 1,150 .test.ts / .spec.ts kaynaklarından çıkarıldı
API kapsamı (yardımcı programlar, değiştiriciler, varyantlar, yönergeler, eklentiler, içe aktarmalar, @source, önbelleğe alma, genel API) 2,252 tests/
Kaynağın yanındaki birim testleri (ayrıştırıcı, AST, adaylar, tema, yardımcılar, seçici ayrıştırıcı, lightningcss dönüşümleri, küçültücü) 767 *.test.php bağlantı noktaları ve PHP için özel testler
CLI (bağımsız değişken ayrıştırma, çıktı, derlemeler) 84 tests/Cli*Test.php
Eklenti bağlantı noktaları (tipografi, formlar) 45 Eklentilerin yanındaki *.test.php
Yardımcı kütüphaneler (clsx, tailwind-merge, CVA) 129 Referans paketleri

Kod kalitesi

Biçimlendirme ve statik analiz, Composer betikleri üzerinden çalıştırılır:

Kabuk
composer lint      # Pint --test  (check formatting)
composer format    # Pint         (fix formatting)
composer analyse   # PHPStan      (static analysis, level 4)
composer quality   # lint + analyse

PHPStan, 4. düzeyde çalışır (phpstan.neon); işlev tabanlı mimarinin kullandığı dinamik dizi şekilleri için kısa bir yoksayılan kalıplar listesi vardır. Tüm kaynak dosyaları analiz edilir; test dosyaları hariç tutulur.

Bu testlerin doğruladığı yapıyı ve sapmaların kaydedildiği yeri görmek için Mimari bölümüne bakın.