Zurück   klamm-Forum > Virtual World > Programmierung

Antwort
 
Themen-Optionen Ansicht
Alt 19.10.2006, 09:49:59   #1 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard Perl vs. PHP

Hi,

ich habe das Problem, dass ich ein ca. 12-15MB großes Textfile aufbereitet auf einer Webseite darstellen muss.
Mit PHP war das relativ fix erledigt (weil ich halt schon was passendes dahatte), allerdings ist das bei der derzeitigen if-Bedingung und der Größe des Textfiles etwas lahm.

Jetzt wollte ich mal wissen, wenn ich es über ein CGI und somit über Perl mache, ob es da prinzipiell schneller werden dürfte.

anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline   Mit Zitat antworten
Alt 19.10.2006, 16:35:37   #2 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

fährt Auto A schneller als Auto B ?

also, wenn du uns den Code nicht zeigst, kann man dir auch nicht sagen, ob vllt schon deine Umsetzung der Idee so resourcenlastig ist.
Da PHP aber ein Cache-Limit um die 12-15mb hat, würde ich nunmal zu Perl raten, denn ich meine dies gäbe es da nicht. Aber man könnte ja auch nur Teile aus dem File auslesen wollen, ohne genaue Beschreibung und Code kann man dir da nicht helfen.
Und bitte stelle keine Frage ob PHP oder Perl besser ist, denn das ist ein Glaubenskrieg
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Alt 19.10.2006, 17:37:42   #3 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard

Zitat:
Zitat von ice-breaker Beitrag anzeigen
also, wenn du uns den Code nicht zeigst, kann man dir auch nicht sagen, ob vllt schon deine Umsetzung der Idee so resourcenlastig ist.
Mal grob hingerotzt. Eigentlich sieht das if sogar noch perverser aus. Hatte schon überlegt, ob ich alles was mit oder dort verknüpft ist immer als elseif mache.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
$fp1 fopen("$fp""r");
while(
$line=fgets($fp1,1024))
{
  
$array explode(",",$line);

  if ( ( (
$datensatz['mandant'] == 'MCH') && ( ($array['11'] == "MCH") || ($array['11'] == "STGW") ) ) || ($array['2'] == "Unknown") )
  {
     echo 
"<tr><td>$array[1]</td><td>$array[2]</td><td>$array[11]</td><td>$array[5]</td><td>$array[6]$array[7]</td></td></tr>\n";
  }
  else
  {
    continue;
  }
}
fclose($fp1); 
anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline Threadstarter   Mit Zitat antworten
Alt 20.10.2006, 14:04:49   #4 (permalink)
flaschenkind
Erfahrener Benutzer

ID: 118459
Lose senden

Reg: 20.04.2006
Beiträge: 4.530
Standard

Wäre bei soetwas nicht file() besser?
flaschenkind ist offline   Mit Zitat antworten
Alt 20.10.2006, 14:25:05   #5 (permalink)
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard

Das wäre ja noch ressourcenfressender. Mit der momentanen Variante wird immer nur eine Zeile im Speicher gehalten. Mittels file() würden alle Zeilen im Speicher geladen sein...
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse
tleilax ist offline   Mit Zitat antworten
Alt 20.10.2006, 14:53:00   #6 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard

Zitat:
Zitat von flaschenkind Beitrag anzeigen
Wäre bei soetwas nicht file() besser?
Derzeit hab ich kleine Dateien mit ca. 8-10 MB. Da bereitet es mir schon Bauchschmerzen, die mit file() komplett in ein Array zu lesen. Die Dateien werden allerdings wohl in absehbarer Zeit so 3-4x so groß. Da mach ich das doch lieber zeilenweise.

Was mich halt noch interessiert, ob es schneller ist, wenn ich eine Abfrage der Form:
if (
(Bed1 && (Bed2 || Bed3)) ||
(Bed.4 && (Bed.5 || Bed6)) ||
(Bed7)
)
(habs mal farbig gemacht, damit man sieht, was zusammengehört)
genauso schnell ist, wie ein
if ( Bed1 && (Bed2 || Bed3))
elseif ( Bed4 && (Bed5 || Bed6))
elseif (Bed7)

anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline Threadstarter   Mit Zitat antworten
Alt 20.10.2006, 15:17:09   #7 (permalink)
tleilax
be forever curious
Benutzerbild von tleilax

ID: 27936
Lose senden

Reg: 20.04.2006
Beiträge: 2.428
Standard

