Diesen Code optimieren?

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

  • #16
    Ich sage es mal kurz und deutlich, in der Zeit wo du hier Fragen stellst wie

    kann ich das problemlos mit dieser zeile ersetzen?
    PHP-Code:
    [COLOR=#000000] [COLOR=#0000cc]$arr[/COLOR][COLOR=#006600]=[/COLOR][COLOR=#0000cc]explode[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]"\n"[/COLOR][COLOR=#006600],[/COLOR][COLOR=#0000cc]file_get_contents[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$_SERVER[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'DOCUMENT_ROOT'[/COLOR][COLOR=#006600]].[/COLOR][COLOR=#cc0000]"/datei.log"[/COLOR][COLOR=#006600]));
    [/COLOR][/COLOR]
    hättest du das schon zig mal probieren und somit dir selbst die Antwort liefern können - warum also eine solche Teilfrage ?

    Bei einem Singledurchlauf wegen der 5..6..7 ten Kommastelle solch ein Aufwand selbst und von den Beteiligten zu verlangen das ist total daneben.

    Man kann natürlich nicht alles wissen, aber man darf erwarten das man sich zumindest das Manual durchliest und die Kommentare dazu.

    Also ich meine statt mit solchen Dingen zu kommen wäre doch wohl erheblich mehr Eigeninitative angesagt.

    Erkennt man das hilft man gerne, erkennt man es nicht denkt man sich sein Teil.

    In dem Sinne noch weiter Spass beim erforschen von PHP.

    Ja, ich mag sehr kurzen code/zeilen lieber, ich denk da auch an Morgen, falls ich da wieder ran muß und dann sollte ich noch verstehen was das script detailliert so tut.
    Das ist 100% verkehrt - kryptischer Code der zudem in ie Gefahr läuft nicht optimal zu sein ist erheblich schwieriger zu lesen als normal aufgestellter.
    Zuletzt geändert von ; 03.07.2009, 19:20. Grund: Ergänzung

    Kommentar


    • #17
      Nein ich bin heute nicht pampig! :-)

      Ich frag mich auch warum es - um eine datei in ein array zu schaufeln in php - soviele möglichkeiten gibt. In php ist mehrere doppelt und 3fach.
      Gäbe es nur eine Möglichkeit, dann hätte ich auch nicht fragen brauchen.

      Grad beim datei lesen und schreiben, gibts ne menge möglichkeiten das zu tun, aber bis auf paar ms geschwindigkeitsunterschied tun die alle das gleiche.
      ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

      Kommentar


      • #18
        Nun gut es führen viele Wege nach Rom und bei manchen Funktionen gibt es erhebliche Unterschiede in den Möglichkeiten und dem Einsatz - gleich sind sie nicht unbedingt.

        Zudem sind so manche Dinge im Verlaufe der Entwicklungsgeschichte von PHP entstanden.

        Da unterschiedet sich PHP keineswegs von anderen Programmiersprachen.

        Aufgabe klar und komplett formulieren und nie mit Auszügen posten aus dem die Gesamtaufgabe nicht hervorgeht.

        Das hilft dir und anderen die helfen könnten.

        Kommentar


        • #19
          Zitat von piratos Beitrag anzeigen
          Um mal zu zeigen von was man redet hier mal ein

          Es kommt da eigentlich nur fopen mit fread oder file_get_contents in Frage.
          Der Code file_get_contents ist kürzer, aber tatsächlich langsamer.

          Wenn ich das nun auf die gepostete Eingangsfrage beziehe ist das eine reine Beschäftigungstherapie.
          Ich möchte nochmal hier mitdiskutieren.
          Ich habe hier local das mal mit einer 61kb textdatei probiert mit
          $max=500; # Anzahl der Dateidurchläufe
          Nur 500 weil mein php-timeout bei 30 sec einsetzt

          ...und hier ist file_get_contents der gewinner!
          Start fopen fread ist schon nach dran aber das ergebnis ist eindeutig.

          PHP-Code:
          Start file_get_contents
          0.502177000046
          0.503149986267
          0.50080704689
          0.500221014023
          0.50035905838
          0.503863096237
          0.500072002411
          0.498913049698
          0.50068116188
          0.50141119957

          Start fopen fgets
          1.10370492935
          1.12760019302
          1.11060190201
          1.11777806282
          1.12520098686
          1.14152407646
          1.13601994514
          1.15308403969
          1.13815402985
          1.14328503609

          Start fopen fread
          0.554963111877
          0.554191112518
          0.552239179611
          0.555691957474
          0.555094003677
          0.555710077286
          0.553253889084
          0.556843996048
          0.555000066757
          0.552794933319 
          Nein ich will dich/euch/uns nicht jetzt nerven, aber trotzdem wissen, warum dein ergebnis nicht auch so ausfällt.

          WAMP with PHP v5.2.3 and MySQL v5.0.45
          Rechner, 1,8 GHz CPU 256 RAM
          ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

          Kommentar


          • #20
            Das kann an allem Möglichen liegen...
            Virenscanner
            Dateisystem
            Betriebssystem
            usw.

            Vergleichbar: glob()
            Glob ist unter Linux meist erheblich fixer als opendir(). Und unter win siehts genau andersrum aus.
            Wir werden alle sterben

            Kommentar


            • #21
              Hier wurde es bereits von wahsaga angesprochen, aber ich wiederhole es mal etwas ausführlicher:

              Sobald die Datei, die du einliest, eine gewisse Größe erreicht und es keinen Grund gibt, ihren gesamten Inhalt im Speicher zu halten (zum Beispiel, weil du nicht alle Werte ausgeben, sondern nur eine Statistik daraus erstellen willst -- keine Ahnung, kommt auf die Anwendung an), fallen file() und file_get_contents() sowieso raus, weil sie alles gleichzeitig in den Speicher schaufeln, was einfach nur entsetzlich ineffizient ist. Die Frage nach der Geschwindigkeit ist vielleicht einfach nicht die richtige.

              Wenn die Einträge der Datei in etwa gleich lang sind und du bestimmte Zeilen/"Datensätze" aus einer Datei auslesen möchtest, könnte es sich lohnen, darüber nachzudenken, den Inhalt der Datei in Blocks identischer Länge zu organisieren. Du verlängerst jeden Eintrag durch Anhängen von Leerzeichen künstlich auf eine Länge von DATENSATZLÄNGE Zeichen/Bytes, bevor du ihn in die Datei schreibst.

              Selbst wenn dabei Speicherplatz ungenutzt bleibt, weil nicht jeder Datensatz zwangsläufig die zugedachte Maximallänge ausfüllt, kann man so per fseek() mit DATENSATZLÄNGE * DATENSATZNR ruckzuck an die Stelle des n-ten Eintrags springen (das ist grob gesagt das, was Datenbanken machen). Zudem liefert dir dann filesize() / DATENSATZLÄNGE die Anzahl der Einträge in der Datei, sodass du auch einfach an die letzten drei rankommen würdest.

              Allein die Geschwindigkeit von file(), file_get_contents() und fopen() zu vergleichen, ist wenig aussagekräftig, da die Funktionen unterschiedliche Aufgaben erfüllen.

              Noch ein hübsches Zitat zum Thema "kurzer Code" von Aaron Seigo (einem der maßgeblichen Entwickler von KDE). Es passt hier nicht hundertprozentig, aber ich mag den "Don't get clever"-Teil.

              Zitat von Aaron Seigo
              • Don't get clever: You may [have] some super duper clever way of doing something, but if it comes at the cost of code readability think twice. If it doesn't really gain you all that much pass on the opportunity to be clever. Keep it simple and the people who come after you will love you for it.
              • Document your cleverness: There are times you have no choice but to be clever. Some problems are just not easy to solve and to be solved well they require non-trivial code. When that happens, be sure to leave meaningful comments in the code so people can understand your cleverness.

              Kommentar

              Lädt...
              X