2012-06-10 4 views
2

В каждой документации CakePHP написано, что requestAction снижает производительность CakePHP. Всегда рекомендуется использовать действие контроллера и получать результаты с файлом представления. Но иногда мне действительно нужна requestAction.requestAction performance в CakePHP

CakePHP book:

Если используется без кэширования requestAction может привести к снижению производительности. Он редко подходит для использования в контроллере или модели.

Какие процессы делают reuqestAction для снижения производительности.

Что нужно делать, чтобы предотвратить потерю производительности requestAction? Добавление такой вещи?

$this->autoRender = false
на контроллер действия,

function beforeFilter() { 
    if ($this->params['action'] == "myaction") { return; } 
} 

контроллер класса

+1

'requestAction' получает bum ​​rap, но на самом деле это не так * плохо *, так как большая часть времени запроса разговаривает с сервером и интерпретирует в браузере, что не делается, поскольку это технически в одном HTTP-запросе , Попробуйте выполнить некоторые быстрые бенчмаркинга, чтобы увидеть: – jeremyharris

ответ

1

Вы могли бы начать смотреть на how it is written.

Как я читал, было бы каждый раз, когда он будет повторно проанализировать URL (в Router::normalize()), создает новый экземпляр CakeRequest (который always loads configuration), а затем попытаться Dispatcher::dispatch().

P.S. .. Это гигантский беспорядок, я даже не вижу, в какой точке кеша там используется .. если когда-либо.

1

В основном requestAction() попадет свое действие с дополнительной запросе страницы. Кроме того requestAction() обрабатывает URL по-разному, потому что он будет возвращать данные, отличные от строки. Поэтому на контроллере вам нужно сначала проверить тип запроса возврата.

Вот хорошая статья о requestAction()

1

(После 1,5 лет опыта CakePHP) Я могу сказать, что если есть requestAction, существует потребность в рефакторе. В первые месяцы я добавлял слишком много requestActions. После получения информации о том, что requestAction снижает производительность, я больше не добавлял.

С пропуском месяцев я удалил почти все requestAction из своих кодов. В большом репозитории кода у нас есть только 3-4 requestActions, и их можно только разыскивать один раз в день. Если вы используете requestAction, вам не хватает ценной информации из уровня контроллера для просмотра слоя. Пожалуйста, переосмыслите использование.

Смежные вопросы