Ana içeriğe geç
Programlama

Rails geliştiricileri enum metodlarını optimize ederek performansı artırdı

Öne çıkanlar

  • Enum sorgularında kullanılan `public_send` ve blok tabanlı `define_method` çağrıları kaldırıldı.
  • Metot üretimi için `ActiveSupport::CodeGenerator` altyapısı tercih edildi.
  • YJIT altındaki sorgu hızı saniyede 3,56 milyondan 16,27 milyon işleme yükseldi.
  • ZJIT yapılandırmasında saniyede 18,5 milyon işlem düzeyine ulaşıldı.

Ruby on Rails ekibi, framework içindeki ActiveRecord enum sorgularının çalışma zamanı performansını artırmak amacıyla kod üretim mekanizmasını yeniledi. Geliştiriciler, daha önce define_method ve public_send kullanılarak dinamik olarak tanımlanan enum sorgu metotlarının JIT derleyicileri ve sanal makine üzerinde gereksiz ek yük oluşturduğunu belirledi. Yapılan değişiklikle birlikte metotlar doğrudan derleme sırasında sabit değerler gömülerek oluşturulmaya başlandı.

Optimizasyon sürecinde ActiveSupport::CodeGenerator kullanılarak metotlar statik Ruby kodu dizgileri halinde oluşturuldu. Bu yöntem sayesinde dinamik ortam yakalayan bloklar ve yavaş çalışan public_send çağrıları ortadan kalktı. Geliştiriciler, geçersiz tanımlayıcı adları taşıyan enum girdileri ve sonsuz kayan noktalı sayılar gibi özel uç durumları da yeni kod üretimi akışına başarıyla uyarladı.

Hazırlanan yama mikro kıyaslama testlerinde belirgin bir performans artışı sağladı. YJIT etkinken saniyede 3,56 milyon olan işlem sayısı 16,27 milyona, ZJIT etkinken ise 3,81 milyondan 18,50 milyona yükseldi. Standart CRuby yorumlayıcısında da saniye başına işlem sayısı yaklaşık iki katına çıktı.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.