Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szybki sposób na BBCode
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Napisałem do swojego cmsu na szybko wtyczkę która w formie jsona trzyma do każdego tagu BB 2 regexy (z => do) oraz informację czy tagu może używać zwykły użytkownik (np. w komentarzach).
Kod odpowiedzialny za aplikowanie BB jest bardzo prosty:
  1. private function parseBB($txt, $onlySafeTags=true) {
  2. foreach($this->sets as $preg) {
  3. if($onlySafeTags == true && $preg[2] != "1") continue; //Only safe tags mode turned on but processed tag is not safe, skip it
  4.  
  5. $out = @preg_replace($preg[0], $preg[1], $txt);
  6. if($out==false) trigger_error("BBCoder: tag ==> ".$preg[0]." <== is broken", E_USER_WARNING); else $txt = $out; //Do not destory text on error
  7. }
  8.  
  9. return $txt;
  10. }


Życie nauczyło mnie, że im prostrzy dla człowieka kod tym dłużej się wykonuje - nie inaczej jest tutaj. Przy 2-3 tagach nie ma problemu, jadnak jeśli dodam ich 20 to czas generowania przestaje być satysfakcjonujący. Prasowanie 1 tagu zajmuje średnio 0.8-1ms przy C2D - to wartość dla mnie nieakceptowalna.
Co prawda aplikowanie działa tak, że podstrona jest generowana > aplikowane są filtry (jednym z nich jest właśnie wtyczka BBCoder) > podstrona jest cachowana jako wynikowy HTML jednakże nie podoba mi się sytuacja gdy głupie BBCode dubluje czas generowania.

Czy ktoś ma pomysł jak to rozwiązanie uwydajnić? Mógłbym bawić się w str_replace ale wtedy odpadają tagi z parametrami (np. [yt width=100 height=100][/yt]) oraz powstaje problem niedomkniętych tagów.
mlawnik
https://github.com/wookieb/bbcode

To na pewno ci pomoże.
Dobre, sprawne i szybko działa,
kiler129
Cytat(mlawnik @ 15.05.2011, 18:23:46 ) *
https://github.com/wookieb/bbcode

To na pewno ci pomoże.
Dobre, sprawne i szybko działa,


Znam tę klasę, jednakże to chyba przerost formy nad treścia w moim przypadku wink.gif
Dodatkowo musze jakoś sprytnie dać adminowi możliwość edycji tagów z poziomu panelu admina.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.