PHP: zvýraznění výrazu a diakritika

Kit

Re: PHP: zvýraznění výrazu a diakritika
« Odpověď #15 kdy: 25. 01. 2011, 20:10:04 »
Napadlo mě jiné řešení: Co kdyby se místo serveru zatížila klientská stanice? Prostě by k vygenerované stránce byl přidán kousek Javascriptu s hledanými slovy a ten by se postaral o zvýraznění. Nevím sice z hlavy, jestli disponuje vhodným arzenálem, ale určitě by to bylo i pro server přijatelnější.

Berte to jako pohled na problém z jiného úhlu.


ghost

Re: PHP: zvýraznění výrazu a diakritika
« Odpověď #16 kdy: 25. 01. 2011, 20:26:53 »
Napadlo mě jiné řešení: Co kdyby se místo serveru zatížila klientská stanice? Prostě by k vygenerované stránce byl přidán kousek Javascriptu s hledanými slovy a ten by se postaral o zvýraznění. Nevím sice z hlavy, jestli disponuje vhodným arzenálem, ale určitě by to bylo i pro server přijatelnější.

Berte to jako pohled na problém z jiného úhlu.
jde to udelat temer stejnym zpusobem, az na jednu vec - musis se vyporadat s mene elegantnim prevodem z utf8 na ascii - kdyz se podivas po netu, tak se vsude resi pres regexp

Peterson

Re: PHP: zvýraznění výrazu a diakritika
« Odpověď #17 kdy: 25. 01. 2011, 21:59:36 »
Kit:
Rozhodne to stoji za uvahu a urcite si to alespon vyzkousim. Skvely tip!

Logik

  • *****
  • 1 031
    • Zobrazit profil
    • E-mail
Re: PHP: zvýraznění výrazu a diakritika
« Odpověď #18 kdy: 25. 01. 2011, 22:43:42 »
To moje řešení trvá tak dlouho díky použitýmu kódování. UTF-8 nemá pevnou délku znaku a tam nejde skákat rozumně doprostřed řetězce indexem. A na to jsem zapoměl.

Řešením je počítat v mb_string s nějakym kódováním s pevnym znakem, např. UCS-2. Pak je to najednou rychlejší, dle mejch testů cca 2x rychlejší:
2,5s ku 4,7s.
Problém je, že vstupní texty budou pravděodobně v UTF-8 a pak teda je nutné dělat dvojí konverzi (na vstupu a výstupu fce), takže se rychlost smrskne na
3,9s ku 4,7s
a tady je už asi rychlejší použít ten substring. I když todle řešení je robustnější, tamto bude při velkym počtu vyhledanejch řetězců (popř. vyhledávanejch řetězců, kde zas stačí jeden UTF/UCS převod) zpomalovat víc, tam se projeví rychlost kódování UCS-2 (zkoušel jsem jen svůj algoritmus, při vyhledání 'a' byl najednou rozdíl
mezi UCS a UTF-8 1 ku 5,9s (menší počet iterací).

Ideální by bylo, kdyby (mb_)substr řetěazce nekopíroval, ale to bychom chtěli od php příliš....

Jo, ještě v těch řešeních je nadužívání mb_strlen - vzhledem k tomu, že u mb se musí projít celej řetězec, tak tam to vadí, i když jsem předtim tvrdil, že ne... :-(

Ad na klientu: Šlo by to i zkombinovat: na serveru převést utf8 na ascii a na klientu to zvýraznit :-)

PS: Jo a UCS-2 nemá všechny znaky, takže přijdeš o starou čínštinu apod... UCS-4 to řeší, ale to by bylo zas pomalejší, přecijenom cca 3x větší paměťový nároky se poznaj....
« Poslední změna: 25. 01. 2011, 22:45:43 od Logik »

ghost

Re: PHP: zvýraznění výrazu a diakritika
« Odpověď #19 kdy: 25. 01. 2011, 22:56:50 »
jo tak s tema znakama jsem potom taky pekne na omylu - az se stydim.
kazdopadne na php.net je zajimavy benchmark - vysledek je asi jasny, strlen nejspis taky pocita po jednom, akorat je pevna delka, takze je rychlejsi ...
# test runs: 1000000
# benchmarking strlen vs. mb_strlen
# normal strlen: 3.6795361042023 ms, average: 3.6795361042023E-6 ms
# mb_strlen: 5.5934538841248 ms, average: 5.5934538841248E-6 ms
ok 1 - mb_strlen is slower than strlen