Kategorie - Funktionen im Backend sehr langsam

emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag 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
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag 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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

$aStri18n['Open category'] = i18n("Open category");
ne schönere syntax wäre besser...
*** make your own tools (wishlist :: thx)
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Beitrag 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
i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag 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.
Gruss,
Michael

"Keep on riding this Bike!" (Jackson Mulham)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Änderung bzgl. CSS ist drin.
emergence hat geschrieben: bleibt in dem bereich momentan ja nur das hier

Code: Alles auswählen

$aStri18n['Open category'] = i18n("Open category");
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
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ich meine das hier
$aStri18n['Open category'] = i18n("Open category");

es ist nicht ideal..
*** make your own tools (wishlist :: thx)
Gesperrt