Seite 2 von 2
Verfasst: Mi 9. Aug 2006, 11:27
von emergence
der csv spiegelt soweit ich weiss den aktuellen entwicklungsstand wieder...
muss da aber mal bei 4fb nachfragen...
ad. gettext
->
http://mel.melaxis.com/devblog/2006/04/ ... st-enough/
änderungen betreffend beschleunigung sind im csv im diesem bereich keine vorhanden...
es zahlt sich meiner meinung nach somit aus, in diesem bereich noch mehr zeit reinzustecken...
Verfasst: Mi 9. Aug 2006, 13:05
von xmurrix
Danke für die URL, allerdings geht es dort um die Anzahl der Request pro Sekunde, das kann man so nicht mit der Verwendung innerhalb von Schleifen vergleichen.
Dazu gibt es auch was im GNU-gettext Manual:
http://www.gnu.org/software/gettext/man ... tml#SEC152
gettext cached also die Strings, liefert die Ergebnisse ab dem 2. Aufruf aus dem Cache.
Da bei Contenido ja nich direkt gettext verwendet wird, sondern der wrapper i18n, denke ich schon, dass das Cachen was bringt. Bei einem Test, war die gecachte Version schneller. Kann sein, dass ich damit falsch liege...
Habe es mit folgendem Code getestet:
Code: Alles auswählen
$aI18n["Permission denied"] = i18n("Permission denied");
// war bei mir langsamer
$aTimer['startA'] = _microtime();
for($i=0; $i<500; $i++) {
$tmp = i18n("Permission denied");
}
$aTimer['endA'] = _microtime();
// war bei mir schneller
$aTimer['startB'] = _microtime();
for($i=0; $i<500; $i++) {
$tmp = $aI18n["Permission denied"];
}
$aTimer['endB'] = _microtime();
print '<pre> version a: ';print($aTimer['endA'] - $aTimer['startA']);print '</pre>';
print '<pre> version b: ';print($aTimer['endB'] - $aTimer['startB']);print '</pre>';
function _microtime(){
list ($usec, $sec) = explode(' ', microtime());
return ((float) $usec + (float) $sec);
}
Man kann aber durch die Optimierung der Funktion i18n etwas mehr Geschwindigkeit rausholen, in dem z. B. extention_loaded und function_exists nur einmal abgefragt wird:
Code: Alles auswählen
function i18n ($string, $domain = "contenido")
{
global $cfg, $i18nLanguage;
cInitializeArrayKey($cfg, "native_i18n", false);
if (!$cfg["native_i18n"])
{
return i18nEmulateGettext($string, $domain);
}
if ($i18nLanguage == "he_SS")
{
return i18nEmulateGettext($string, $domain);
}
static $bGettextLoaded, $bDgettextExists;
if (!isset($bGettextLoaded)) {
$bGettextLoaded = extension_loaded("gettext");
$bDgettextExists = function_exists("dgettext");
}
if ($bGettextLoaded)
{
if ($bDgettextExists)
{
if ($domain != "contenido")
{
$translation = dgettext($domain, $string);
return ($translation);
} else {
return gettext($string);
}
}
}
return i18nEmulateGettext($string, $domain);
}
Gruß
xmurrix
Verfasst: Mi 9. Aug 2006, 13:15
von stese
edit hier stand vorher was fehlinterpretiertes ;)
klingt gut - sollte man sich mal anschauen - du hast es ja auf geschwindigkeit getestet: wie viel schneller ist das? prozentual? so dass man das dann auf anzahl der i18n hochrechnen kann
Verfasst: Mi 9. Aug 2006, 13:40
von emergence
@xmurrix
okay stimmt, deine variante ist schneller...
hat er mich überzeugt...
den code bei der i18n hab ich mir noch mal angesehen... cache muss bei der emulation gar keiner mehr rein gebaut werden... ist schon drinnen...
bleibt in dem bereich momentan ja nur das hier
ne schönere syntax wäre besser...
Verfasst: Mi 9. Aug 2006, 13:46
von xmurrix
Habe den Code vom vorherigen Posting testhalber auf mein Webspace abgelegt:
http://www.purc.de/t-benchmark.php
Das Ergebnis ist für 500 Schleifendurchläufe. Wenn man die Zeiten miteinander vergleicht, kommt eine Geschwindigkeitbesserung von 1500% raus (Das sollte man allerdings nicht so überbewerten).
Gruß
xmurrix
Verfasst: Mi 9. Aug 2006, 13:56
von i-fekt
xmurrix hat geschrieben:Das sollte man allerdings nicht so überbewerten
Das sollte man auf jeden Fall einbauen, das Backend ist ohnehin nicht das schnellste.
Verfasst: Mo 2. Okt 2006, 17:29
von HerrB
Änderung bzgl. CSS ist drin.
emergence hat geschrieben:
bleibt in dem bereich momentan ja nur das hier
ne schönere syntax wäre besser...
Meintest Du das grundsätzlich oder mehr in der Art:
$aMsg["Open category"] = i18n("Open category"); (andere Bezeichnung)?
Gruß
HerrB
Verfasst: Mo 2. Okt 2006, 18:05
von emergence
ich meine das hier
$aStri18n['Open category'] = i18n("Open category");
es ist nicht ideal..