Antworten auf deine Fragen:
Neues Thema erstellen

PHP durch OOP Geschwindigkeitsvorteil?

MRspeed

Noch nicht viel geschrieben

Hallo Profis ;)

ich bin gerade dabei mir ein Grundgerüst für ein größeres Projekt zu bauen und nun stellt sich die Frage, ob ich meine Daten als Objekte anlege und in einem Array speicher[siehe Form1] oder einfach als Strings im Array[siehe renderF()].

Ich hab mal ganz einfach getestet was von beiden schneller ist, um dann fest zu stellen, dass zufällig einmal das und einmal das andere schneller ist, kurzum: Ergebnislos.

Wer von euch kennt sich aus, und kann mir sagen was performater ist?

Für die, die nicht wissen was ich meine, hier mein Test-Code:
PHP:
$anzahl = 10000;

class Form1{
    private $index;

    public function Form1($i){
        $this->index = $i;
    }
    public function renderForm(){
        $t = '<input type="hidden"';
        foreach ($this->index as $k => $v){
            $t .= $k.'="'.$v.'"';
        }
        $t .= " />";
        
        return $t;
    }
}

function renderF($i){
        $t = '<input type="hidden"';
        foreach ($i as $k => $v){
            $t .= $k.'="'.$v.'"';
        }
        $t .= " />";
        
        return $t;
}


function create_rand_arr(){
    $arr = array();
    for ($i = 0; $i<5;$i++){
        #$t=rand(10,99);
        $arr[(string)$i.'zzzz']='aaa'.$i.'aaa';
    }
    return $arr;
}

$time1 = 0;
$time2 = 0;
    
for ($j=0;$j<10;$j++){
    $t1 = microtime();
    #echo $t1.'<br>';
    
    $data = array();
    for ($i = 0; $i<$anzahl;$i++){
        $data[]= new Form1(create_rand_arr());
    }
    foreach ($data as $d){
        echo $d->renderForm();
    }
    
    $t2 = microtime();
    $time1 += abs($t2-$t1);
    echo '<p>Berechnungszeit Objektbasiert: '.abs($t2-$t1).' Sekunden für '.$anzahl.' input-Elemente</p>';
    
    ####################
    $t3 = microtime();
    #echo $t3.'<br>';
    
    $data2 = array();
    for ($i = 0; $i<$anzahl;$i++){
        $data2[]= renderF(create_rand_arr());
    }
    foreach ($data2 as $d){
        echo $d;
    }
    
    $t4 = microtime();
    $time2 += abs($t4-$t3);
    echo '<p>Berechnungszeit Datenbasiert: '.abs($t4-$t3).'Sekunden für '.$anzahl.' input-Elemente</p>';
}

echo 'summe oo: '.$time1.'<br>';
echo 'summe --: '.$time2;
Ich erstelle hier 10000 sinnlose input-elemente, das ganze 10 mal, auf die 2 beschriebenen Varianten und zähle die Millisekunden.

Wie gesagt, will ich gern wissen welche Variante schneller ist, die OOP-Variante ist vermutlich die elegantere.

Danke, MRspeed
 

K-Dawg

********

AW: PHP durch OOP Geschwindigkeitsvorteil?

Meiner Meinung nach fixieren sich zu viele darauf unbedingt in OOP bei PHP zu Coden.

AFAIK gibt es keine Performance Unterschiede ob OOP oder nicht in PHP. Lediglich der Code wirkt aufgeräumter und es lassen sich mit OOP abfragen und so etwas sauberer Lösen.

Ich persönlich arbeite mit OOP und nicht OOP kombiniert. Da wo sich OOP eher lohnt setze ich das ein, meist bei Aufgabe die mehrfach im Code angewendet werden, baue ich das in eine Klasse. zB Zugriff für Benutzer, DB Zugriffe usw.

Wie gesagt, ich bin der Meinung, dass es nicht immer OOP sein muss, sondern das OOP zur Unterstützung dienen soll, nicht als Fixierung und nichts anderes geht, zumal AFAIk es keine Performance Unterschiede gibt.

Greetz
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP durch OOP Geschwindigkeitsvorteil?

Theoretisch betrachtet ist ein Objekt auch nur eine Adresse im RAM, genauso wie jeder andere Datentyp. Greifst du auf eine Methode oder ein Attribut in einem Objekt zu, wird zuerst das Objekt gesucht, dass dann weiter verweist - zumindest ist das in Java so, PHP wird das nicht groß anders machen können.

