News - Features - Downloads - Forum - Team - Support - Switch View: Screen
Login - Registrierung - Passwort vergessen

Antworten: 10
Seite [1]
duRiel ClanSphere Team


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# Thema - 14.11.2009 um 19:26 Uhr
SCHIRI und ich haben ein neues BBcode System entwickelt. Dieses ist nicht nur objektorientiert und leicht erweiterbar, sondern auch äußerst flexibel und anpassbar.

Man kann einstellen, welche Suchmuster angewendet werden sollen und welche Priorität die einzelnen Suchmuster haben. Es ist auch ohne Weiteres möglich, mehrere BBcodes mit unterschiedlichen Mustern anzuwenden.

Kurzbeispiel:
 
1.
2.
3.
4.
5.
6.
7.
8.
1. / 2. / ... 
 require_once 'bbcode/core.php';
require_once 
'bbcode/ClansphereBbcode.php';
 
$string '[b]Fett[/b] und so [i]weiter[/i]';
 
$string Bbcode::convert($string);

// output: Fett und so weiter


SCHIRI und ich haben einen Text über den Verlauf der Entwicklung des Systems geschrieben. Die (identischen) Texte findet ihr in:


grüße
duRiel
Inaktiv
sgraewe ClanSphere Team

Supporter
Supporter




Beiträge: 6116
# Antwort: 1 - 14.11.2009 um 19:28 Uhr
Wie schon zu SCHIRI gesagt,
find das man den text sehr flüssig lesen kann und er leicht verstädnlich ist.

Zum quellcode fällt mir direkt positiv auf das er gut durch commentiert ist.

Dickes lob an euch beide:


Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 2 - 14.11.2009 um 20:48 Uhr
Danke,

vielleicht sollten wir hier noch darauf hinweisen, dass sich das System schon im branch-svn befindet und man, um es zu benutzen, die system/core/abcode.php, system/runstartup/clansphere_abcode.php und die system/runstartup/smileys_abcode.php aktuellisieren/hinzufügen muss.

In den nächsten Tagen werde ich auch mein Abcode-Addon auf das neue System umstellen.


------------------
www.laszlokorte.de

Zuletzt editiert von SCHIRI ClanSphere Team am 14.11.2009 um 20:48 Uhr (1x Editiert)
Inaktiv
|
jokey ClanSphere Team


Try to beat me




Herkunft: Hamburg
Beiträge: 184
# Antwort: 3 - 15.11.2009 um 00:29 Uhr
Also nur das ich die Architektur richtig begreife... Ihr parst für jeden Tag jedesmal den gesamten Post durch? Und das optimaler Weise noch mit regex?


Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 4 - 15.11.2009 um 00:32 Uhr
Was meinst du mit "jeden Tag"?
und was mit "Und das optimaler Weise noch mit regex?"?


------------------
www.laszlokorte.de

Inaktiv
|
jokey ClanSphere Team


Try to beat me




Herkunft: Hamburg
Beiträge: 184
# Antwort: 5 - 15.11.2009 um 00:38 Uhr
Naja halt für jeden definierten bb-tag (egal ob youtube, fett, bild,...)

Meine Frage resultiert aus den Zeilen, die ich hier gefunden habe: http://gist.github.com/234605

Wenn ich jetzt alles in allem sagen wir 100 Tags definiert hab, müsste für jeden forumspost zum rendern 100x der Post geparst werden. Bei 30 Posts pro seite wären dass dann 3000 Parsings. Das wäre eine sowas von miese Performance.....


Zuletzt editiert von jokey ClanSphere Team am 15.11.2009 um 00:42 Uhr (1x Editiert)
Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 6 - 15.11.2009 um 00:54 Uhr
ach ich dachte du meintest mit Tag den Wochentag^^

Naja es gibt kaum eine andere Möglichkeit. Man kann ohne Regex ja nicht nach einem String suchen, der sich zwischen einem [b.] und eine [/b] befindet.
Die einzigen zwei Alternativen wären:
-den String an jedem BBcode-Tag zu zerhacken und auf sehr komplizierte Art und weise wieder zusammen zu setzen
-nicht Tag-Paare zu ersetzen, sondern die einzelnen Tags (also [b.] mit <b> und [/b] mit </b>), allerdings muss man sich dann auch noch manuell darum kümmern, dass jedes Tag auch wieder geschlossen wird

Man kann auch nur ein Suchmuster auf einen String zur Zeit anwenden. Wie willst du denn nach [b] und [u] gleichzeitig suchen? das geht doch rein logisch nicht, weil allein programmiertechnisch nur eine Operation zur zeit ausgeführt werden kann.

Und wie willst du das für alle Posts auf einmal machen? dann müsstest du ja erstmal alle zusammen setzen, dann den BBCode anwenden und dann wieder den String in die einzelnen Posts zerflücken. Das kannst du wenn du willst ja sogar machen, ist aber nicht Aufgabe des BBcode Systems.

Die Abarbeitung, die die 3000 Parsings zur Folge hat, ist zur Zeit auch nicht anders und ich sehe hier keine Performance-Probleme den BBcode betreffend.

Aber ich bin interessiert an einer besseren Möglichkeit, wenn du eine hast.

ps: was natürlich auch möglich ist, den BBcode vor dem schreiben in die Datenbank, statt nach dem Lesen, anzuwenden, allerdings hat das auch Nachteile, aber hat ja auch nichts mit dem BBcode-System zu tun, sondern damit wann und wie man es anwendet.


------------------
www.laszlokorte.de

Zuletzt editiert von SCHIRI ClanSphere Team am 15.11.2009 um 00:54 Uhr (1x Editiert)
Inaktiv
|
duRiel ClanSphere Team
Thread-Ersteller


Weltmeister




Herkunft: Cambridge
Beiträge: 7300
# Antwort: 7 - 15.11.2009 um 02:03 Uhr
hab noch nicht genau verstanden wie jokey es meint, aber ich lass einfach mal etwas senf ab und hoffe dass es passt:

das abcode system ist erstmal nur zur umwandlung der tags zuständig und kümmert sich gar nicht darum, wann es angewandt wird. das hängt von der implementierung ab. genauso kann man auch nach dem eintragen und editieren das abcode system anwenden und in eine parsed spalte der datenbank schreiben.

in clansphere wird es derzeit so gemacht, dass es bei jedem aufruf durchgeführt wird und das ist nicht optimal, aber das macht eigentlich fast nichts aus.
aber hier gehts vorrangig um das system an sich, und das ist über zweifel an der implementierung erhaben.


danke equal


Inaktiv
|
jokey ClanSphere Team


Try to beat me




Herkunft: Hamburg
Beiträge: 184
# Antwort: 8 - 16.11.2009 um 00:35 Uhr
15.11.2009 um 00:54 Uhr - SCHIRI:
Naja es gibt kaum eine andere Möglichkeit. Man kann ohne Regex ja nicht nach einem String suchen, der sich zwischen einem [b.] und eine [/b] befindet.


Oh doch
Der Trick ist den String einmal Zeichen für Zeichen einzulesen. Dabei machst du einfach ne liste mit 4-5 Objekttypen auf, so dass dann dort so etwas rauskommt wie

 
1.
2.
3.
4.
5.
1. / 2. / ... 
 
// Beispieltext: [b]Das ist [kursiv]witziger[/kursiv] Text[/b] mit [url=http://blahblub.de]link[/url]

// Tag(name='b'), Text(content='Das ist '), Tag(name='kursiv'), Text(content='witziger'), TagEnd(name='kursiv'), Text(content=' Text'), (TagEnd name='b'), Tag(name='url', content='http://blahblub.de'), Text(content='link'), (TagEnd name='url')


