CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
09.03.2009, 00:17:15
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Zitat:
Zitat von agent47
probier es aus, das array erstellen kann man vernachlässigen das geht so schnell da wird sich nix bemerkbar machen, aber wenn du 50x preg_replace aufrufst oder einen preg_replace mit nem array von 50 werten fütterst macht sich das schon bemerkbar
|
Doch macht sich sehr wohl bemerkbar, denn beim Benchmark füllt der die Variablen bei jedem Schleifendurchlauf. Schau Dir die Benchmarks an, laut denen sind zwei Arrays mit jeweils 10 Werten langsamer als 10x preg_replace und das kann nur an der Definition der Variablen liegen. Ich mach nachher mal ein Benchmark dazu.
Was genau bewirkt eigentlich das "?:" in Deinem Beispiel?
Geändert von mgutt (09.03.2009 um 00:21:11 Uhr)
|
09.03.2009, 01:27:56
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Hier die Ergebnisse bei jeweils 10.000 Ausführungen. Der Schnitt ergibt sich aus 100 Runden:
PHP-Code:
$search = array('#et#', '#at#', '#it#');
$replace = array('te', 'ta', 'ti');
$text = preg_replace($search, $replace, $text);
Schnitt: 0.35486629962918
PHP-Code:
$text = preg_replace('#et#', 'te', $text);
$text = preg_replace('#at#', 'ta', $text);
$text = preg_replace('#it#', 'ti', $text);
Schnitt: 0.37165603160861
PHP-Code:
$text = preg_replace('#it#', 'ti', preg_replace('#at#', 'ta', preg_replace('#et#', 'te', $text)));
Schnitt: 0.3565454697609
PHP-Code:
$text = preg_replace(array('#et#', '#at#', '#it#'), array('te', 'ta', 'ti'), $text);
Schnitt: 0.31343926429748
Wie ich erwartet habe, merkt man sehr wohl einen Unterschied. Immerhin 13% schneller.
Das nächste Benchmark wg. Deinem Vorschlag das bei URLs aufzuteilen und meiner Idee, dass in Klammern zu unterscheiden, lasse ich gleich folgen.
Geändert von mgutt (09.03.2009 um 02:07:26 Uhr)
|
09.03.2009, 02:02:39
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Hier die Ergebnisse bei jeweils 1.000 Ausführungen. Der Schnitt ergibt sich aus 100 Runden (mein Originalcode):
PHP-Code:
$text = preg_replace(array('#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;|:=,?@\[\]+]*)#is', '#(^|[\n ])(www\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is'), array('\\1<a href="\\2" target="_blank">\\2</a>', '\\1<a href="http://\\2" target="_blank">\\2</a>'), $text);
Schnitt: 1.6178145432473
PHP-Code:
$text = preg_replace('#(^|[\n ])(([\w]+?://(www\.))|([\w]+?://)|(www\.))([\w\#$%&~/.\-;|:=,?@\[\]+]*)#is', '\\1<a href="http://\\4\\6\\7" target="_blank">\\2\\7</a>', $text);
Schnitt: 1.2010276722907
Variante 2 ist 35% schneller. Ein nicht zu vernachlässigender Vorteil also.
Hier der Text, den ich für dieses Benchmark herangezogen habe:
PHP-Code:
$text = "http://www.example.com/index.html Lorem ipsum dolor www.example.com sit amet, consectetuer
sadipscing elitr, http://www.example.com/index.html sed diam nonumy eirmod tempor invidunt ut labore
et http://www.example.com/index.html dolore magna aliquyam erat, sed diam www.example.com voluptua.
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, www.example.com
no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et http://www.example.com/index.html justo duo www.example.com
dolores et ea rebum. http://www.example.com/index.html Stet clita kasd gubergren, no sea takimata
sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit www.example.com amet, consetetur
http://www.example.com/index.html sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea
rebum. Stet clita kasd gubergren, no sea takimata www.example.com sanctus est Lorem
http://www.example.com/index.html ipsum dolor sit amet. Duis autem vel http://www.example.com/index.html
eum iriure dolor in hendrerit www.example.com in vulputate velit esse http://www.example.com/index.html
molestie consequat, http://www.example.com/index.html vel illum dolore eu feugiat nulla facilisis
http://www.example.com/index.html at vero eros www.example.com et accumsan et iusto odio dignissim qui
blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
http://www.example.com/index.html dolore magna aliquam www.example.com erat volutpat. Ut wisi enim ad
minim http://www.example.com/index.html veniam, quis nostrud exerci tation
http://www.example.com/index.html ullamcorper www.example.com suscipit lobortis nisl
http://www.example.com/index.html ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor
in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at
vero eros et accumsan et iusto odio dignissim qui www.example.com blandit praesent luptatum
www.example.com zzril delenit augue duis dolore te feugait nulla facilisi.
http://www.example.com/index.html";
Geändert von mgutt (09.03.2009 um 02:03:00 Uhr)
|
09.03.2009, 08:11:28
|
|
Anfänger
|
|
Registriert seit: Nov 2008
Alter: 35
Beiträge: 106
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Ich hab dich wohl bissel falsch verstanden, klar ist ein einzelner ausdruck häufig schneller als viele verschiedene, das liegt an der art wie sie in php verarbeitet werden, aber wie man sieht is es schneller mit arrays als einzelne funktionen aufzurufen.
Zitat:
Was genau bewirkt eigentlich das "?:" in Deinem Beispiel?
|
das sind nicht einfangende Klammern, also klammern die nur zur gruppierung dienen. Bei einem preg_match würde eine sloche klammer (?: ) keinen eintrag im array der treffer erzeugen.
|
09.03.2009, 14:47:10
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Zitat:
Zitat von agent47
Ich hab dich wohl bissel falsch verstanden, klar ist ein einzelner ausdruck häufig schneller als viele verschiedene, das liegt an der art wie sie in php verarbeitet werden, aber wie man sieht is es schneller mit arrays als einzelne funktionen aufzurufen.
|
Ja aber auch nur, wenn Du das Array nicht vorher in eine Variable gepackt hast. Siehe beim 1. Benchmark Test 1 und Test 4.
Sowas dachte ich mir schon. Ich hatte letztens was mit <, > und = ausprobiert, aber es irgendwie nicht verstanden. Also : ist dafür da, damit es nie übernommen wird?
Wie genau kann man dann <, > und = erklären? Die englische Anleitung verstehe ich da ehrlich gesagt nicht.
Und dann wieder die heilige Frage. Bringts was, die Übergabe zu vermeiden?
|
09.03.2009, 15:49:31
|
|
Anfänger
|
|
Registriert seit: Nov 2008
Alter: 35
Beiträge: 106
|
|
AW: Regex Bedingung kann nicht erfüllt werden
die neicht einfangenden klammern sind (?: ) also (?: leitet das ein,
die Klammern mit <, > und = sind Look-Around anweisungen die zum erkennen einer position gedacht sind.
|
09.03.2009, 16:23:59
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Damit hast Du mir jetzt geholfen :P
Was soll Look-Around heißen. Im Englischen steht Assertion, also "Behauptung". Ist das sowas wie eine Bedingungen, also "WENN dann tu das.."?
Ich verstehe nur nicht, wie das dann größer oder kleiner als sein kann :?
|
09.03.2009, 16:45:45
|
|
Anfänger
|
|
Registriert seit: Nov 2008
Alter: 35
Beiträge: 106
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Geändert von agent47 (09.03.2009 um 16:48:24 Uhr)
|
09.03.2009, 17:05:24
|
Anfänger
|
|
Registriert seit: May 2008
Beiträge: 65
|
|
AW: Regex Bedingung kann nicht erfüllt werden
Zitat:
Zitat von agent47
|
Wunderbar. Gleich mal in die Favoriten gepackt :)
Heute Nacht, bei geringer Last, mache ich dann noch ein Benchmark, ob das Ausschließen von bestimmten Ergebnisklammern Sinn macht und melde mich dann noch mal zurück.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:40:43 Uhr.
|