2010-11-29 2 views
3

Я работаю над проектом, который использует PHP для создания «комплекса» объекта с большим количеством ссылок на другие объекты, связывающих обратно к их родительским объектам и т.д. ...Zend AMF Optimization; Советы и приемы?

Структура объекта затем сериализуются Zend AMF и отправлен в приложение flex.

Проблема в том, что сериализация занимает много времени (+ 10sec).

Мой вопрос: может ли кто-нибудь дать мне советы о том, как работает сериализация, и каким образом я смогу оптимизировать структуру объекта, чтобы сделать сериализацию более быстрой?

+0

использование APC или MEMCACHE! он должен помочь – tawfekov 2010-11-29 14:05:17

+0

Насколько я могу сказать, невозможно кэшировать двоичный ответ AMF, так как он отвечает на сложный запрос POST, кеширование структуры объектов, созданных PHP, бессмысленно, поскольку оно работает в кратчайшие сроки. – Goldfrapper 2010-11-29 14:33:23

ответ

0

Сериализатор по умолчанию будет выполнять итерацию по каждому свойству, если свойство является объектом, то оно будет проходить через каждый из этих объектов и их свойства до тех пор, пока это не будет выполнено.

Поскольку ваш объект сложный, происходит много хрустов и много уровней объектов, которые сериализуются.

В качестве точки оптимизации вы можете изучить возможность реализации сериализуемого интерфейса на ваших объектах и ​​сериализацию минимального объема информации, требуемой для сериализации и отправки по кабелю в приложение Flex.

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

+0

Будет ли Zend AMF использовать сериализуемую реализацию при сериализации в AMF-3? – Goldfrapper 2010-11-30 13:18:53

+0

Теперь, когда я смотрю код для Zend_Amf_Parse_Amf3_Serializer, я вижу, что сериализатор полностью настраивается (хороший, Adobe) - так что нет, он не будет использовать этот интерфейс сериализации. Мой ответ бесполезен в этом конкретном случае. :) – 2010-11-30 13:36:27

1

Переключение в JSON поможет много с этим, поскольку это позволяет упростить кэширование.

APC также поможет, как раз для части кеш-кода, а не для хранения объектов в памяти.

Насколько велик этот объект? Может ли это стоить того, чтобы не отправлять всю вещь? Если вы просто имеете дело с наборами записей, вы можете исправить это в интерфейсе, загрузив только то, что пользователь может увидеть или увидит в ближайшем будущем.

0

При выполнении сериализации AMF или любой сериализации в этом случае обычно лучше работать с меньшими фрагментами данных, если производительность является проблемой. Поступая таким образом, вы можете работать с отдельными объектами как с реальными объектами ActionScript, а не только с заполнителями данных. Меньшие данные при выполнении любого типа RPC обычно лучше. Вы можете использовать JSON вместо этого, но тогда вы потеряете жесткую привязку данных, которую вы получаете от использования AMF. Поэтому попробуйте работать с меньшими пакетами данных, используя несколько HTTP-запросов.