Performance - str_replace

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

  • Performance - str_replace

    Moin,

    muß gestehen das ich gerade ein wenig Langeweile hab und deswegen diese Frage stelle. Ich hoffe ihr verzeit mir.

    Ich frag mich gerade ob man das:
    PHP-Code:
    $nachricht=str_replace(array("[f]","[/f]","[k]","[/k]","[u]","[/u]","[schrift=arial]","[schrift=courier new]",
    "[schrift=verdana]","[/schrift]","[groesse=klein]","[groesse=normal]","[groesse=gross]","[/groesse]",
    "[farbe=hell blau]","[farbe=blau]","[farbe=dunkel blau]","[farbe=rot]","[farbe=dunkel rot]","[farbe=orange]",
    "[farbe=hell gruen]","[farbe=gruen]","[farbe=tuerkis]","[farbe=grau]","[/farbe]","  ","   ","\t"), 
    array(
    "<b>","</b>","<i>","</i>","<u>","</u>","<span style=\"font-family : Arial;\">",
    "<span style=\"font-family : Courier New, Courier, monospace;\">","<span style=\"font-family : Verdana;\">",
    "</span>","<span style=\"font-size : 10px\">","<span style=\"font-size : 11px\">","<span style=\"font-size : 12px\">",
    "</span>","<span style=\"color : skyblue\">","<span style=\"color : blue\">","<span style=\"color : darkblue\">",
    "<span style=\"color : red\">","<span style=\"color : darkred\">","<span style=\"color : orange\">",
    "<span style=\"color : limegreen\">","<span style=\"color : green\">","<span style=\"color : teal\">",
    "<span style=\"color : silver\">","</span>","&nbsp;&nbsp;","&nbsp;&nbsp;&nbsp;","&nbsp;&nbsp;&nbsp;&nbsp;"), $nachricht); 
    noch "kürzen" (also nicht von der Länge sondern der performance) könnte.

    Würd mich freuen wenn jemand eine Idee hätte. - ...ein Ansatz reicht aus
    Grüsse,
    Sebastian


    Profil Flex Freelancer
    Twitter twitter.com/flashhilfe
    Web Flash und Flex Community

  • #2
    preg_replace() könnte müsste etwas schneller sein.
    http://de.php.net/manual/de/function.preg-replace.php

    da ist auch ein beispiel auf der seite, was deinem sehr ähnlich ist.

    PHP-Code:
    // $document should contain an HTML document.
    // This will remove HTML tags, javascript sections
    // and white space. It will also convert some
    // common HTML entities to their text equivalent.

    $search = array ("'<script[^>]*?>.*?</script>'si",  // Strip out javascript
                     
    "'<[\/\!]*?[^<>]*?>'si",           // Strip out html tags
                     
    "'([\r\n])[\s]+'",                 // Strip out white space
                     
    "'&(quot|#34);'i",                 // Replace html entities
                     
    "'&(amp|#38);'i",
                     
    "'&(lt|#60);'i",
                     
    "'&(gt|#62);'i",
                     
    "'&(nbsp|#160);'i",
                     
    "'&(iexcl|#161);'i",
                     
    "'&(cent|#162);'i",
                     
    "'&(pound|#163);'i",
                     
    "'&(copy|#169);'i",
                     
    "'&#(\d+);'e");                    // evaluate as php

    $replace = array ("",
                      
    "",
                      
    "\\1",
                      
    "\"",
                      
    "&",
                      
    "<",
                      
    ">",
                      
    " ",
                      
    chr(161),
                      
    chr(162),
                      
    chr(163),
                      
    chr(169),
                      
    "chr(\\1)");

    $text preg_replace ($search$replace$document); 
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Warum? Wie kommst du auf die Annahme?

      Gruß oms
      {brigens Ein Kezboard/Treiber ist v;llig [berfl[ssig!

      Kommentar


      • #4
        Original geschrieben von oms
        Warum? Wie kommst du auf die Annahme?
        habe ich mal gehört oder gelesen. bin mir nicht mehr sicher.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          rein spekulativ:
          Akzeptiert preg_replace nicht auch reguläre Ausdrücke? Die müssen doch selbst erstmal geparsed werden etc. Das ist doch aufwendiger. Stures Ersetzen von Zeichenketten ohne reguläre Ausdrücke müßte doch demnach schneller ablaufen.
          {brigens Ein Kezboard/Treiber ist v;llig [berfl[ssig!

          Kommentar


          • #6
            Original geschrieben von oms
            rein spekulativ: .... Stures Ersetzen ....
            das ist richtig. wie gesagt, ich habe das so im hinterkopf, dass die preg-funktionen in der regel etwas schneller durchlaufen werden. auch wenn regex vorhanden und/oder nicht vorhanden sind.

            meiner meinung nach sollte das sture ersetzen auch schneller sein, weil da nicht großartig geprüft wird. aber wie gesagt, meine ich, dass die preg's schneller sind.

            Sebastian W kann ja mal beide varianten testen und sagen, was schneller ist. würde mich nämlich auch mal interessieren, wie sich das bei ihm verhält.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              @Abraxax
              So machen wir´s.
              {brigens Ein Kezboard/Treiber ist v;llig [berfl[ssig!

              Kommentar


              • #8
                Hmm schade. Dachte ich könnte von jemanden hören ob es schneller geht oder nicht.

                >> Sebastian W kann ja mal beide varianten testen und sagen, was schneller ist
                Nur wie sollte ich das testen? Alle Scripts oder Shell Befehle die die Ausführungszeit messen sollen funktionieren doch nicht wirklich (hatte einiges getestet aber war alles zu ungenau). - wenn überhaupt wohl nur auf einem Server der in der Zeit nichts anderes macht
                Grüsse,
                Sebastian


                Profil Flex Freelancer
                Twitter twitter.com/flashhilfe
                Web Flash und Flex Community

                Kommentar


                • #9
                  mache das mal damit ...
                  http://www.php-resource.de/forum/sho...ht=messen+zeit

                  lasse es jeweils mindesten ca. 10 - 20 mal durchlaufen. dann kannst du einen durchschnitt errechnen. je mehr, desto genauer wird es, falls der server noch andere sachen macht.

                  wie genau ist der durchschnitt bei den jeweiligen varianten?
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Ja ich weis, oder:
                    http://www.dclp-faq.de/q/q-code-performance.html

                    >> wie genau ist der durchschnitt bei den jeweiligen varianten?
                    Hier fängt wahrscheinlich gleich geschrei an, aber das ist mir zu viel Aufwand das gesamte Script umzuschreiben und dann versuchen zu testen.

                    Ich hatte das mal Zuhause mit einem Script auf meinem Rechner (Server) getestet. Der Rechner hatte wirklich nichts anderes zu tun als die Geschwindigkeit zu testen, trotzdem hatte ich deutliche Unterschiede. Deswegen halte ich nichts von solchen Tests.

                    Ich hatte hier auf eine Antwort gehofft in der mir jemand sagen kann was generell schneller ist bei mehreren Abfragen.

                    Trotzdem danke für Eure Bemühungen.
                    Grüsse,
                    Sebastian


                    Profil Flex Freelancer
                    Twitter twitter.com/flashhilfe
                    Web Flash und Flex Community

                    Kommentar


                    • #11
                      Der Benchmark:
                      PHP-Code:
                      <?php

                      define
                      ("BENCH_MEASURE_START_TIME"time());
                      define("NUMBER"10000);

                      function 
                      getmicrotime(){ 
                          list(
                      $usec$sec) = explode(" ",microtime()); 
                          
                      $sec-=BENCH_MEASURE_START_TIME;
                          return (double)
                      $usec + (double)$sec


                      echo 
                      "START ( ".number_format(NUMBER0","".")."*str_replace() ): ".($start=getmicrotime())."<br />";
                      for ( 
                      $idx 0$idx NUMBER$idx++ ) {
                          
                      $result=str_replace("[ b]""<b>""Hello [ b]World[ /b]");
                      }
                      echo 
                      "STOP: ( str_replace() ): ".($stop=getmicrotime())."<br />";
                      echo 
                      "IVAL: ".( $stop-$start )."<br /><br />\n";

                      echo 
                      "START ( ".number_format(NUMBER0","".")."*preg_replace() ): ".($start=getmicrotime())."<br />";
                      for ( 
                      $idx 0$idx NUMBER$idx++ ) {
                          
                      $result=preg_replace("/\[b\]/""<b>""Hello [ b]World[ /b]");
                      }
                      echo 
                      "STOP: ( preg_replace() ): ".($stop=getmicrotime())."<br />";
                      echo 
                      "IVAL: ".( $stop-$start )."<br /><br />\n";

                      echo 
                      "START ( ".number_format(NUMBER0","".")."*ereg_replace() ): ".($start=getmicrotime())."<br />";
                      for ( 
                      $idx 0$idx NUMBER$idx++ ) {
                          
                      $result=ereg_replace("/\[b\]/""<b>""Hello [ b]World[ /b]");
                      }
                      echo 
                      "STOP: ( ereg_replace() ): ".($stop=getmicrotime())."<br />";
                      echo 
                      "IVAL: ".( $stop-$start )."<br /><br />\n";

                      ?>
                      Beim [ /b] und [ b] muß das Space entfernt werden.


                      Das Ergebnis:
                      Code:
                      START ( 10.000*str_replace() ): 0.578539
                      STOP: ( str_replace() ): 0.76505
                      IVAL: 0.186511
                      
                      START ( 10.000*preg_replace() ): 0.765264
                      STOP: ( preg_replace() ): 0.98742
                      IVAL: 0.222156
                      
                      START ( 10.000*ereg_replace() ): 0.987619
                      STOP: ( ereg_replace() ): 1.20112
                      IVAL: 0.213501
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        Hi goth,

                        sehr interessant!
                        Vielen Dank.

                        ... nur komisch das ereg_replace bei Dir schneller als preg_replace war.
                        Grüsse,
                        Sebastian


                        Profil Flex Freelancer
                        Twitter twitter.com/flashhilfe
                        Web Flash und Flex Community

                        Kommentar

                        Lädt...
                        X