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 07.01.2012, 09:47  
Neuer Benutzer
 
Registriert seit: 04.12.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
volkan61 befindet sich auf einem aufstrebenden Ast
Standard Objekte effizient abspeichern

İch beschaeftige mich momentan mit einem Projekt, welches mit OOP realisiert wird. Da ich neu in PHP bin fehlen mir elementare Grundkentnisse, deswegen sorry falls ich euch hier langweile İn PHP laeuft es ja so, dass nach jedem Seitenaufruf alle İnstanzen neu erstellt werden müssen. Um den Inhalt der Objekte zu speichern verwende ich serialze um die Objekte in einer TXT abzubilden bzw. unserialze um die Objekte nach jedem Seitenaufruf wieder zu laden. Das laeuft auch bis jetzt einwandfrei, jedoch habe ich das Gefühl, dass die Seite immer langsamer wird je mehr Objekte oder Klassenattributen ich verwende. Wie kann man komplexe Objekte abspeichern ohne die Effizienz zu beeintraechtigen? Kennt ihr eine Methode die perfomanter ist? Die Vorteile des SQL sind mir schon bewusst, aber kann man hier direkt Objekte abspeichern?

Gruss

Volkan
volkan61 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 07.01.2012, 10:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Serialisierte Objekte sind nur Zeichenketten, klar kannst Du. Die Frage ist nur, ob eine umfassende Persistierung generell sinnvoll ist.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 07.01.2012, 10:59  
Erfahrener Benutzer
 
Registriert seit: 22.07.2004
Beiträge: 226
DirkHo befindet sich auf einem aufstrebenden Ast
Standard

Je nach Anzahl der Objekte,... würde ich diese in der Session serialisiert abspeichern.

Benutzt du den Firefox? Der ist ja leider nicht mehr das was er mal war.
DirkHo ist offline   Mit Zitat antworten
Alt 07.01.2012, 11:11  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Ich würde die Session nicht als Cache missbrauchen. In den wenigsten Fällen macht eine Persistenz von Objekten wenig Sinn.
__________________
dsentker ist offline   Mit Zitat antworten
Alt 07.01.2012, 11:41  
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 volkan61 Beitrag anzeigen
İch beschaeftige mich momentan mit einem Projekt, welches mit OOP realisiert wird. Da ich neu in PHP bin fehlen mir elementare Grundkentnisse, deswegen sorry falls ich euch hier langweile İn PHP laeuft es ja so, dass nach jedem Seitenaufruf alle İnstanzen neu erstellt werden müssen. Um den Inhalt der Objekte zu speichern verwende ich serialze um die Objekte in einer TXT abzubilden bzw. unserialze um die Objekte nach jedem Seitenaufruf wieder zu laden. Das laeuft auch bis jetzt einwandfrei, jedoch habe ich das Gefühl, dass die Seite immer langsamer wird je mehr Objekte oder Klassenattributen ich verwende. Wie kann man komplexe Objekte abspeichern ohne die Effizienz zu beeintraechtigen? Kennt ihr eine Methode die perfomanter ist? Die Vorteile des SQL sind mir schon bewusst, aber kann man hier direkt Objekte abspeichern?

Gruss

Volkan
Spar dir serialisierung und speichere Daten als XML-Knoten, dort bilde ab welche klasse neu erzeugt werden soll und mit welchen daten diese befüllt werden müsste. Serialisierte Klassen sollten niemals irgendwelche prozesse durchführen die möglicherweise auch nochmal bei ihrer deserialisierung erneut passieren müssen ( zur validierung für die aktuelle Anwendungsituationen ), beiläufig fällt das unter Designfehler.

Bedenke auch das du nicht wild durch die gegend serialisieren solltest sondern wirklich nur daten "behälst" die du wirklich brauchst. Die Summe der Daten die dabei entsteht sollte nie hunderte von Objekte notwendig machen die vorher "da waren", denn die brauch man in der Regel überhaupt nicht und müllen nur den Speicher voll ( was deine ganze Anwendung ausbremst ).
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 07.01.2012, 11:50  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

xml parsen ist aber auch teuer. Daher würde mich der Hintergrund dann doch interessieren.
Zitat:
Serialisierte Klassen sollten niemals irgendwelche prozesse durchführen die möglicherweise auch nochmal bei ihrer deserialisierung erneut passieren müssen ( zur validierung für die aktuelle Anwendungsituationen ), beiläufig fällt das unter Designfehler.
Kannst Du das weiter ausführen?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 07.01.2012, 12:02  
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

XMLs sind dann "ressourcenintensiv" wenn du traversion nutzt um deine Daten zu extrahieren, nutzt du XSL-Sheets zum Data-Popping, schonst du deine ressourcen.

Klassen-Serialisierung:

Gehen wir von einer UserInfo-Klasse aus...
PHP-Code:
class User extends dataContainer implements iSerializable {
   protected
      
$userID,
      
$groupID,
      
$rights = array(),
      
$showAllOnPage1 false,
      
$showAllOnPage2 false,
      
$showAllOnPage3 false,
      
$showAllOnPage4 false,
      
$showAllOnPage5 false;

