Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
У PHP проблема в том что он умирает.
Почему увеличилось использование памяти? Ведь данные должны быть общими для всех запросов, и мы могли бы их использовать напрямую из shared memory.
тупо парсеру нужно будет читать меньше данных
казалось бы такой шаг минификации пхп мог бы и сам сделать в момент чтения к примеру.
за прошедшие 10 лет принципиальных улучшений не произошло — топикстартер воюет все с теми же граблями.
прочим что бы код не превратился в гуано из бойлерплейта.
Лично я предпочитаю явное гуано и контролируемый Rumtime Env.
Ваше право, хотя вот честно, я не представляю как именно это «не явное»
А в тестах все зависимости мокаются
Это просто когда нету состояния у запрашиваемого объекта
$instances = [];
if (!isset($instances[$service])) {
$instances[$service] = invoke($service);
}
return $instances[$service];
class ContainerSpec extends ObjectBehaviour
function let(Invoker $invoker) {
$this->serviceInstance = new ServiceStub();
$invoker->invoke('service')->willReturn($serviceInstance);
$this->beConstructedWith($invoker);
}
function it_creates_instace_of_service()
{
$this->get('service')->shouldReturn($serviceInstance);
}
function it_returns_already_created_instance_if_have_one(Invoker $invoker)
{
$invoker->invoke('service')->shouldBeCalledTimes(1);
$this->get('service')->shouldReturn($this->serviceInstance);
$this->get('service')->shouldReturn($this->serviceInstance);
}
}
$this->serviceInstance = new ServiceStub(); Это просто стаб, по которому я проверяю что контейнер возвращает один и тот же объект
Использование длинных классов, хотя нужна только малая часть класса
// тут длинный код на 1000-2000 строк
После оптимизации мы максимально избавились от этих функций где возможно. Данные в файлах мы решили хранить в виде массива, сохранённого через var_export и загружать обратно через с помощью include/require. Таким образом мы смогли задействовать APC режим.Просто используйте igbinary.
К сожалению, для данных которые хранятся в memcache, данный подход не работает.
Загрузка конфига, который уже закэширован в виде опкода, сильно быстрее чем любая сериализация, бенчи это показывают.Буду признателен на ссылку на замеры.
Переносим создание объекта поближе к его первому использованию, уменьшаем время*объем используемой памяти.
Нестандартная оптимизация проектов на PHP