Kısa bir süre önce varsayılan Basit I18n arka ucundan I18n için bir Redis arka ucuna geçiyorum. Bunu yaptığım için çevirileri halletmemizi kolaylaştırdım, ancak her sayfada önemli bir performans artışı olduğunu gördüm.Rails üretimi I18n için Redis çok yavaş mı?
Göstermek için MBP'mde bazı Yükseltmeler 3.2 ve Redis 2.6.4 yüklü bazı Karşılaştırmalar çalıştırıyorum. Müşterim olarak hiredis-rb kullanıyorum.
İki farklı arka uçu kullanırken oldukça net bir fark var. Basit arka uç ile ilk görüşme kısa bir gecikme var - Ben çeviriler belleğe yüklenirken varsayalım - bundan sonra ve daha sonra büyük bir performans:
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.143246
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.00415
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.004153
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.004056
Redis arka uç sürekli yavaş:
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.122448
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.263564
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.232637
pry(main)> Benchmark.realtime { 500.times { I18n.t 'shared.slogan' } }
=> 0.122304
Bu, I18n için neden yavaş olduğunu anlamamıza neden oluyor ... Kod tabanım boyunca düzinelerce I18n çağrılarını sıraya alıyorum. Onları bir araya ön Ben iyi durumda olurdu ben toplu Yapabilseydim:
pry(main)> keys = $redis.keys[0..500]
pry(main)> Benchmark.realtime { $redis.mget keys }
=> 0.04264
Ama gerçekten varolan I18n backends herhangi biriyle bunun için temiz bir yol görmüyorum. Bu problemi çözen var mı?
DÜZENLEME Chris Heald önerisini aldı ve memoization bir arka uç basit önbellek büst yarattı. özü işte burada:
https://gist.github.com/wheeyls/5650947
Birkaç gündür bu denersiniz ve daha sonra bir mücevher çevirmek.
GÜNCELLEME
Çözümümün artık mücevher olarak mevcuttur:
https://github.com/wheeyls/cached_key_value_store
Ve ayrıca bu sorun hakkında blogged:
http://about.g2crowd.com/faster-i18nredis-on-rails/
Redis sunucunuz bu karşılaştırıcıları çalıştıran kutuyla ilişkili olarak nerede? – deefour
Bunlar çalıştırıldı yerel makinemde. Sorunu açıklığa kavuşturmak için düzenleyeceğim. – Wheeyls