   public function 
__construct() { ... }
   public function 
__sleep() { ... } // iSerializable
   
public function __wakeUp() { ... } // iSerializable

   
public function __get($v) { ... } // getter
   
public function __set($k$v) { ... } // setter

$userID + $groupID hierbei wäre irrelevant, da diese validiert werden müssten, die session-logik wirft der deserialisierung den Grundstein vor das ein User Identifiziert werden sein muss, damit seine Session überhaupt geladen werden kann. Das selbe trifft auf das $rights-Array zu, das Daten darüber enthält was der User überhaupt darf / kann. Auch das wird im rahmen der Authentifikation mit geprüft und ausgelesen.

Sollte man dennoch "soviele" Daten vorhalten in der Session, ist es hier z.b. von nöten $userID, $groupID und das $rights-Array gegenzuprüfen.

Effektiv speichern sollte man in diesem Beispielfall also nur die restlichen "Zustände":
PHP-Code:
class User extends dataContainer implements iSerializable {
   protected
      
$showAllOnPage1 false,
      
$showAllOnPage2 false,
      
$showAllOnPage3 false,
      
$showAllOnPage4 false,
      
$showAllOnPage5 false;

   public function 
__construct() { ... }
   public function 
__sleep() { ... } // iSerializable
   
public function __wakeUp() { ... } // iSerializable

   
public function __get($v) { ... } // getter
   
public function __set($k$v) { ... } // setter

Ausreichend als Ausführung ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 07.01.2012, 13:13  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Ausreichend als Ausführung ?
Mir würde es ausreichen als Beispiel für "Umständliche Programmierung".

Was wäre denn falsch daran, später auszuwertende Daten gleich als Array so in die Session zu packen, daß man "ein paar Klicks später" damit noch was anfangen kann? Die Serialisierung von Objekten sieht nur auf den ersten Blick elegant aus. Elegant langsam...
  Mit Zitat antworten
Alt 07.01.2012, 14:16  
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

Arrays muss man analysieren, deserialisierte Objekte kannst du mit einem simplen instanceof ermitteln.. Von langsam im nano/microsekundenbereich zu sprechen halte ich außerdem für etwas gewagt ^^
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 07.01.2012, 15:05  
meikel
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Arrays muss man analysieren, deserialisierte Objekte kannst du mit einem simplen instanceof ermitteln..
Wir gehen mal kühn davon aus, daß das, was in der Session landet, vorher analysiert wurde. Natürlich kann man es auch zweimal prüfen, aber doppelt ist in dem Falle nicht unbedingt besser aber langsamer.

Zitat:
Von langsam im nano/microsekundenbereich zu sprechen halte ich außerdem für etwas gewagt ^^
Ich bin mal so köhn und spreche das aus. Mein Lieblingsspruch (auch diesbezüglich) ist "Der Wurm muß dem Fisch schmecken und nicht dem Angler."

OOP hat da seinen Zweck, wo es Zeit spart. Und Zeit besteht aus Lauf- und Entwicklungszeit. OOP-lastige, requestbasierte Serverscripte sollten nicht nur schön aussehen (OOP adelt ja... <ggg>) sondern auch schnell genug sein, um nicht am timeout zu sterben.

Klar, der timeout kommt nicht, wenn das Script auf einem einsamen Webserver loft. Aber man muß immer damit rechnen, daß jede konfigurierte Serverinstanz (idR. 100-150) auch mal Kundschaft hat.
  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
Objekte in Session, oder wie verfügbar halten? Igäl PHP Einsteiger 12 09.08.2011 19:49
Objekte mit Attributen variabler Anzahl und variablen Typs speichern Bergtroll Datenbanken 9 29.01.2011 14:54
Objekte in Array speichern und diese Verwenden michi_pader PHP Einsteiger 6 12.12.2010 17:24
[Erledigt] Zerstörung der Objekte am Ende eines Scripts ByStones PHP Tipps 2010 8 03.05.2010 14:01
[Erledigt] Browsergame : Objekte auf einer Karte BlackScorp Software-Design 10 01.04.2010 09:59
Verschachtelte Objekte und Vererbung GELight PHP-Fortgeschrittene 1 11.12.2009 09:09
Was bringt OOP wenn Objekte nach jeder Seite sterben? majorbenks PHP Tipps 2009 9 18.11.2009 14:11
[Erledigt] Referenzen auf Objekte innerhalb eines Arrays PHP-Fortgeschrittene 6 31.08.2009 17:06
[Erledigt] Wo liegen bei OOP die Objekte? Jafix PHP Tipps 2009 2 12.06.2009 18:14
[Erledigt] Objekte übergeben Felix PHP Tipps 2008 23 18.06.2008 12:21
Objekte zur Laufzeit Vererbung anhängen Zergling-new PHP-Fortgeschrittene 8 17.11.2007 17:31
[Erledigt] Objekte vergleichen PHP-Fortgeschrittene 4 08.12.2005 16:20
[Erledigt] Verständnisfrage OOP - Objekte in MySQL Datenbank schreiben? PHP Tipps 2005 2 19.05.2005 21:40
Ganze Objekte an Script weitergeben dreamingof8a PHP Tipps 2004-2 6 23.11.2004 12:17
[Erledigt] Referenzen auf Objekte PHP-Fortgeschrittene 2 17.08.2004 11:08

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
effizient oop php, php objekte speichern

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:40 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