Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [php] BBCode Parser (https://www.delphipraxis.net/84273-%5Bphp%5D-bbcode-parser.html)

alcaeus 11. Mär 2007 21:17

Re: [php] BBCode Parser
 
@Christian: Unter anderem das mit der Aenderung. Nehmen wir aber folgenden BBCode:
Code:
[url]www.foobar.net[/url]
Der muss ja ersetzt werden in
Code:
[url="http://www.foobar.net"]www.foobar.net[/url]
Jetzt erklaer mir wie du das ohne RegExp anstellen willst ;)

BTW, nicht alle BBCodes werden durch FirstPass gejagt. Im phpBB bekommen URL-BBCodes keine UID verpasst, und muessen deshalb im Second-Pass validiert werden. Dies macht eine Anpassung des URL-BBCodes ohne Neuparsen der Beitraege moeglich :)

Greetz
alcaeus

yankee 11. Mär 2007 21:19

Re: [php] BBCode Parser
 
Zitat:

Zitat von alcaeus
Jetzt erklaer mir wie du das ohne RegExp anstellen willst ;)

Downloade meinen Parser und schau es dir an...

Christian S. 11. Mär 2007 21:21

Re: [php] BBCode Parser
 
Zitat:

Zitat von alcaeus
Code:
[url="http://www.foobar.net"]www.foobar.net[/url]
Jetzt erklaer mir wie du das ohne RegExp anstellen willst ;)

Habe ich behauptet, dass es geht? Aber ich könnte den RegExp deutlich einfacher gestalten und damit auch performanter, wenn eine UID in den URL-Tags steckte.

Zitat:

Zitat von alcaeus
BTW, nicht alle BBCodes werden durch FirstPass gejagt. Im phpBB bekommen URL-BBCodes keine UID verpasst, und muessen deshalb im Second-Pass validiert werden. Dies macht eine Anpassung des URL-BBCodes ohne Neuparsen der Beitraege moeglich :)

Das ist genau das, worum es gerade geht. :gruebel:

//edit: grmpf, roter Kasten?
Hm, naja, das ist nicht schön, aber es geht in der Tat. Wie sähe das bei Tags der Form
Code:
[url=http://www.foo.de]Bar[/url]
aus?

yankee 12. Mär 2007 05:56

Re: [php] BBCode Parser
 
Zitat:

Zitat von Christian S.
//edit: grmpf, roter Kasten?
Hm, naja, das ist nicht schön, aber es geht in der Tat. Wie sähe das bei Tags der Form
Code:
[url=http://www.foo.de]Bar[/url]
aus?

Hä? Was für'n roter Kasten?
Mein bbcode-Parser ist jedenfalls in der Lage dieses Konstrukt ohne regex im secondPass auszuwerten.

EDIT: Das gewisse Regexe im secondPass Veränderungen am Code zulassen, lasse ich als Argument nicht zu.
str_replace ist sehr viel schneller als preg_replace und im Zweifelsfall wäre es besser ein kleines update-script zu schreiben, welches kurz alle Beiträge neu parst. Schliesslich ist das eine einmalige Aktion, da ist es nicht so wichtig, wenn es etwas dauert. Beim Anzeigen der Beiträge, was bei grossen Foren mehrmals pro Sekunde passiert, kann es durchaus darauf ankommen.

Christian S. 12. Mär 2007 08:58

Re: [php] BBCode Parser
 
Zitat:

Zitat von yankee
Zitat:

Zitat von Christian S.
//edit: grmpf, roter Kasten?
Hm, naja, das ist nicht schön, aber es geht in der Tat. Wie sähe das bei Tags der Form
Code:
[url=http://www.foo.de]Bar[/url]
aus?

Hä? Was für'n roter Kasten?

Der, der mir eigentlich sagen sollte, dass Du geantwortet hast, während ich meinen Beitrag verfasste.

Zitat:

Zitat von yankee
Mein bbcode-Parser ist jedenfalls in der Lage dieses Konstrukt ohne regex im secondPass auszuwerten.

Japp, richtig.

Zitat:

Zitat von yankee
EDIT: Das gewisse Regexe im secondPass Veränderungen am Code zulassen, lasse ich als Argument nicht zu.

Ich bin so frech und beuge mich nicht Deiner Entsscheidung. :stupid:

Zitat:

Zitat von yankee
str_replace ist sehr viel schneller als preg_replace und im Zweifelsfall wäre es besser ein kleines update-script zu schreiben, welches kurz alle Beiträge neu parst.

Kurz? Du darfst das gerne mal bei einer Datenbank von der Größe der DP oder EE machen, dann wirst Du sehen, dass dein "kurz" mal locker mehrere Stunden sind. Darauf kann ich gerne verzichten, nur damit zwei Zeichen weniger in der URL erlaubt sind.

alcaeus 12. Mär 2007 09:29

Re: [php] BBCode Parser
 
Moin,

mal kurz unabhaengig von der Diskussion: ich hab mir im Laufe der letzten Woche deine Engine mal kurz durchgeguckt. Was mir dabei fehlen, sind folgende Dinge:
  • Ueberpruefung auf korrektes Parsing der Tags
  • Moeglichkeit bestimmte Tag-Verschachtelungen zu verbieten (z.B. sind in code alle Tags verboten, in b macht es keinen Sinn, nochmal b zu haben, usw. Praktisch dient es u.a. dazu, die Vermischung von Block-Level- und Inline-Tags zu verbieten

Greetz
alcaeus

yankee 12. Mär 2007 13:15

Re: [php] BBCode Parser
 
Zitat:

Zitat von Christian S.
Kurz? Du darfst das gerne mal bei einer Datenbank von der Größe der DP oder EE machen, dann wirst Du sehen, dass dein "kurz" mal locker mehrere Stunden sind. Darauf kann ich gerne verzichten, nur damit zwei Zeichen weniger in der URL erlaubt sind.

Ja... kurz...
Zum Zeitpunkt der Erstellung meines Beitrages gab es in der DB 611.718 Beiträge.
Mein Parser braucht für den Beispiel text für firstPass gaaanz grob ca. 0,7ms und reverseFirstPass 2ms. (Athlon 64 3700+, 2 GB RAM) Sagen wir mal, dass der Durschnittliche Beitrag doppelt solang ist wie mein Beitrag, dann dauert first-Pass+reverseFirstPass ca. 5ms. 5msx611.718 also ca. 50 Minuten.
Also weniger als 1 Stunde ;-).

Und: Je grösser das Forum, je mehr Leistung verbrauchen diese Prozesse die ganze Zeit über.. Dann verbrauche ich zwar nur 5ms, aber wenn 200 Beiträge pro Sekunde abgerufen werden, ist der CPU zu 100% ausgelastet...

Und wie oft kommt es bitte vor, dass du dein bbcode-parser verändert? Dann lässt du lieber das Update-script auf niedriger nice-Stufe im Hintergrund laufen, und produzierst so die gleiche Last, wie wenn du den Beitrag immer neu generieren würdest, aber nur für eine Stunde :-).
Oder du speicherst die Version deines bbcode-Parser immer mit und beim anzeigen eines Beitrags merkst du, dass die Version outdated ist und regenierierst den Beitrag...

Es gibt viele Möglichkeiten, aber sobald die DP bei 15 Beiträgen pro Seite (also 75ms Generationszeit) 40K Seitenaufrufe hatte hast du die Zeit für das Updatescript schon wieder raus :-).

@alcaeus: Ich schau mal, ob ich nicht Zeit finde das einzubauen :-).

