Funktionsaufruf oder Codeeinbindung mit include?

Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 10:12:02 von Thomas Schneider

Mich würde interessieren welche Methode schneller ist, die Abarbeitung eines
Codeabschnittes durch Ablage und Aufruf in einer Funktion oder die
Einbindung mit include?

Als Beispiel soll ganz einfach der Verbindungsaufbau zu einem MySQL-Server
und die Auswahl der entsprechenden DB dienen, die Aufgabe ist durch beide
Methoden lösbar, aber welche ist die schnellste?

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 11:59:03 von Stephan Mann

On 2005-04-17 10:12:02, Thomas Schneider wrote:
> Mich würde interessieren welche Methode schneller ist, die Abarbeitung
> eines
> Codeabschnittes durch Ablage und Aufruf in einer Funktion oder die
> Einbindung mit include?
>
> Als Beispiel soll ganz einfach der Verbindungsaufbau zu einem
> MySQL-Server
> und die Auswahl der entsprechenden DB dienen, die Aufgabe ist durch beide
> Methoden lösbar, aber welche ist die schnellste?

Es ist unerheblich, welche Methode die schnellere ist. Die "Loesung" mit
include() hat nichts mit sauberer Programmierung zu tun.
Wiederzuverwendender Code ist in Funktionen oder Klassen gekappselt.
Unterprogramme immer wieder anzuspringen ist IMHO schon eine Weile
(Assembler?) ueberholt.

hth, stephan
--
Der Terrorismus ist ein Krieg der Armen gegen die Reichen.
Der Krieg ist ein Terrorismus der Reichen gegen die Armen.
[Sir Peter Ustinov, 1921 - 2004]

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 12:15:23 von Thomas Schneider

"Stephan Mann" schrieb:

Danke für Deine Antwort.

> Es ist unerheblich, welche Methode die schnellere ist.

Nicht für mich.

> Die "Loesung" mit include() hat nichts mit sauberer
> Programmierung zu tun.
> Unterprogramme immer wieder anzuspringen ist IMHO schon eine Weile
> (Assembler?) ueberholt.

Aber welche konkreten Gründe stehen hinter Deine Aussage?
Ob irgendwas "sauber" oder "überholt" ist kümmert mich wenig.

Ich möchte schnell und flexibel programmieren mit möglichst geringer
Serverlast. Hat include() hier Nachteile? Welche Argumente sprechen wirklich
für die Verwendung einer Funktion, bezogen auf mein Beispiel?

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 12:32:35 von Kai Ruhnau

Thomas Schneider wrote:
> "Stephan Mann" schrieb:
>
> Danke für Deine Antwort.
>
>>Es ist unerheblich, welche Methode die schnellere ist.
>
> Nicht für mich.

Bitte sei so gut und zeige mir (uns) einen Fall, in dem es auf genau
dieses Fitzelchen Geschwindigkeit ankommt. Üblicherweise versucht
$PROGRAMMIERER nämlich an Stellen zu optimieren, die es nicht mal im
Ansatz Wert sind.
Daraus resultieren schlecht lesbare Programme, die keiner mehr versteht
und deren Optimierungsgrad sich im Promille-, bestenfalls im
einstelligen Prozent-Bereich abspielt.

>>Die "Loesung" mit include() hat nichts mit sauberer
>>Programmierung zu tun.
>>Unterprogramme immer wieder anzuspringen ist IMHO schon eine Weile
>>(Assembler?) ueberholt.
>
> Aber welche konkreten Gründe stehen hinter Deine Aussage?
> Ob irgendwas "sauber" oder "überholt" ist kümmert mich wenig.
>
> Ich möchte schnell und flexibel programmieren mit möglichst geringer
> Serverlast. Hat include() hier Nachteile? Welche Argumente sprechen wirklich
> für die Verwendung einer Funktion, bezogen auf mein Beispiel?

Für das von dir angesprochene Beispiel des Datenbankverbindens
beispielsweise ist es tatsächlich nahezu völlig unerheblich wie du dir
die Verbindungsfunktion zu MySQL wegkapselst. Die meiste Zeit wird in
mysql_connect selber verbraten und du hast absoult (absolut aus PHP
heraus...) keinen Einfluss auf die Geschwindigkeit dieser Funktion.

Am einfachsten beherzigst du die drei goldenen Regeln der Optimierung:

1. Don't do it.
2. Don't do it.
3. Don't do it yet.

Grüße
Kai

--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 13:19:15 von Thomas Schneider

"Kai Ruhnau" schrieb:

> Am einfachsten beherzigst du die drei goldenen Regeln der Optimierung:
>
> 1. Don't do it.
> 2. Don't do it.
> 3. Don't do it yet.

Schade, da fehlen nun wohl doch die richtigen Argumente.

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 13:43:01 von Stephan Mann

On 2005-04-17 12:15:23, Thomas Schneider wrote:
> "Stephan Mann" schrieb:
>> Es ist unerheblich, welche Methode die schnellere ist.
>
> Nicht für mich.