Danach kannst du dann extrem entspannt mit den Daten arbeiten, da du nur einen einfachen vergleich machen musst, ob du für diesen oder jenen Tag ne BB-Instanz hast, die den dann interpretieren kann. Die Endtags kannst du benutzen, um eventuelle Längenfehler zu finden / dir zu merken, welche Tags du noch schließen musst (mit </div> oderso).

15.11.2009 um 00:54 Uhr - SCHIRI
Und wie willst du das für alle Posts auf einmal machen? dann müsstest du ja erstmal alle zusammen setzen, dann den BBCode anwenden und dann wieder den String in die einzelnen Posts zerflücken. Das kannst du wenn du willst ja sogar machen, ist aber nicht Aufgabe des BBcode Systems.

Die Abarbeitung, die die 3000 Parsings zur Folge hat, ist zur Zeit auch nicht anders und ich sehe hier keine Performance-Probleme den BBcode betreffend.


Das ist wohl war, ich habe die Menge nur benutzt, um zu verdeutlichen, was bei mir im Forum passiert. Ich habe mich bis zu diesem Tage gewundert, warum meine Seite auf einem P4 2,4Ghz nur ganze 7 Seiten die Sekunde produzieren konnte. Erste Profilings ergaben damals ähnliches fürs Templatesystem, daher hab ich mal mit HaJo gesprochen und ihn auf ein Projekt namens Twig gebracht, was mit dieser unsäglichen Praxis aufräumt.
Wenn nun das BBCode System genauso arbeitet, wundert es mich allerdings nicht mehr.

15.11.2009 um 00:54 Uhr - SCHIRI
ps: was natürlich auch möglich ist, den BBcode vor dem schreiben in die Datenbank, statt nach dem Lesen, anzuwenden, allerdings hat das auch Nachteile, aber hat ja auch nichts mit dem BBcode-System zu tun, sondern damit wann und wie man es anwendet.


Da sind wir uns einig, das sollte fürs Rendern gemacht werden. Einzig könnte man sich überlegen, eine geparste Version eines Posts in einem (Mem)cache zwischenzuspeichern, da ein Post garantiert mehr als einmal angezeigt wird und somit ein Cache Vorteile bringt.

EDIT:
Natürlich kann jedes beliebige System eingesetzt oder gebaut werden, ich will hier nicht ein bestimmtes protegieren. Nur ist es ein System, was a) oben genanntes System verwendet (wie im übrigen auch jeder anständig entwickelte XML Parser) und dann b) die geparsten dateien wieder als fertigen php code auf die platte schreibt.


Zuletzt editiert von jokey ClanSphere Team am 16.11.2009 um 00:48 Uhr (1x Editiert)
Inaktiv
|
SCHIRI ClanSphere Team


Weltmeister



Herkunft: Hamburg
Beiträge: 5299
# Antwort: 9 - 16.11.2009 um 00:57 Uhr
ok hast mich überzeugt. danke für das kritische feedback.

Ich geh zwar davon aus, dass wir die Klasse vorerst nicht direkt wieder ändern werden, aber freut mich, direkt fürs nächste mal was gutes gelernt zu haben

Hast damit auch direkt die Frage geklärt, die mich seit einiger Zeit beschäftigt hat, wie man es am besten löst, einen "bbcodeten" Text zwischen einem öffnenden und schlissendem Tag zu zerhacken^^


------------------
www.laszlokorte.de

Inaktiv
|
jokey ClanSphere Team


Try to beat me




Herkunft: Hamburg
Beiträge: 184
# Antwort: 10 - 17.11.2009 um 21:46 Uhr
Bitte bitte

Meine Sorge begann eigentlich, als ich einen Googlebot-DoS hatte und mich wunderte, welche Seite das wohl ausgelöst hat. Als ich sah, dass es meine Clanseite war, machte es mich dann doch etwas betroffen, deswegen hier die Vorschläge

Gruß Jokey


Inaktiv
|
Antworten: 10
Seite [1]


Sie müssen sich registrieren, um zu antworten.


ClanSphere Project - Mailus - Imprint - Disclaimer - Scriptinfo