php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.01.2012, 11:01  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard Ist Code-Optimierung "nötig"?

Hallo,

ich frage mich, in wieweit es Sinn macht, den Code "vorzuoptimieren" oder ob PHP nicht selbst den Code z.B. von If-else Bestandteilen so in Stücke zerlegt bzw, zussammenkopiert, dass eine (strukturelle) Optimierung unnötig ist.

Ein Beispiel:

Es gibt eine Funktion, die sehr oft aufgerufen wird. Sie teilt sich in zwei Teile. Ein Teil, dessen Code sehr kurz ist und der in 99,999% der Fälle (Normalbetrieb) durchlaufen wird.

Der zweite Teil ist umfangreich und wird nur in ganz wenigen Fällen (Ausnahme und beim Debuggen) ausgeführt.

[php]

function service( <argumente> )
{
if( bedingung )
{
// sehr wenig code, 99,99% der Fälle ausgeführt
}else{
// sehr viel Code, sehr selten ausgeführt
};
};
/PHP]

Macht es nun (aus o.g. Gründen) Sinn, den zweiten Teil in eine eigene Funktion "auszulagern" und im "else-zweig" als einzige Anweisung diese Funktion aufzurufen?

Bin sehr gespannt.
Danke
jwka
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.01.2012, 11:42  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.141
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

