• [^] # Re: la lenteur extraordinaire d'utf8

    Posté par . En réponse au journal L'utf-8 et les décideurs. Évalué à 4.

    Les chiffres donnés sur le site de ton lien me surprennent un peu.

    J'ai fait par curiosité mes propres tests et je trouve des résultats bien différents.
    Les performances entre ascii, utf-8, sjis et eucjp sont pour moi très similaires.

    Voici les résultats (si quelqu'un a envie de s'amuser à retester, ne pas oublier de changer l'encodage de la console à sjis ou eucjp pour les tests de grep) :

    Préparation des fichiers de test

    # yes 隣の客はよくカキ食う客や | head -1000000>foo-utf8.txt
    # yes aaaaaaaaaaaa | head -1000000>ascii.txt
    # iconv -f utf8 -t sjis foo-utf8.txt >foo-sjis.txt
    # iconv -f utf8 -t eucjp foo-utf8.txt >foo-eucjp.txt


    test comptage des lignes (wc)

    Fichier ne contenant que des caractères ASCII

    # time LC_CTYPE=ja_JP.UTF-8 wc ascii.txt>/dev/null
    real 0m0.220s user 0m0.173s sys 0m0.010s

    # time LC_CTYPE=ja_JP.ASCII wc ascii.txt>/dev/null
    real 0m0.222s user 0m0.167s sys 0m0.016s

    utf-8 : 0.403 sec
    ascii : 0.416 sec

    Fichier ne contenant que des caractères non ASCII

    # time LC_CTYPE=ja_JP.UTF-8 wc foo-utf8.txt>/dev/null
    real 0m0.576s user 0m0.499s sys 0m0.039s

    # time LC_CTYPE=ja_JP.SJIS wc foo-sjis.txt>/dev/null
    real 0m0.492s user 0m0.432s sys 0m0.019s

    # time LC_CTYPE=ja_JP.EUCJP wc foo-eucjp.txt >/dev/null
    real 0m0.402s user 0m0.337s sys 0m0.027s

    utf-8 : 1.114 sec
    sjis : 0.943 sec
    eucjp : 0.766 sec

    Test grep

    Fichier ASCII

    # time LC_CTYPE=ja_JP.UTF-8 grep "a" ascii.txt>/dev/null
    real 0m0.327s user 0m0.285s sys 0m0.009s

    # time LC_CTYPE=ja_JP.ASCII grep "a" ascii.txt>/dev/null
    real 0m0.323s user 0m0.277s sys 0m0.012s

    utf-8 : 0.612 sec
    ascii : 0.621 sec

    Fichier non ASCII

    # time LC_CTYPE=ja_JP.UTF-8 grep "の" foo-utf8.txt>/dev/null
    real 0m0.404s user 0m0.332s sys 0m0.038s

    # time LC_CTYPE=ja_JP.SJIS grep "の" foo-sjis.txt>/dev/null
    real 0m0.350s user 0m0.287s sys 0m0.030s

    # time LC_CTYPE=ja_JP.EUCJP grep "の" foo-eucjp.txt>/dev/null
    real 0m0.347s user 0m0.298s sys 0m0.018s


    utf-8 : 0.774 sec
    sjis : 0.667 sec
    eucjp : 0.663 sec

    La machine de test est un pentium M 1.6Ghz sous gentoo