Die Geschwindigkeit dabei hängt stark davon ab, wie PHP die bool'schen Ausdrücke auswertet. Wenn von links nach rechts und die anderen Teilausdrücke nicht mehr ausgewertet werden, wenn der erste true ist, dürfte es keinen Unterschied machen, ob Du einen Ausdruck nimmst oder viele per if/elseif.

Ich hab grad mal getestet, wie PHP sich diesbezüglich verhält:
PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
<?php
  
function foo($bar) {
    echo 
'foo';
    return 
true;
  }
  if (
foo(1) or foo(2)) {
  }
?>
Ergebnis: Es wird 1x foo ausgegeben, was bedeutet, dass PHP die Bearbeitung des Ausdrucks abgebrochen hat, nachdem die erste Teilbedingung wahr war (was ja durch das or dazu führt, dass die gesamte Bedingung wahr wird).

Nun könntest Du das Skript insofern optimieren, dass Du die Bedingung, die am wahrscheinlichsten wahr wird, an den Anfang stellst.

Eine weitere Optimierung wäre evtl ein eigenes Buffern, so dass Du nicht zeilenweise aber auch nicht komplett einliest. Ich weiss nun nicht, wie sich PHP da verhält, aber wenn Du immer nur kleine Stückchen (die evtl sogar noch kleiner als ein Sektor auf der Platte sind) einliest und PHP das nicht selbst buffert, bedeutet das immer Zeitverlust. Würdest Du bspw 8k/16k/32k-Blöcke einlesen, dürfte das Einlesen auf jeden Fall schneller werden. Im gleichen Masse würde aber auch das Skript komplexer. In der Doku hab ich leider nur was über den Writebuffer gefunden, nicht aber über den Readbuffer.

Eine letzte kleine Optimierung am Rande:

Falls Dein Skript wirklich derart aufgebaut ist, lass das else continue; einfach weg. Wozu den Rest der Schleife überspringen, wenn da eh nix mehr passiert...
.lange tage und angenehme nächte, tlx
:.whatthemovie.com (Screenshots raten) | PHP ExportForce-Klasse
tleilax ist offline   Mit Zitat antworten
Alt 21.10.2006, 03:55:37   #8 (permalink)
veers
.

ID: 52181
Lose senden

Reg: 27.04.2006
Beiträge: 500
Standard

Wenn du scharf auf die Geschwindigkeit bist, warum nicht in C? Kannst Problemlos als CGI einbinden und wird wohl 2-5x schneller sein als PHP. Aber werd das morgen evtl mal Testen. Nimmt mich Wunder welche Sprache hier wie schnell ist. Und zum alles auf einmal Lesen, ich bin mir nicht sicher ob das wirklich so dumm ist. Es braucht zwar kurzzeitig mehr Memory, dürfte aber schneller sein. Und wenn man nun in betracht zieht was 128mb Memory und was 1ne Stunde länger Optimieren kosten
Lanshark - Ein P2P Filesharing-Tool für LANs
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
veers ist offline   Mit Zitat antworten
Alt 21.10.2006, 09:35:14   #9 (permalink)
strolch00
redraft.de

ID: 155297
Lose senden

strolch00 eine Nachricht über ICQ schicken
Reg: 21.04.2006
Beiträge: 1.684
Standard

Hi
hier deine If Frage:
http://benchmark.nophia.de/benchmark...agen-b-20.html
und für deine File verarbeitung noch etwas:
http://benchmark.nophia.de/benchmark...ionen-k-3.html

sehr interessant und für dich das richtige wenn du bei PHP verarbeitung bleiben willst.
strolch00 ist offline   Mit Zitat antworten
Alt 21.10.2006, 21:13:55   #10 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard

Zitat:
Zitat von veers Beitrag anzeigen
warum nicht in C? Kannst Problemlos als CGI einbinden und wird wohl 2-5x schneller sein als PHP.
Wenn ich dem Admin sage, der soll mir für die CGI-Schnittstelle außer Perl auch noch C zur Verfügung stellen, dann erschlägt der michl.

Zitat:
Zitat von strolch00 Beitrag anzeigen
die if- Frage passt zwar net ganz zu meinem Fall, aber der Test mit den Dateioperationen ist schonmal interessant.
Wobei ich derzeit doch schon fast überzeugt bin, das Ganze nach Perl umzuwursten *grusel* Wobei ich da so spontan gar net weiß, wie man dort lustig die ganzen Sessions mitnimmt.

anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline Threadstarter   Mit Zitat antworten
Alt 21.10.2006, 22:45:58   #11 (permalink)
ZeroCCC
wasn das?
Benutzerbild von ZeroCCC

