« Tüm yayınlar

PHP DTO'ları Derlemek: Saniyede 4.5M Hydration'a Giden Yol

PHP 8.4 için derlenmiş DTO hydration: reflection yerine per-class closure, opcache destekli metadata cache ve lazy ghost'larla 35x'e varan hız kazancı.

Attribute tabanlı DTO kütüphaneleri yazması keyifli ama her çağrıda reflection ve generic dispatch bedeli ödetiyor. Simple Data Objects adlı yeni bir PHP 8.4+ paketi, her data class için özel bir closure derleyerek bu maliyeti ortadan kaldırıyor: düz property'ler doğrudan array okumasına dönüşüyor, üretilen kod opcache üzerinden servis edilen bir cache'e yazılıyor, PHP 8.4'ün lazy ghost'ları ise ilk property erişimine kadar hydration'ı erteliyor.

Mimari dört aşamalı: önce reflection bir kez yapılıp ClassMeta olarak saklanıyor, sonra bu metadata'dan sınıfa özel bir hydrator/serializer closure'ı derleniyor, ardından derlenmiş kod diske persist edilerek deploy sırasında ısıtılabiliyor, son olarak da lazy ghost'lar ve lazyCollection() sayesinde hiç okunmayan objeler için hydration tamamen atlanabiliyor.

Popüler bir alternatifle yapılan kıyaslamada düz DTO hydration'ında ~35x, serileştirmede ~37x, 50 bin satırlık akışta ise ~50 kat daha az bellek kullanımı ölçülmüş. Bedeli net: sadece PHP 8.4, constructor-promoted readonly property'ler zorunlu, setter yok. Hot path'te DTO kullanan ve TypeScript transformer'lar gibi geniş bir ekosisteme ihtiyaç duymayan ekipler için pratik bir performans kazanımı.