Deshalb kann ich mir vorstellen, dass zumindest der Erst-Zugriff auf ein Attribut im Objekt (unbedeutend) langsamer ist, da eben mindestens einem Verweis mehr gefolgt werden muss. Danach wird vermutlich irgendein Cache die direkte Adresse halten, also sind die folgenden Zugriffe gleich denen ohne Objekt.

Unterm Strich sehe ich also - theoretisch - keinen Geschwindigkeitsvorteil. Prinzipiell kostet aber jede Abstraktionsschicht etwas Performance; am schnellsten ist praktisch der direkte Zugriff auf die Hardware (siehe Assembler), aber das ist eben auch der gefährlichste und schwierigste.

Achja, 10 Durchläufe sind bei solchen Tests sowieso nicht besonders aussagekräftig ;)


Duddle
 

MRspeed

Noch nicht viel geschrieben

AW: PHP durch OOP Geschwindigkeitsvorteil?

erstmal danke.

das Problem ist, dass 2*100.000*10 = 2Mio html-Elemente sind, und viel mehr gibt dann einen time-out Fehler, darum erstelle ich "nur" 2Mio ;)
 

saila

Moderatorle

AW: PHP durch OOP Geschwindigkeitsvorteil?

Hi,

ich arbeite ausschl. auf Basis von OOP und bei OOP ist einzig ausschlaggebend, dass man sich mit PHP und letztlich mit dessen Funktionen sehr gut auskennt. Es gibt einige Funktionen von PHP, welche man selbst ohne OOP nicht einsetzt, weil diese Funktionen zu viel Zeit und auch Resourcen verschlingen.
Gleiches gilt für OOP. Man sollte wissen, wann man was wo wie einsetzt. Ansonsten baut man sich vielmehr eine Bremse als eine schlanke performance-optimierte Anwendung.

Aber gleich wie - eine optimale auf OOP geschriebene Anwendung, wird in der Regel erst nach der 2. Optimierung in den Bereich von optimal gehoben.
 

K-Dawg

********

AW: PHP durch OOP Geschwindigkeitsvorteil?

Das ist richtig, jedoch geht es auch ohne Ausschließlich in OOP zu Coden.

Das ist was ich gemeint habe. Es gibt auch Funktionen in PHP die auch als "Function" Ressourcen schonend sind und eben kein OOP sein müssen.

Das ist alles was ich mit meinem Post gemeint hatte.

Greetz
 

saila

Moderatorle

AW: PHP durch OOP Geschwindigkeitsvorteil?

Naja, eigentl. sollte man sich an OOP halten, wenn man OOP ansetzt. Es macht keinen Sinn OOP aufzusetzen und dann irgendwelche Funktions noch rumfliegen zu lassen.
 

K-Dawg

********

AW: PHP durch OOP Geschwindigkeitsvorteil?

Jo stimme ich dir zu.

So krass tue ich das aber auch nicht, falls das so rüber kam.

Es gibt glaube ich in meine Entwicklungen ganze 5 normale Funktionen die ich anwende und diese nur für Kleinigkeiten wo eine Klasse nicht rentiert.

Meistens tue ich aber gewisse Dinge im Code direkt schreiben statt in einer Funktion oder Klasse. Sowas z.B meine ich mit, OOP muss nicht immer sein. Sollte dieser Code aber öfters vorkommen, komplexer werden usw. dann haue ich das natürlich in eine Klasse rein, wenn es sich dafür wirklich anbietet.

Ich muss zugeben, ich bin auch eher dazu geneigt mehr auf OOP zu gehen statt klassisches Prozedural. Seit ich die Prinzip von Klassen verstanden habe, habe ich auch die Vorteile erkannt, dennoch setze ich das meist erst bei Komplexere Sachen ein.

Naja, ich denke es wurde genug dazu gesagt und ich habe meinen Standpunkt nun gut erklärt. Letztendlich muss jeder für sich Entscheiden was besser einzusetzen geht bzw. wenn es um Teamaufgaben geht wie sich alle einigen (und da gebe ich zu ist OOP am nahe liegende).

Was Performance angeht, jo haben wir auch soweit geklärt.

Greetz :)
 

saila

Moderatorle

AW: PHP durch OOP Geschwindigkeitsvorteil?

Naja, dann wären diese 5 Funktionen zumindest für eine Helper-Class fällig. In der Regel hat man auch eine Helper-Class, in welcher eben jene Funktionen dann als Methoden definiert sind, die man für Kleinigkeiten benötigt.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben