Performance - file_get_contents oder File

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

  • Performance - file_get_contents oder File

    Hallo zusammen

    hab grad eine aktuelle Frage.

    Habe schon folgenden Code verwendet:

    PHP-Code:
    $templateHTML file($_SERVER["DOCUMENT_ROOT"].'/template.html');


    $search[1] = '<!--dynamisch Seitentitel-->';
    $replace[1] = ucfirst($showPage);

    $search[2] = '<!--dynamisch Content-->';
    $replace[2] = $content;


    $templateHTML str_replace($search$replace$templateHTML);
    foreach(
    $templateHTML as $key => $val)
    {
      echo 
    $val;

    nun möchte ich aber wechseln zu:

    PHP-Code:
    $templateHTML file_get_contents($_SERVER["DOCUMENT_ROOT"].'/template.html');
    $templateHTML str_replace('<!--dynamisch Seitentitel-->'ucfirst($showPage), $templateHTML);
    $templateHTML str_replace('<!--dynamisch Content-->'$content$templateHTML);
    echo 
    $templateHTML
    meine Frage, welche Lösung ist, u.A. auch betreffend Performance, besser? Oder sollten beide Varianten gar nicht verwendet und das Problem anders gelöst werden?

  • #2
    Die Performance kannst du selbst messen, einmal $start=microtime(), den Code in einer Schleife x-mal ausführen und dann microtime()-$start ausgeben.

    Kommentar


    • #3
      sprint vs. marathon...

      in beiden genannten Fällen drückst du die Datei komplett in den RAM... sei's als array, sei's als string.

      Performance-mässig ist das zwar bei wenigen Zugriffen (absolut gesehen) die schnellste Methode.

      Aber rechne mal hoch, wenn du x anfragen bei Dateigröße n bekommst. Dann muss das System irgendwann Auslagern und greift auf die Platte zu.

      und genau ab dem Punkt geht dem sprinter die Puste aus.

      aber das nur nebenher, war ja nicht gefragt...

      Kommentar


      • #4
        super danke für die Antworten.

        Das heisst du würdest den Marathon (file_get_contents) dem Sprinter (file) gegenüber bevorzugen?

        oder hab ich jetzt grad etwas verwechselt?

        Kommentar


        • #5
          ich würde zeileinweise einlesen und bearbeiten.

          quasi, die gute alte while() schleife.

          Kommentar


          • #6
            ehm, du meinst so?

            PHP-Code:
            $fp fopen($_SERVER["DOCUMENT_ROOT"].'/template.html''r');
            while(!
            feof($fp))
            {
              
            $content fgets($fp);
              echo 
            str_replace($arrSearch$arrReplace$content);
            }
            fclose($fp); 

            Kommentar


            • #7
              Wie groß kann ein Template denn sein, dass man da an Speicherengpässe denken muß? Es ist doch schließlich nur ein Template, sprich ohne Inhalt.

              Der Punkt ist doch folgender: Wenn du es zeilenweise einliest, mußt du jede Zeile nach allen möglichen Platzhaltern durchsuchen, diese ggf. ersetzen und die fertige "Zeile" dann umgehend an den Client senden, um die gleiche Variable mit der nächsten Zeile füllen zu können.
              Ich denke wenn man mehr als zwei Platzhalter verwendet, bricht das Script bei diesem Vorgehen zeitmäßig ein - während jeder Webserver selbst unter extremer Last genügend Speicher haben sollte, um ein Template komplett in den Speicher zu lesen.

              Kommentar


              • #8
                wenn ich mir so manche Templates im Vergleich zum tatsächlichen Inhalt ansehe... kann's da durchaus das ein oder andere geben.

                Kommentar

                Lädt...
                X