Christian S. 12. Mär 2007 14:29

Re: [php] BBCode Parser
 
Zitat:

Zitat von yankee
Ja... kurz...
Zum Zeitpunkt der Erstellung meines Beitrages gab es in der DB 611.718 Beiträge.
Mein Parser braucht für den Beispiel text für firstPass gaaanz grob ca. 0,7ms und reverseFirstPass 2ms. (Athlon 64 3700+, 2 GB RAM) Sagen wir mal, dass der Durschnittliche Beitrag doppelt solang ist wie mein Beitrag, dann dauert first-Pass+reverseFirstPass ca. 5ms. 5msx611.718 also ca. 50 Minuten.
Also weniger als 1 Stunde ;-).

Ich kann Dir als derjenige, der für die Foren-Software der Entwickler-Ecke zusätndig ist, versichern, dass diese Schätzung bei weitem nicht stimmt. Zum einen hast Du selten einen Server mit dieser Leistung. Außerdem musst Du auch noch die Datenbankzugriffe mit einbeziehen, die ebenfalls Zeit in Anspruch nehmen werden.

Zitat:

Zitat von yankee
Und: Je grösser das Forum, je mehr Leistung verbrauchen diese Prozesse die ganze Zeit über.. Dann verbrauche ich zwar nur 5ms, aber wenn 200 Beiträge pro Sekunde abgerufen werden, ist der CPU zu 100% ausgelastet...

Aha. Die ganzen Server, die mit phpBB arbeiten, müssten also mit 100% ausgelastet sein? Interessant.

Zitat:

Zitat von yankee
Und wie oft kommt es bitte vor, dass du dein bbcode-parser verändert?

Wie oft haben die Leuts von phpBB an den gültigen Zeichen für URLs was geändert?

Zitat:

Zitat von yankee
Dann lässt du lieber das Update-script auf niedriger nice-Stufe im Hintergrund laufen, und produzierst so die gleiche Last, wie wenn du den Beitrag immer neu generieren würdest, aber nur für eine Stunde :-).

Wie gesagt, die Schätzung ist falsch. Und ich führe zumindest in der EE solche Aktionen nicht aus, während das Forum online ist.

Ich denke, wir werden da zu keinem "richtig" oder "falsch" kommen. Es ist alles eine Frage, wie man verschiedene Aspekte gegeneinander aufwiegt, und das tun auf Grund unterschiedlicher Erfahrungen halt anders.

martinschroeder 12. Mär 2007 17:50

Re: [php] BBCode Parser
 
Na das sind ja mal reichhaltige Antworten.
In der Zwischenzeit hab auch ich mir mal den bbcode-parser von phpBB angeguckt und festgestellt, dass der genauso arbeitet wie dein Script. Sehr genial :-D
(Sry, dass ich mich jetzt nicht mit euch über Serverlast streite ;-) )

himitsu 6. Mai 2007 17:59

Re: [php] BBCode Parser
 
Bin selber noch auf der Suche nach sowas.

Und speziell sowas wär mir da wichtig:
Zitat:

Zitat von alcaeus
* Moeglichkeit bestimmte Tag-Verschachtelungen zu verbieten (z.B. sind in code alle Tags verboten, in b macht es keinen Sinn, nochmal b zu haben, usw. Praktisch dient es u.a. dazu, die Vermischung von Block-Level- und Inline-Tags zu verbieten

Wenn dann noch ein Filter für HTML-Codes und eventuell noch was für Smilies gleich mit drin wären ... um so besser ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:35 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz