Ankündigung

Einklappen
Keine Ankündigung bisher.

Performance bei großen Switch Blöcken oder PHP5 Magics

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Performance bei großen Switch Blöcken oder PHP5 Magics

    Servus,

    ich stell mir im Moment die Frage wie performant große Switch Blöcke - mit mehr als 10 Bedingungen - sind. Ist das der Rede Wert oder doch zu vernachlässigen?

    Anlass zu diesen Gedanken gab mir meine Datums-Klasse da ich seit PHP5 die setter- u. getter Methoden liebgewonnen habe und ziemlich viel mit diesen Funktionen mache und das ganze dann natürlich über Switch Blöcke regel.

    Mich interesiert halt ob euch da in der Richtung irgendwas aufgefallen ist.

    ps: auf 10ms mehr oder weniger kommts mir nicht an nur das Problem dabei wird wahrscheinlich sein wenn mehrere Klassen diese Methoden ebenfalls verwenden dann könnte sich das evl. auf 1 Sec steigern obwohl das auch nicht gerade die Welt ist
    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

  • #2
    Genaue Zeitmessungen hab ich nie gemacht, daher kann ich zu switch-Blöcken nichts sagen. Allerdings sind if-else-if-Statements schneller, wenn sie nach der Häufigkeit des Auftretens geordnet sind.

    Kommentar


    • #3
      Ich kann mir nicht vorstellen, warum if-else-if-Blöcke geordnet schneller sein sollen als ebenfalls geordnete switch-case-Blöcke.

      Kommentar


      • #4
        Ich kann mir vorstellen das er meint das bei
        IF - ELSE die Bedingung nur einmal geprüft wird während bei einen SWITCH mit 2 CASEs die Bedingung 2 mal geprüft wird.
        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

        Kommentar


        • #5
          Zitat von HStev
          Ich kann mir vorstellen das er meint das bei
          IF - ELSE die Bedingung nur einmal geprüft wird während bei einen SWITCH mit 2 CASEs die Bedingung 2 mal geprüft wird.
          Schon mal was von break gehört?

          Kommentar


          • #6
            Schon mal das Manual gelesen?
            Die switch-Anweisung ist gleichbedeutend einer Reihe von if-Anweisungen mit dem gleichen Parameter.
            wenn ich ne SWITCH habe

            PHP-Code:
            <?php
            switch(2)
            {
            case 
            1:
            break;
            case 
            2:
            break;
            }
            ?>
            dann wird die Bedingung 2 mal geprüft ... erst auf 2==1 und dann auf 2==2 ... ich glaub nicht das die Zend-Engine das nicht linear abarbeitet

            ps: karl-150 begründe doch mal bitte was das mit break zu tun haben sollte
            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

            Kommentar


            • #7
              http://www.php.net/break

              Kommentar


              • #8
                schön nur das wird mir leider nicht bei dem Beispiel mit der Datumsklasse helfen... woher will ich vorher schon wissen welcher Parameter übergeben wird?

                karl-150 erkläre mal bitte genauer was du mir damit sagen möchtes ...ich kann mir nicht vorstellen das bei meinen Beispiel (2 Post's vorher) die Angabe eines Parameters bei break einen performanten Vorteil bringen würde.
                Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                Kommentar


                • #9
                  Zitat von HStev
                  PHP-Code:
                  <?php
                  switch(2)
                  {
                  case 
                  1:
                  break;
                  case 
                  2:
                  break;
                  }
                  ?>
                  Das ist doch Quatsch

                  PHP-Code:
                  <?php
                  if (== 1) {
                    
                  // ..
                  } else if (== 2) {
                    
                  //..
                  }
                  ?>
                  Hier wird doch auch 2x geprüft! Ich denke die geben sich nichts, nur dass switch () bei sagen wir mal ab 3-5 case's einfach besser lesbar und editierbar ist.

                  Kommentar


                  • #10
                    Bei switch hat man den Overhead der break-Anweisung. Find ich nicht sonderlich attraktiv gegenüber if. Das Argument der Lesbarkeit zieht nicht. Wer seinen Code ordentlich einrückt, findet keinen Unterschied zwischen if und case.

                    Switch kann dort attraktiv sein, wo man mehrere Übereinstimmungen zum selben Codeblock führen sollen, weil die zu vergleichenden Werte untereinander stehen, was IMO eine bessere Orientierung bietet.

                    Kommentar


                    • #11
                      Zitat von Zergling
                      Das ist doch Quatsch

                      PHP-Code:
                      <?php
                      if (== 1) {
                        
                      // ..
                      } else if (== 2) {
                        
                      //..
                      }
                      ?>
                      Hier wird doch auch 2x geprüft! Ich denke die geben sich nichts, nur dass switch () bei sagen wir mal ab 3-5 case's einfach besser lesbar und editierbar ist.
                      ich rede ja auch von


                      PHP-Code:
                      <?php
                      if (== 1) {
                        
                      // ..
                      } else {
                        
                      //..
                      }
                      ?>
                      @Saraneus eine Switch ist doch auch übersichtlicher als viele IF's
                      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                      Kommentar


                      • #12
                        Naja is ja auch egal,
                        mir gehts aber im Prinzip darum ob die Setter u. Getter in PHP5 performancelastiger sind. Das schöne daran ist man kann die Werte direkt einer Gültigkeitsprüfung unterziehen ok das konnte man vorher über entspreche Funktionen.

                        bzw. was ich eigentlich fragen möchte ob ich die Setter u. Getter weiterhin verwenden sollte oder doch lieber GET_VAR() und SET_VAR() Funktionen aus Performancegründen schreiben sollte?
                        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                        Kommentar


                        • #13
                          Zitat von HStev
                          bzw. was ich eigentlich fragen möchte ob ich die Setter u. Getter weiterhin verwenden sollte oder doch lieber GET_VAR() und SET_VAR() Funktionen aus Performancegründen schreiben sollte?
                          Mach das, was dir eleganter erscheint. Der Unterschied wäre vernachlässigbar. Ich persönlich schreibe Java-konform.

                          Kommentar


                          • #14
                            Naja durch die einzelnen SET u. GET Funktionen (für jede Eigenschaft eine extra Mehtode) würde die SWITCH wegfallen.... das mein ich damit eigentlich.
                            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                            Kommentar


                            • #15
                              Wie willst du denn bei einem Getter mit Switch arbeiten?

                              Kommentar

                              Lädt...
                              X