2010-11-29 11 views
3

ich an einem Projekt arbeite, die PHP verwendet ein ‚Komplex‘ Objekt mit vielen Referenzen auf andere Objekte zu erstellen usw., um ihre übergeordneten Objekte Verknüpfung zurück ...Zend AMF Optimierung; Tipps und Tricks?

Die Objektstruktur wird dann durch die serialisiert Zend AMF Modul und an die Flex-Anwendung gesendet. Das Problem ist, dass Serialisierung viel Zeit braucht (+ 10sec).

Meine Frage ist also: kann mir jemand Tipps geben, wie die Serialisierung funktioniert und in welcher Weise kann ich optimieren die Objektstruktur, um Serialisierung schneller laufen zu lassen?

+0

Verwenden Sie APC oder MEMCACHE! Es sollte helfen – tawfekov

+0

Soweit ich sagen kann, ist es unmöglich, die binäre AMF Antwort zwischenspeichern, da es auf eine komplexe POST-Anfrage reagiert, Caching der PHP-generierten Objektstruktur ist sinnlos, da es in kürzester Zeit läuft. – Goldfrapper

Antwort

0

Der Standard-Serializer wird jede Eigenschaft durchlaufen, wenn eine Eigenschaft ein Objekt ist, wird sie dann jedes dieser Objekte und ihre Eigenschaften durchlaufen, bis es fertig ist.

Da Ihr Objekt komplex ist, gibt es viele Knirschen und viele Ebenen von Objekten, die serialisiert werden.

Als Optimierungspunkt möchten Sie vielleicht die serialisierbare Schnittstelle für Ihre Objekte implementieren und die minimale Menge an Informationen serialisieren, die Sie serialisieren und über die Leitung an Ihre Flex-App senden müssen.

http://php.net/manual/en/class.serializable.php

+0

Wird Zend AMF die serialisierbare Implementierung bei der Serialisierung zu AMF-3 verwenden? – Goldfrapper

+0

Nun, da ich den Code für Zend_Amf_Parse_Amf3_Serializer betrachte, sehe ich, dass der Serializer vollständig benutzerdefiniert ist (nett, Adobe) - also nein, es wird diese Serializer-Schnittstelle nicht verwenden. Meine Antwort ist in diesem speziellen Fall nutzlos. :) –

1

zu JSON Switching wird viel dabei helfen, da es einfacher Caching ermöglicht.

APC hilft auch, nur für den Opcode-Cache-Teil, nicht zum Speichern von Objekten im Speicher.

Wie groß ist dieses Objekt genau? Kann es sich lohnen, das Ganze nicht zu schicken? Wenn Sie nur mit Recordsets arbeiten, können Sie es möglicherweise im Frontend reparieren, indem Sie nur das herunterladen, was der Benutzer sehen kann oder in naher Zukunft sehen wird.

+0

A habe keinen Zugriff auf die Flex/Flash App. Das Datenmodell wird vom Flash-Dev festgelegt. Und er will alle Daten auf einmal. – Goldfrapper

0

Bei der AMF-Serialisierung oder einer beliebigen Serialisierung ist es normalerweise besser, mit kleineren Daten zu arbeiten, wenn die Leistung eine Rolle spielt. Dadurch können Sie einzelne Objekte als echte ActionScript-Objekte und nicht nur als Datenplatzhalter verwenden. Kleinere Daten, wenn Sie irgendeine Art von RPC durchführen, sind normalerweise besser. Sie könnte JSON stattdessen verwenden, aber dann verlieren Sie die enge Datenbindung, die Sie von AMF erhalten. Versuchen Sie also, mit kleineren Datenpaketen zu arbeiten, indem Sie mehrere HTTP-Anfragen verwenden.

+0

Der Dataset und sein Modell wurden vom Flash-Dev korrigiert. Also kann ich dort keine Änderungen vornehmen. Ich muss wissen, wie Zend AMF die Daten serialisiert, ich verwende bereits das Zend_Amf_Value_Messaging_ArrayCollection Objekt für Array Container – Goldfrapper

+1

Der Serializer wird intern von Zend_Amf_Parse gemacht.Es gibt zwei Arten von Serialisierern; Zend_Amf_Parse_Amf0_Serializer und Zend_Amf_Parse_Amf3_Serializer. Sie nehmen den Rückgabewert aus dem Dienstklassenaufruf und wandeln ihn in eine Zeichenfolge um. Wenn du sehen willst, was los ist, versuche es mit dem Zend Debugger/Profiler (http://www.zend.com/de/community/pdt) oder noch besser, installiere eine Testversion von Zend Server (http: // www. zend.com/en/products/server/) und verwenden Sie Code Tracing, um genau zu sehen, was zur Laufzeit aufgerufen wird. –