php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.08.2008, 15:52  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 993
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard Code Optimieren

Hi Community,

Ich arbeite im Moment an einem PHP Programm das als Applikation auf einem Root server laufen wird. Die Problematik dabei ist, dass das PHP Programm das ich schreibe einerseits Eingaben von einem anderen Server über sockets erhalten muss, anderseits aber auch eigene "Timed Jobs" ausführen muss, d.h. eine Methode z.b. alle 3 Sekunden aufrufen.
Im Moment habe ich es so gelöst, dass eine Methode daten im non-blocking mode vom Server holt (bricht mit false ab falls unmöglich) und eine art "Registry" für die Timedjobs. Beides wird in einer while schleife hintereinander aufgerufen. Zudem habe ich einen utime() sleep drin, um die CPU nicht so hoch zu belasten (40ms pause zwischen 2 Schleifendurchläufen).

Hier bekommt ihr erstmal den Code (unwichtiges weggelassen (sonst wäre es über 500 Zeilen lang))

PHP-Code:
    public function callbacks() {
        
$this->_callbacks();
        if(
count($this->receivedCallbacks)) {
            foreach(
$this->receivedCallbacks as $key=>$callbackrcv) {
                
$cb $callbackrcv[0];
                
$args $callbackrcv[1];
                unset(
$this->receivedCallbacks[$key]);
                if(!
array_key_exists($cb$this->callbackRegistry)) {
                    continue;
                }
                foreach(
$this->callbackRegistry[$cb] as $toCall) {
                    
$class = &$this->kernel->load($toCall[0]);
                    
$method $toCall[1];
                    
call_user_func_array(array($class$method), $args);
                }
            }
        }
    }
    public function 
run() {
        
// [...]
        
$lasttime time();
        while (
true) {
            
// Do timed actions
            
if($lasttime time()) {
                
$lasttime time();
                if(
count($this->timedRegistry)) {
                    foreach(
$this->timedRegistry as $key=>$value) {
                        if(
$lasttime%$key == 0) {
                            foreach(
$value as $timedJob) {
                                
$class = &$this->kernel->load($timedJob[0]);
                                
$method $timedJob[1];
                                
call_user_func(array($class$method));
                            }
                        }
                    }
                }
            }
            
// Do callback bound actions
            
$this->callbacks();
            
// Wait some time (otherwise too heavy cpu weight)
            
usleep(400000);
            
// Flush the cache (delete unused Data)
            
flush();
        }
    } 
Es funktioniert, doch was mich stört sind diese dauernde if und foreach anweisungen. Kann man das nicht noch runter kürzen? Wäre da für Vorschläge offen.

Ach ja die TimedJobs und Callback Funktionen werden wie folgt eingetragen und gespeichert
PHP-Code:
    public function registerCallback($function$callbackname) {
        
$this->callbackRegistry[$callbackname][] = $function;
    }
    public function 
registerTimedAction($function$timeinterval) {
        
$this->timedRegistry[$timeinterval][] = $function;
    } 
Danke schonmal im voraus.

PS: Ich sollte noch erwähnen dass es hier vorallem um Speed geht
__________________

Geändert von Frank (19.08.2008 um 15:54 Uhr).
Frank ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

 


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
JAvascript und Php - code funktioniert nicht Black-Devil JavaScript, Ajax und mehr 1 01.08.2008 15:01
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
einfacher Code zum Einbinden von "Inhaltsbereichen" MaxDittmann PHP-Fortgeschrittene 6 01.10.2007 15:54
Datei einfügen aus Ausgabepuffer, damit PHP Code funktionier NetLook PHP Tipps 2006 17 25.10.2006 15:09
FiFo macht Probs beim Css Code Matthiasnet HTML, Usability und Barrierefreiheit 10 18.08.2006 13:14
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
Seite 1/2/3..Code was haltet ihr davon? Matthiasnet PHP Tipps 2005-2 4 29.07.2005 20:29
[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
Bestätigungmail code? PHP Tipps 2005 7 16.05.2005 13:18
[Erledigt] BB Code entfernen PHP Tipps 2005 2 25.04.2005 15:20
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php code optimieren kommentare löschen

Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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