Оптимизация скорости за счет отключения модуля отчетов Mage?


Когда вы думаете об оптимизации скорости Magento, есть несколько возможностей, таких как кэширование (PHP, база данных, даже кэширование всей страницы), чтобы ускорить ваш сайт.

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

Недавно я задался вопросом, можно ли/безопасно деактивировать модуль Mage_Reports.

Это находится в файле app/etc/modules/Mage_All.xml как

<Mage_Reports>
    <active>true</active>
    <codePool>core</codePool>
    <depends>
        <Mage_Customer/>
        <Mage_Catalog/>
        <Mage_Sales/>
        <Mage_Cms/>
    </depends>
</Mage_Reports>

Итак он поставляется в комплекте с ядром и зависит от нескольких других модулей.

Однако я не вижу других модулей, имеющих Mage_Reports в качестве зависимости.

Я деактивировал его в тестовом магазине, и, похоже, все работает нормально.

Вопрос => Правда ли, что помимо потери данных отчетов, конечно, магазин может хорошо работать без этого модуля?

Или есть какие-либо моменты, в которых мой магазин сломается, если этот модуль не активирован?

Author: Rohan Hapani, 2013-01-24

2 answers

Ваш магазин может работать, это правда, если у вас также отключены графики панели администратора. На самом деле, хотя все зависит от программистов и от того, как они справляются с ситуациями, когда модули отключены. Проблема в том, что в Magento 1.x нет механизма обработки, который автоматически решил бы эту проблему за вас. Если вы посмотрите на

public function getResourceModelInstance($modelClass='', $constructArguments=array())
{
    $factoryName = $this->_getResourceModelFactoryClassName($modelClass);
    if (!$factoryName) {
        return false;
    }
    return $this->getModelInstance($factoryName, $constructArguments);
}

Он вернет false, когда модуль отключен. Это означает, что все Mage::getModel('reports/.. будут false и каким бы методом вы ни попытались это вызвать (должен быть) объект выдаст вам Call to a member function on a non-object php фатальную ошибку.

В то время как команда Magento выполнила свою работу (ну, на самом деле они этого не сделали, например, если вы включите диаграммы, которые ваш администратор должен разбить на панели мониторинга), вы не можете знать, как сторонние расширения будут справляться с этими ситуациями в случае, если они попытаются использовать модуль Reports.

Итак, если вы убедитесь, что обрабатываете все ситуации, в которых вызывается reports, вы можете отключить его. В противном случае лучше этого не делать.

 3
Author: Jernej Golja, 2013-01-24 19:03:01

Я не могу сказать вам, что произойдет, если вы отключите модуль, но я могу сказать вам, как вы можете (вероятно) остановить его воздействие на обработку, не отключая его.

Все затраты на его обработку поступают от наблюдателей. И, возможно, работа в Xeon, но здесь это не имеет значения. Если вы можете прекратить наблюдение за событиями, вы можете устранить накладные расходы.

Наивным способом было бы отредактировать config.xml и прокомментируйте их. Не делай этого.

Правильным способом было бы создать свой собственный модуль, который зависит от Mage_Reports и просто имеет config.xml . В этом определите тег переднего плана и скопируйте все наблюдатели из Mage_Reports. Затем измените событие, которое они наблюдают, на какое-нибудь бессмысленное, не реальное событие, которое никогда не уволят. Затем добавьте тег под наблюдателем с именем type со значением disabled.

Если вы посмотрите в событии отправки в App.php вы сможете увидеть, что это работает. Вы перезаписываете их с помощью отключенного наблюдателя. Ничто не вызывается и ничего перерывы!

 2
Author: Tim Reynolds, 2013-01-26 15:46:27