Загрузка модели CakePHP занимает некоторое время - PullRequest
3 голосов
/ 24 декабря 2011

Почему App::import('*', '*');, а загрузка модели занимает ~ 3-5 мс?

Это довольно раздражает, когда у вас есть около 100 необходимых моделей для страницы; Для загрузки ядра и моделей потребуется более или менее 300 мс.

Кроме того, я увидел, что это время загрузки не уменьшается, когда включена система кэширования.

У вас есть идея, почему так долго и еще нужно сокращать это время для приложения, которому нужно много моделей?

Заранее спасибо!

РЕДАКТИРОВАТЬ : Когда я использую кэш-систему file (с режимом отладки до 0), я вижу, что свойство дата создания файла, созданного Кэш всегда такой же, как в прошлый раз, когда я генерирую страницу. Это означает, что кэш восстанавливает файлы модели каждый раз (несмотря на то, что режим отладки установлен в 0). Это нормально?

EDIT2 : Когда я открываю файлы кэша модели с помощью Notepad ++, в начале появляются флаги "nul", которых у меня нет в других файлах кэша (например, persistent ).

EDIT3 : Короткая история : Почему время загрузки модели так долго, если система кеша включена, как это было бы без этой системы кеша?

Ответы [ 3 ]

1 голос
/ 25 декабря 2011

Действительно, я вижу тег, пользователя, вопрос, комментарий, рекламу и несколько пользовательских запросов поиска для каждого. (Эта страница). В этом случае не требуется, чтобы понравившиеся или общие или эти атрибуты были моделями. Если вы получите это гранулированное, то вам следует ожидать смягчения проблем с загрузкой.

Если вам нужно использовать 30 моделей на одной странице, значит, вы делаете что-то нелогичное или ваш вариант использования далеко выходит за рамки нормы.

0 голосов
/ 27 декабря 2011

Оптимизация является относительной задачей. Ваше время и ресурсы лучше всего потратить на оптимизацию части приложения, которая, как считается, потребляет наибольшее количество ресурсов. Если ваше узкое место составляет всего 3 мс, тогда мне трудно понять, зачем вам вообще нужна какая-либо оптимизация.

При этом, если вы просто очень любопытный человек, намеревающийся найти ответ на свой вопрос, я бы посоветовал вам сесть и выполнить некоторое профилирование внутреннего кода, чтобы разобрать, что влияет на время выполнения , Список рассылки CakePHP может быть еще одним полезным ресурсом для понимания того, как работают внутренние компоненты Cake.

0 голосов
/ 26 декабря 2011

Обратите внимание на пару вещей:

Приложение: импорт ('', '') загружает все - так что только оно будет захватывать ресурсы.Если у вас есть страница с более чем 30 запросами модели - сначала получите данные через их отношения.Не используйте $ this-> loadModel () или массив $ использует;это не то, как CakePHP был разработан для использования.Посмотрите здесь мой ответ на лучшую практику:

cakephp: как получить доступ к другой модели, которая не имеет связи

Затем вы можете дополнительно ограничить выборку данных (что увеличиваетскорость):

Как ограничить поля связанных моделей, используя метод поиска

Re: Cache - читайте об этом в книге CakePHP, поскольку она излагает некоторыехорошие примеры.Если вы боретесь, возможно, стоит перейти на MemCache или другую выделенную систему вместо плоских файлов CakePHP.

...