Ich bin mir ziemlich sicher, dass dies auch fuer dich gilt. Solltest du
nicht eine Webapplikation der Groessenordung Yahoo o.ae. betreiben, so
duerfte sich dieser Unterschied IMHO nicht bemerkbar machen. Dann
allerding haettest du deine Frage IMHO anders gestellt.

Das ist aber tatsaechlich nur meine Meinung, denn es ist mir kein
diesbezuegliches Benchmark bekannt. Du kannst das gern aendern und uns
deine Ergebnisse praesentieren.

25.5. Wie kann ich die Performance zweier Befehle vergleichen?
http://www.php-faq.de/q/q-code-performance.html

Egal welche Loesung du nimmst, include() brauchst du frueher oder spaeter
in beiden Faellen, egal ob du nun ein Unterprogramm aufrufst oder eine
Funktionsbibliothek einbindest. Ich moechte ernsthaft bezweifeln, dass der
Funktionsaufruf ansich dann nennenswert Rechenzeit verpulvert, lasse mich
aber gern vom Gegenteil ueberzeugen...

> Aber welche konkreten Gründe stehen hinter Deine Aussage?
> Ob irgendwas "sauber" oder "überholt" ist kümmert mich wenig.

Es sollte dich kuemmern, wenn du Code schreiben willst, den auch andere
lesen koennen und den du in ein paar Monaten noch warten kannst.

> Ich möchte schnell und flexibel programmieren mit möglichst geringer
> Serverlast. Hat include() hier Nachteile? Welche Argumente sprechen
> wirklich
> für die Verwendung einer Funktion, bezogen auf mein Beispiel?

Wenn du tatsaechlich nur zu einer Datenbank verbinden moechtest, dann ist
in diesem konkreten Fall tatsaechlich beides moeglich. Aber was passiert,
wenn du morgen noch eine weitere Datenbank-Verbindung benoetigst, die
andere Zugangsdaten hat? Kopierst du dann dein Unterprogramm und traegst
die neuen Daten ein? Flexibel, so deine eigene Anforderung, ist das nicht.
Flexibel ist ein Funktion, der man die Zugangsdaten bei Aufruf uebergeben
kann. Auf diese Weise kann man zu beliebig vielen Datenbanken verbinden,
ohne Code zu duplizieren.

Diese Newsgroup ist wirklich der falsche Ort, um ueber die Vorteile von
funktionaler bzw. objektorientierter Programmierung zu diskutieren.
Kapitel darueber finden sich in jedem Programmierbuch fuer Einsteiger,
egal welche Sprache.

hth, stephan
--
Der Terrorismus ist ein Krieg der Armen gegen die Reichen.
Der Krieg ist ein Terrorismus der Reichen gegen die Armen.
[Sir Peter Ustinov, 1921 - 2004]

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 15:41:34 von Sven Drieling

Kai Ruhnau wrote:

Hallo,

> Am einfachsten beherzigst du die drei goldenen Regeln der Optimierung=


> 1. Don't do it.
> 2. Don't do it.
> 3. Don't do it yet.

- (Zunächst) die einfachste Implementierung umsetzen.
- Übersichtlich und leicht verständlich programmieren.

John Lim beschreibt, was sich so an einen Server mit PHP optimieren
lässt und welchen Effekt es hat.

John Lim, "A HOWTO on Optimizing PHP with tips and methodologies",
2001-2005, phplens.com=20
http://phplens.com/lens/php-book/optimizing-debugging-php.ph p

Optimierung eines WWW-Servers mit Apache, IIS und PHP. Tuning Apach=
e
und IIS, Opcode-Cache, HTML-Cache, Benchmarks, Optimierung PHP-Code=
..=20

(Quelle: Thomas Rutter,
http://www.sitepoint.com/blog-post-view.php?id=3D240941)


tschuess
[|8:)

Re: Funktionsaufruf oder Codeeinbindung mit include?

am 17.04.2005 18:56:30 von Matthias Esken

On Sun, 17 Apr 2005 13:19:15 +0200, Thomas Schneider wrote:

> "Kai Ruhnau" schrieb:
>
>> Am einfachsten beherzigst du die drei goldenen Regeln der Optimierung:
>>
>> 1. Don't do it.
>> 2. Don't do it.
>> 3. Don't do it yet.
>
> Schade, da fehlen nun wohl doch die richtigen Argumente.

Na gut, wenn es dir so ultimativ auf Geschwindigkeit ankommt, dann solltest
du weder include() noch Funktionen verwenden sondern den ganzen Spaß linear
runterschreiben. Zusätzlich ist dann noch der Einsatz eines Accelerators
sinnvoll.

Vielleicht hilft dir auch folgender Beitrag aus der FAQ weiter:

25.5. Wie kann ich die Performance zweier Befehle vergleichen?
http://www.php-faq.de/q/q-code-performance.html

Bitte teste das auf dem Produktivsystem. Ich gehe hier davon aus, adass der
Geschwindigkeitsunterschied so minimal ist, dass es eine Rolle spielen
könnte, in welcher Umgebung genau das PHP-Skript läuft.

Gruß,
Matthias