Ich schreibe etwas PHP-Code, um PDFs mit der FPDF-Bibliothek zu erstellen. Und ich benutze grundsätzlich die gleichen 4 Zeilen Code, um jede Zeile des Dokuments zu drucken. Ich fragte mich, was effizienter ist, diese 4 Zeilen immer wieder zu wiederholen, oder würde es in eine Funktion besser machen? Ich bin neugierig, weil es sich anfühlt, als ob eine Funktion einen größeren Overhead hätte, weil die Funktion nur 4 Zeilen lang wäre.
Der Code, den ich in Frage stelle, sieht so aus:
Dies sollte es beantworten: Ссылка und Ссылка
Das Gesetz von Curly, mach eins, ist spiegelt sich in mehreren Kernprinzipien wider der modernen Softwareentwicklung:
Wiederholen Sie sich nicht
Wenn Sie mehr als eine Möglichkeit haben, dasselbe zu einem bestimmten Zeitpunkt auszudrücken die zwei oder drei verschiedenen Darstellungen werden höchstwahrscheinlich fallen aus dem Takt geraten. Selbst wenn sie nicht, du garantierst selbst die Kopfschmerzen der Aufrechterhaltung sie parallel, wenn eine Veränderung tritt ein. Und Veränderung wird auftreten. Nicht Wiederhole dich selbst ist wichtig, wenn du es bist will flexibel und wartbar sein Software.
Einmal und nur einmal
Jede Verhaltenserklärung sollte einmal und nur einmal vorkommen Einmal. Dies ist eines der Hauptziele, wenn nicht das Hauptziel, beim Refactoring Code. Das Designziel ist zu eliminieren doppelte Verhaltenserklärungen, typischerweise durch Zusammenführen oder Ersetzen mehrere ähnliche Implementierungen mit eine einigende Abstraktion.
Single Point of Truth
Wiederholung führt zu Inkonsistenz und Code, der subtil ist kaputt, weil du nur ein paar verändert hast Wiederholungen, wenn du dich ändern musstest alle von ihnen. Oft bedeutet das auch Du hast nicht richtig durchdacht die Organisation Ihres Codes. Irgendein Mal sehen Sie doppelten Code, das ist ein Gefahrenzeichen. Komplexität ist ein Kostenfaktor; Zahlen Sie es nicht zweimal.
Ich bin neugierig, weil es sich anfühlt wie ein Funktion hätte einen größeren Overhead Because die Funktion wäre nur 4 Zeilen lang.
Hier kommt Spaghetti her.
Definiere es eindeutig in eine Funktion und rufe es auf. Der Aufwand, vor dem Sie Angst haben, ist die schlimmste Art der vorzeitigen Optimierung.
TROCKEN - Wiederhole dich nicht.
Mach es zu einer Funktion. Funktionsaufruf ist heutzutage ziemlich klein. Im Allgemeinen können Sie viel mehr Zeit sparen, indem Sie bessere High-Level-Algorithmen finden, als mit solchen Low-Level-Details herumzuspielen. Und es ist weit einfacher und mit einer solchen Funktion richtig zu machen. Wozu soll es einem Menschen nützen, wenn er ein wenig beschleunigen und die Richtigkeit seines Programms verlieren soll?
Zusätzlich zu all den wertvollen Antworten zu dem viel wichtigeren Thema der Wartbarkeit; Ich möchte etwas zur Frage des Overheads hinzufügen.
Ich verstehe nicht, warum Sie befürchten, dass eine Vier-Zeilen-Funktion einen größeren Overhead hätte.
In einer kompilierten Sprache wäre ein guter Compiler wahrscheinlich in der Lage, sie trotzdem zu inline zu schreiben.
In einer interpretierten Sprache (wie PHP) muss der Interpreter den gesamten Wiederholungscode jedes Mal analysieren, wenn er auftritt, zur Laufzeit . Für mich bedeutet das, dass Wiederholungen einen noch höheren Aufwand als ein Funktionsaufruf haben.
Wenn Sie sich über den Funktionsaufruf-Overhead Gedanken machen, ist das eine furchtbare vorzeitige Optimierung. In solchen Fällen ist die einzige Möglichkeit, wirklich zu wissen, was schneller ist, das Profil.
Lass es funktionieren, mach es richtig, mach es schnell. In dieser Reihenfolge.
Der Overhead ist tatsächlich sehr klein und verursacht keinen großen Unterschied in Ihrer Anwendung. Würden Sie lieber diesen kleinen Overhead haben, aber ein einfacheres Programm haben, oder Sie möchten die bloße Millisekunde sparen, aber Stunden brauchen, um kleine Änderungen zu korrigieren, die sich wiederholen.
Wenn Sie mich oder einen anderen Entwickler dort fragen, wollen wir definitiv die erste Option. Also mach weiter mit der Funktion. U wird vielleicht nicht den Code heute beibehalten, aber wenn du es tust, wirst du dich dafür hassen, dass du versuchst, diese bloßen Millisekunden zu speichern
Tags und Links php function code-generation