Ich war mal wieder am Performance-Debuggen von pc-kombo. Die Seite soll schneller laden, wenn der Cache noch nicht befüllt ist, was doch immer wieder Besucher trifft. Dabei stolperte ich über diesen Abschnitt des Flamegraphs:
tt
ist der Übersetzungshelfer, lru-redux der genutzte Cache, Grundlage das Gem i18n. Und dieser Abschnitt machte einen gewichtigen Teil des Seitenladevorgangs aus.
Also habe ich das alte Übersetzungssystem auf FastGettext umgestellt. Der Code in Sinatra sieht in etwa so aus:
helpers do
include FastGettext::Translation
def t(token, opts = {})
_(token.to_s) % opts
end
end
configure do
FastGettext.add_text_domain('pckombo', path: 'locales', type: :yaml)
end
before do
FastGettext.text_domain = 'pckombo'
if request.env['HTTP_ACCEPT_LANGUAGE']
languages = HTTP::Accept::Languages.parse(request.env['HTTP_ACCEPT_LANGUAGE'])
languages.each do |language|
case language.locale
when /en[_]*/
FastGettext.locale = "us"
break
when /de[_]*/
FastGettext.locale = "de"
break
when /fr[_]*/
FastGettext.locale = "fr"
break
when /es[_]*/
FastGettext.locale = "es"
break
end
end
end
end
Die alten yaml-Übersetzungen konnten weiterverwendet werden. So beginnt z.B. die locales/de.yml:
de:
cpu: Prozessor
Es ist also fast eine einfach so einsetzbare Alternative mit minimalen Codeänderungen.
Das Ergebnis:
Die Übersetzungen beim ersten Laden brauchen nun einen Bruchteil der Zeit. Das beste daran: Das wird nicht nur den speziellen Seitenaufruf beschleunigen den ich da betrachtet hatte, sondern generell der gesamten Webseite helfen.
Wer Übersetzungen in Ruby umsetzen muss, für den ist FastGettext ist definitiv einen Blick wert.
onli blogging am : PC-Kombo bekam ein neues Design
Vorschau anzeigen