PHP-Code:
function service ($argumente) {

    if (
$bedingung) {
        
// sehr wenig code, 99,99% der Fälle ausgeführt
        
return $theReturnVal;
    }

    
// ansonsten ....
    // sehr viel Code, sehr selten ausgeführt 
    
return $theAlternativeVal;

Ansonsten würd ich sagen, irgendwo muss der Code ja stehen, also am besten da wo er hingehört.

Siehe zB auch hier:
http://www.php.de/wiki-php/index.php...g:W%C3%A4chter
__________________
Keine Zahl != ein Zeichen das keine Zahl ist

Geändert von hausl (08.01.2012 um 11:47 Uhr).
hausl ist offline   Mit Zitat antworten
Alt 08.01.2012, 13:01  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Da du uns nicht sagst worauf hin du optimieren willst, nehm ich mal an das du auf Parser-Geschwindigkeit hin optimieren willst. In diesem speziellen Fall gilt: Code der in einer Funktion existiert wird wärend des Parser-Prozesses immer geparsed, ganz gleich ob die IF-Klausel zutrifft oder nicht. Der einzigste Fall wo das nicht eintritt ist wenn du innerhalb dieser IF-Anweisung erst Code includierst.

Da du dich warscheinlich gegen alternative Entwicklungsmethoden sträubst ( OOP ) bleibt hier nur der Hinweis auszulagern und generell große Code-Blöcke darauf hin zu optimieren das sie IMMER den geringsten Aufwand betreiben und du keine Workarrounds, die hohe Aufwände betreiben um etwas zu realisieren, nutzt. Ein Beispiel wäre hier Pseudo-Listen in Form von Strings zu nutzen, die ständig exploded und gejoint oder mit substr analysiert werden, statt Arrays.

Was die Code-Optimierung hinsichtlich Parser-Geschwindigkeit angeht: Du kannst dort das Verhalten des Parsers dir selbst anschauen indem du von dir konzipierten Source mit dem ParseKit durchläufst.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (08.01.2012 um 13:31 Uhr). Grund: ParseKit-Info hinzugefügt.
tr0y ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:07  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard

Optimieren: Gesamt-Laufzeit (laden - parsen - executen).

Die meisten Scripte laufen eh nur wenige ms. Ich habe keine Ahnung, wieviele ms davon laden des PHP Quelltexts, Parsen und Execution aus macht.

Es ist ja auch sehr schwer und aufwändig, sich darüber ganz konkrete Zahlen auf dem eigenen System zu beschaffen, da sind schnell viele Tage "Bastelei" rum. Daher frage ich, denn vielleicht hat ja der eine oder andere Infos dazu.

Ich habe bei meinem System auch das "Problem", dass selbst ein simples "paar-Zeilen-Script" mal 2ms, mal 30ms braucht. Da brauchbare eigene Erkenntnisse zu bekommen grenzt an Roulettspiel.

Andererseits macht es doch wohl schon Sinn, sich Gedanken zu machen, oder?

Danke nochmals
jwka
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:19  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Das einige Scripte mal 2 ms und mal 30 ms brauchen liegt zum einen daran das die Ausführungslatenz davon abhängt wieviel der Server sonst noch so macht und auch wieviel der Workerthread zu tun hat auf dem das Script läuft ( also die eigentliche Instanz die den PHP Parser aufruft ).

Generelle Dinge kann man zeitlich enger eingrenzen und auch diese Latenz in ihren Differenzen zu einander so gering wie möglich halten indem man von Anfang an ein Konzept benutzt das Steuernde Prozesse und Zusteuernde Prozesse von einander trennt: Deamon.

Ein Deamon wäre z.b. in der Lage deine Home-Automatisierungssoftware anzusteuern und dort Beispielsweise in Raum X/Y das Licht anschaltet, zu diesem Deamon würden dann Connector-Devices ( wie zum Beispiel: PCs, Handys, Lichtschalter ) Verbinden und entsprechende Funktionen aufrufen ( auf welchem weg auch immer - je nach ethablierten Deamon Interface ). Der Deamon würde in diesem Fall nur einmal mit Systemstart aufgerufen, statt 1000de Verschiedene Scripts Millionfach wenn event xy eintritt.

Da aber in irgendeiner Form irgendwelche Grundkonzepte aufzubauen und zu erklären ist sicherlich erst dann möglich wenn man das gesamtkonzept und die externen Möglichkeiten der API ( also die Nutzungsmöglichkeiten der API von außen ) im detail kennt. Ob man dann dort mit OOP ansetzen sollte ist sicherlich erstmal nicht von Belang, sondern im späteren Konzept des Deamons wichtig, denn der soll eins: 24/7/365 stabil und absturzfrei laufen.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:38  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard

Im aktuellen Fall (IPSymcon) ist, wenn man so will, der Daemon eben IPSymcon - das "Wirtssystem".

Schalter etc. und auch PCs, andere Programme usw. "connecten" sich dorthin und lösen dort Status- oder Variablenänderungen aus, die Events auslösen, welche wiederum den Aublauf eines Scripts initiieren können.

Nun kommt das problematische:

ALLES, was zu einem Scriptablauf benötigt wird, wird zur Laufzeit geladen. ALLE Variablen müssen neu initialisiert werden, Klassen erstellt werden etc. NIX ist im Speicher bereits vorhanden. Sämtliche (eigene globale wie lokale) Funktionen sind zu laden etc.

Daten früherer Läufe müssen gelesen werden (aus IPS oder aus Files - es gibt da allerdings Restriktionen und Laufzeitprobleme) und vor Scriptende wieder geschrieben werden (daher auch meine häufigen String-Repräsentanzen von Arrays, denn die kann ich nicht in IPS ablegen, nur String, Num und Bool).

Was mir bleibt, sind Optimierungen im Code selbst und im Lade-Zyklus.

Sowas wie einen Monitor oder (Laufzeit-)Debugger: Fehlanzeige.

Viele Funktionen (z.B. Zugriff auf vom Daemon zur Verfügung gestellte Werte wie Taster gedrückt oder IP Paket empfangen) sind nur mit IPS-Funktionen zu machen, daher ist Parsekit wohl nicht machbar.

Scriptlaufzeiten sind begrenzt (Sekunden), es können auch nur X Scripte parallel laufen (kann man stretchen, behebt aber grundlegende Restriktionen nicht). Es gibt keine gemeinsame Speicherbereiche ... und, und, und.

Wer's wissen will, kann das IPS ja mal testinstallieren. Läuft 30 Tage oder so kostenfrei ... "IP-Symcon" in Google.

jwka
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:45  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von jwka61 Beitrag anzeigen
Daten früherer Läufe müssen gelesen werden (aus IPS oder aus Files - es gibt da allerdings Restriktionen und Laufzeitprobleme) und vor Scriptende wieder geschrieben werden (daher auch meine häufigen String-Repräsentanzen von Arrays, denn die kann ich nicht in IPS ablegen, nur String, Num und Bool).
Dann serialisiere ? serialize, unserialize
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:54  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard

Ich lege Arrays i.d.R. in files ab - ist aber ein Geschwindigkeits-Bottleneck.

Serialize nutze ich soweit es geht.

Empfehlung Hersteller: Strings nicht größer als 1000 Byte je Variable (==Speicherort). KEINE "Sonderzeichen". Wird alles in einer XML Datei abgelegt ... serialize bläst die Datenmenge gewaltig auf. Ein Implode String ist viel kleiner.

Bastle mit einem Bekannten (ich kann das - noch - nicht) an einer Extension für IPS, das das Speichern von (strukturierten) Daten im RAM auch zwischen Scriptläufen zu lässt ... alles Zukunftsmusik und leider ist der Hersteller nicht bemüht, eine Abwärtskompatibilität zu wahren. Wenn morgen ne neue Version kommt, muss die DLL ggf. neu geschrieben werden ... nicht gerade ermunternd.

Ich fürchte aber, dass wir jetzt von der Frage zu einem Sezieren des Wirtssystems kommen ...

jwka
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Alt 08.01.2012, 15:57  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von jwka61 Beitrag anzeigen
Serialize nutze ich soweit es geht.

Empfehlung Hersteller: Strings nicht größer als 1000 Byte je Variable (==Speicherort). KEINE "Sonderzeichen". Wird alles in einer XML Datei abgelegt ... serialize bläst die Datenmenge gewaltig auf. Ein Implode String ist viel kleiner.
PHP-Code:
$storeThis base64_encode(serialize(array('a','b'))); 
PHP-Code:
$array unserialize(base64_decode($storeThis));

echo 
$array[0]; 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 08.01.2012, 16:06  
Erfahrener Benutzer
 
Registriert seit: 28.09.2009
Beiträge: 242
PHP-Kenntnisse:
Anfänger
jwka61 befindet sich auf einem aufstrebenden Ast
Standard

noch was:

Es hat was - gerade bei einer Hausautomatisierung - wenn man mal bei Fehlfunktionen in den gepeicherten Daten auch als Mensch ohne Hilfsmittel gucken, kann, was da gerade Sache war.

Das ist bei einem String wie

'Status=true|Dim=65|auto=true|cycle=108976|msg="fa iled to connect"'

ganz deutlich einfacher als

"YTo1OntzOjY6IlN0YXR1cyI7YjoxO3M6MzoiRGltIjtpOjY1O 3M6NDoiYXV0byI7YjoxO3M6NToiY3ljbGUiO2k6MTA4OTc2O3M 6MzoibXNnIjtzOjE3OiJmYWlsZWQgdG8gY29ubmVjdCI7fQ=="

Agree?

jwka
__________________
Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.
jwka61 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Seite Lädt mit PHP Code nicht xerox PHP Einsteiger 6 05.11.2011 19:35
[Erledigt] Lizenzen/Copyright am Code d0ne Off-Topic Diskussionen 8 31.08.2010 12:50
Probleme mit PHP Code HappyDieMuschel PHP Tipps 2008 7 28.05.2008 06:34
[Erledigt] PHP Code aus Datenbank ayti PHP Tipps 2008 8 26.05.2008 19:40
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Nur bestimmten Html Code zulassen? litterauspirna PHP Tipps 2008 5 29.04.2008 12:30
code optimierung für smarty engine dazerglovic PHP Tipps 2006 5 25.05.2006 19:57
PHP: Wie parst der Server den Code am schnellsten? SvenLittkowski PHP Tipps 2007 4 17.12.2005 10:58
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
[Erledigt] JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
code aus db mit eval replacen chief-thomson PHP Tipps 2005-2 4 08.07.2005 15:33
code verstecken Skazi PHP Tipps 2005 4 19.01.2005 13:51
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29
[Erledigt] mysql_free_result und Frage zur Optimierung Datenbanken 3 21.10.2004 12:10


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum