Deníček programátora (3)

The Zero, úterý 26. 9. 2006 - 01:50

Protože se Lord AgEnT minule zděsil a žádal mě, abych mluvil zase nějakým normálním jazykem, tak vás dneska žádné šílené ukázky toho, čeho byste se měli vyvarovat, nečekají.

Dnešním tématem jsou regulární výrazy a výhýbání se jim.

Kdysi dávno, může to být už tak rok, jsem na Cold War zavedl mazání jednotlivých odpovědí do zpráv na fóru. Abych to trochu přiblížil, je to něco jako odpovědi "adminů" na blbboardu (toho modrýho), jen jich může být (teoreticky) neomezeně v každém příspěvku. (náhled)

Ale protože by byl nesmysl, aby se odkaz na smazání té každé odpovědi zobrazoval všem (já to tam mám všude - to [S]), když ji ani mazat nemohou (odpověď do příspěvku, stejně jako samotné příspěvky, může jen autor nebo příslušný privilegivaný člověk), bylo potřeba vymyslet nějaký systém zobrazování těch odkazů a oddělování jednotlivých odpovědí.

Nakonec jsem to vyřešil tak, že každá odpověď se obalila speciálním tagem <reply> a při výpisu se pak tento tag nahrazoval na odkaz na smazání.

Protože to ale je dost komplexní záležitost, nepřišel jsem na žádné jiné řešení, než sada str* funkcí uvnitř cyklu (while). Fungovalo to perfektně, až na to, že při velkém počtu odpovědí do jednoho příspěvku už to solidně zpomalovalo skript.

Když jsem si konečně řekl, že už bylo dost a je načase s tím něco dělat, objevil jsem modifikátor U pro preg_* funkce.

Normálně je hledání "nenasycené" a když hledáte něco ve stylu

'/<reply>(.+)<\/reply>/s'

v textu

<reply>text</reply><reply>text2</reply>

tak vám to vrátí kompletní vnitřek, tj.

text</reply><reply>text2

S modifikátorem U (tj. konec bude vypadat /sU) se najdou dvě odpovídající části - text a text2. Tedy přesně to, co chceme.

No a díky tomu se doba parsování odpovědí do příspěvků zkrátila na mém PC z 0,25s na 0,01s. Když vezmete v úvahu, že celková doba běhu skriptu byla původně 0,75s, dá se to nazvat slušnou optimalizací.

Zařazeno do kategorie Webdesign.

Předchozí: Poslední týden

Následující: Už i warez?

Komentáře

Nikdo ještě nekomentoval. Buď máte fakt rychlou RSS čtečku, nebo jste právě přečetli něco, co nikomu nestojí ani za trochu snahy.

Přidat komentář

Jako heslo je to proto, že lze využít magic wand a odpověď se tak bude pamatovat.

Povolené tagy: b, i, q. Bez jakýchkoli atributů a řádně ukončené. URL se převádí automaticky.

Vyžadováno je pouze jméno (proto je zvýrazněné), text, kód (ten zadáváte jen s vypnutým JavaScriptem - jestli ho nevidíte, nemusíte se o něj starat. Poslední věc, kterou formulář vyžaduje, je stisknutí tlačítka Přidat.

* E-mail slouží především k načtení gravatarů. Zobrazovat se nebude.