ID: 46810
Lose senden

ZeroCCC eine Nachricht über ICQ schicken
Reg: 10.05.2006
Beiträge: 1.734
Standard

sicher dass das an der bedingung leigt warum das so lahm ist? hast du das ganze mal ohne echo durchlaufen lassen?
 
ZeroCCC ist offline   Mit Zitat antworten
Alt 24.10.2006, 17:09:37   #12 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard

Zitat:
Zitat von ZeroCCC Beitrag anzeigen
sicher dass das an der bedingung leigt warum das so lahm ist? hast du das ganze mal ohne echo durchlaufen lassen?
Ohne echo, nur mit Hochzählen einer Variable dauerts vielleicht 2-3 Sekunden.
Im Firefox gehts mit echo auch schneller, weil der sofort anfängt, die Tabelle anzuzeigen, was der IE leider net macht.

Werde es trotz allem mal mit file_get_contents() testen, was dort passiert.

anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline Threadstarter   Mit Zitat antworten
Alt 25.10.2006, 14:19:57   #13 (permalink)
bartman
Alter Benutzer

ID: 10149
Lose senden

bartman eine Nachricht über ICQ schicken
Reg: 07.05.2006
Beiträge: 501
Standard

Zitat:
Zitat von anddie Beitrag anzeigen
Wenn ich dem Admin sage, der soll mir für die CGI-Schnittstelle außer Perl auch noch C zur Verfügung stellen, dann erschlägt der michl.
Naja, wenn du wirklich CGI aktiviert hast (nicht mod_perl oder sowas) kann deinem Admin ziemlich egal sein was fuer ein Binary da liegt. CGI bedeutet einfach nur, dass der Webserver die Datei ausfuert - quasi ein exec() mit ein paar Umgebungsvariablen.
 
bartman ist offline   Mit Zitat antworten
Alt 25.10.2006, 15:46:22   #14 (permalink)
ice-breaker
return void
Benutzerbild von ice-breaker

ID: 93995
Lose senden

ice-breaker eine Nachricht über ICQ schicken
Reg: 27.04.2006
Beiträge: 6.271
Standard

Zitat:
Zitat von bartman Beitrag anzeigen
Naja, wenn du wirklich CGI aktiviert hast (nicht mod_perl oder sowas) kann deinem Admin ziemlich egal sein was fuer ein Binary da liegt. CGI bedeutet einfach nur, dass der Webserver die Datei ausfuert - quasi ein exec() mit ein paar Umgebungsvariablen.
nen mir nen Webhoster, der dir volle CGI-Unterstützung aktiviert, wäre ja schön blöd, also ich hätte da einige Ideen was man anstellen könnte (rainbow-Tables etc.)
"Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

www.internet-dsl-flatrate.de
ice-breaker ist offline   Mit Zitat antworten
Alt 25.10.2006, 19:57:54   #15 (permalink)
anddie
Erfahrener Benutzer
Benutzerbild von anddie

ID: 171
Lose senden

Reg: 03.05.2006
Beiträge: 2.017
Standard

Zitat:
Zitat von bartman Beitrag anzeigen
Naja, wenn du wirklich CGI aktiviert hast (nicht mod_perl oder sowas) kann deinem Admin ziemlich egal sein was fuer ein Binary da liegt.
Hmmm, wie krieg ich das denn raus?

Zitat:
Zitat von ice-breaker Beitrag anzeigen
nen mir nen Webhoster, der dir volle CGI-Unterstützung aktiviert, wäre ja schön blöd, also ich hätte da einige Ideen was man anstellen könnte (rainbow-Tables etc.)
Da das ein Firmenserver ist, der auch nicht im Internet hängt, ist das wurscht. Im Endeffekt isses mir eh wurscht, hauptsache es funktioniert.

anddie
Hof Birkenkamp - Alpakawanderung in Mecklenburg-Vorpommern
anddie ist offline Threadstarter   Mit Zitat antworten
Antwort

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
awk, sed, perl? Hiteri Programmierung 1 14.05.2008 16:00:01
Perl Webspace matze97 Webhosting 1 03.05.2008 13:24:34
xammp -> cgi perl Krypton Programmierung 4 08.01.2008 18:47:13
[Perl] - ip2long() und long2ip anddie Programmierung 4 23.02.2007 17:06:23
[Perl] Datenbankzugriff beenden anddie Programmierung 2 04.05.2006 16:13:53


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48:14 Uhr.