Anzeige:
Ergebnis 1 bis 9 von 9

Thema: includes -- wie langsam?

  1. #1
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41

    includes -- wie langsam?

    Ich habe ein paar mal schon gehoert, dass includes in php verdammt langsam sind. Macht ja eigentlich auch Sinn, schliesslich muss die Datei erstmal auf dem Dateisystem gefunden und geoeffnet werden. Das dauert doch bestimmt.

    In wieweit sollte man das ernst nehmen? Sollte man echt veruschen includes wenn moeglich zu vermeiden? Waere es schneller die Scripte in einer (MySQL-)DB zu speichern?

  2. #2
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Meiner Erfahrung nach ist inkuldieren nicht sehr langsam, wie man an den Benchmarks von Templates sehen kann. Die dort getesteten Template Engines arbeiten alle mit externen Dateien für die Templates. Ich meine, was machen ein paar 100 Millisekunden schon aus, wenn eine Webseite von "nur" 20 Usern in der Stunde besucht wird.

    In einer Datenbank würde ich das nicht speichern. Es gab in meinem Forum eine lange Diskussion über Pro und Contra, und ich bin nach wie vor gegen eine DB-Nutzung.

    Gruß
    Claus

  3. #3
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von yankee42
    In wieweit sollte man das ernst nehmen? Sollte man echt veruschen includes wenn moeglich zu vermeiden? Waere es schneller die Scripte in einer (MySQL-)DB zu speichern?
    Solange Du include() nicht ohne Ende miteinander verschachtelst und
    Typo3 nicht als Vorbild nimmst, geht das alles.

    Wer erzählt den solche Geschichten?
    1/2 des Internets ist so aufgebaut.

    Der andere Ansatz ist interessant.
    Schreib doch mal ein Script was einen Geschwindigkeitvergleich macht.
    (-> hier posten)

    Übrigens das Forum hier schreibt seit Version 1.9 (glaube ich) den
    Großteil seiner Config, Templates + Variablen in die DB.
    Geändert von Romanday (24-03-2006 um 08:55 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  4. #4
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Ok, habe ich gemacht. Erstmal ein paar Dateien und mysql-eintraege erstellen:
    PHP-Code:
    <?php
      mysql_connect
    ('localhost','root','****');
      
    mysql_select_db('ttt');
      for(
    $i=0$i<100$i++)
      {
        
    $datei =fopen("datei$i.inc.php",'w');
        
    fwrite($datei,"<?php
        print('
    $i<br />');
        ?>"
    );
        
    mysql_query("INSERT INTO ttt (qt) VALUES ('print(\'$i<br />\');')");
        
    fclose($datei);
      }
    ?>
    Und dann benchmarken:
    PHP-Code:
    <?php
    class Timer {
       function 
    getmicrotime() {
           list(
    $usec$sec) = explode(" "microtime());
           return ((float)
    $usec + (float)$sec);
       }

       function 
    starttime() {
       
    $this->st $this->getmicrotime();
       }

       function 
    displaytime() {
           
    $this->et $this->getmicrotime();
           return 
    round(($this->et $this->st), 8);
       }
    }

      
    mysql_connect('localhost','root','****');
      
    mysql_select_db('ttt');
      
    $t =new Timer();
      
    $t->starttime();
      for(
    $i=0$i<100$i++)
      {
        if (
    $m =='dateien') include("datei$i.inc.php");
        else
        {
          
    $row =mysql_fetch_row(mysql_query('SELECT qt FROM ttt WHERE id='.($i+1)));
          eval(
    $row[0]);
        }
      }
      print(
    $t->displaytime());
    ?>
    Ich habe ganz oft F5 gedrueckt, aber die Ergebnisse sind jewals sehr aehnlich:
    Include: 0.00438595
    MySQL: 0.01022792

    Sieht wohl so aus, als waeren includes ganz eindeutig schneller...
    Geändert von yankee42 (25-04-2006 um 22:21 Uhr)

  5. #5
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von yankee42
    Ich habe ganz oft F5 gedrueckt, aber die Ergebnisse sind jewals sehr aehnlich:
    Include: 0.00438595
    MySQL: 0.01022792

    Sieht wohl so aus, als waeren includes ganz eindeutig schneller...
    Kann sein, aber MySQL hat je nach Version einen QueryCache.
    Der Muß natürlich auch erst mal gefüllt werden.

    Weiterhin würde ich mal getrennte Schleifen machen, sowie
    innerhalb der Schleife mysql_connect, free_result und close
    verwenden.

    Du willst doch 100 DB Abfragen mit 100 x lesen einer Datei vergleichen.

    Weiterhin bin ich davon ausgegangen, das Du komplette functions() oder
    Classen in der DB speichern willst!?

    Vermutung:
    Für ein paar Variablen wird sich der Aufwand nicht lohnen den Krams
    in der DB zu speichern, außer Du willst eine umfangreiche User Area
    basteln.

    Weiterhin, wird sich ein Geschwindikkeitsvorteil erst bemerkbar machen
    bei Projekten mit hohem Traffik.

    Nachteile:
    - Mehr Speicher für die DB.
    - Wenn die Db streikt -> Houston we have a problem.

    Spannend wäre, zu sehen ob bei größerem Dateiinhalt MySQL vorne liegt.
    Geändert von Romanday (24-03-2006 um 12:07 Uhr)
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  6. #6
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Nach meiner theorie war es das Datei-oeffnen, was so langsam ist. Also Datei auf der Festplatte finden und oeffenen, waehrend die DB die Datei ja schon offen haben sollte.
    Wenn meine Vermutung richtig ist, macht das ganze auch keinen Unterschied, ob die Datei jetzt riesig ist oder klein. Eher sogar umgelehrt, denn bei kleinen Dateien wuerde die Zeit zum oeffnen der Datei viel staerker ins Gewicht fallen.
    Zitat Zitat von Romanday
    Weiterhin würde ich mal getrennte Schleifen machen, sowie
    innerhalb der Schleife mysql_connect, free_result und close
    verwenden.
    Bei den meisten Seiten, die ich bis jetzt so geschrieben habe verwenden fast alle Scripte sql-querys. Und daher baue ich die Verbindung sowieso auf und habe das mal als nicht wichtig erachtet. Allerdings wuerde es dann im Zweifellsfall eh einfach nur noch schlechter fuer mysql aussehen...

  7. #7
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Ohne EAccellator sind includes schon recht langsam, aber mit gibt es so gut wie keine Performanceverluste, der Vorteil der Übersichtlichkeit sollte hier ganz klar überwiegen.
    PS. ich empfehle, require() einzusetzen.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  8. #8
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hallo,

    includes sind in der tat einer der langsamsten Spracheigenschaften von php... wenn man sein Coding paketieren und strukturieren möchte kommt man aber nicht darum herum. Man kann das Problem aber über Caching angehen... hier gibt es bereits einige Lösungen.

    Rasmus Lerdorf hat mit seiner Lesung "Do you PHP?" auf dem Linuxtag 2003 einiges über den Einsatz von PHP bei Yahoo verraten und unter anderem den Einsatz von Includes (neben OO) als Performancekiller bezeichnet.
    --> http://talks.php.net/show/lt2003
    Der einsatz von PHP ist bei Yahoo allerdings sehr speziell - fast die ganze Businesslogik ist in C++ geschrieben und PHP dient nur als Template Engine.

    Meiner Meinung nach sind im alltäglichen Einsatz bei den meisten Webapplikationen die Datenbankabfragen die Stelle bei der sich am meisten Performance rausholen lässt. Optimierungen am Coding bringen meist nur Vorteile im Millisekundenbreich und machen sich erst bei einigen 100 Benutzern gleichzeitig bemerkbar (soviel zum Thema "ich hab mal ganz schnell F5 gedrückt um die Performance zu messen ").

    Gruß,

    Gaert


  9. #9
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Gaert
    Meiner Meinung nach sind im alltäglichen Einsatz bei den meisten Webapplikationen die Datenbankabfragen die Stelle bei der sich am meisten Performance rausholen lässt.

    Gruß,

    Gaert
    Jau, && so simple Geschichten wie
    - verbessere die Navigation deiner Seite reduziert unnötige Klicks.
    - vermeide die Seite mit Adobe, oder Macromedia Produkten zu erstellen.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •