@MdaUZH

Качество кода ради производительности?

Всем привет, возник вопрос.
Качество или скорость?

В рамках разумного...

Имеется ввиду, например:
Есть классы:
  1. Автозагрузчик
  2. Приложение
  3. httpRequest
  4. httpResponse


каждый класс в отдельном файле.
Провел тестирования ab
1. (ab -c 100 -n 1000 http..)
    Результаты:
    за секунду обработать 86 запросов.
2. Загрузка в браузере (microtime, memory usage)
    Результаты:
    на выполнение 1 сценария требуется: 0.026 сек и 416,77 кБ памяти


Сделал так:
Запихнул все эти классы в 1 общий файл(т.к они при любом сценарии они подгружаются)

Провел снова тесты:
1. ab - 101 запрос в секунду
2. браузер 0.03 сек и 405,5 кБ памяти


Скорее всего тесты проводят не так и результаты очень грубые и т.д

Ну дак в чем собственно вопрос, стоит ли делать подобные жертвы ради производительности?
Почему?

Буду очень благодарен за ответ, всем спасибо)

* дополнил:
Сколько в среднем у вас выделяется памяти на сценарий и сколько времени это занимает?
  • Вопрос задан
  • 206 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ну дак в чем собственно вопрос, стоит ли делать подобные жертвы ради производительности?


Нет, достаточно просто настроить opcache нормально:

1) использовать автозагрузчик который генерит вам composer (обязательно с флагом -o, тогда он сдампит жирную мэпу классов и не будет дергать файловую систему просто так)

2) Отключить инвалидацию кэша в opcache (opcache.validate_timestamps=0) и сбрасывать кэш вручную при деплое

3) проверить через API opcache как там по выделенным ресурсам. Для вашего теста скорее всего дефолта хватит за глаза. Для больших проектов уже можно поиграться с размерами буферов. Читать в документации о функциях opcache что бы статистику собирать.

4) обновитесь до php7

p.s. среднее время ответа для простеньких запросов - 30ms, память - 10-15Mb. Если запускать симфони в php-pm, то запросы отдаются за ~10-15ms, потребление памяти на запрос посчитать немогу (так как все запущено как демон). Но этот вариант пока рекомендую для очень простых апишек где нужна скорость реакции системы.
Ответ написан
27cm
@27cm
TODO: Написать статус
Ну дак в чем собственно вопрос, стоит ли делать подобные жертвы ради производительности?

Зависит от конкретной ситуации и размеров проекта. Если брать случай, что вы описали. Так можно пойти ещё дальше - вообще отказаться от классов, наверняка ещё каких-нибудь 0,005 секунд выиграете.

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

Не стоит экономить на спичках, когда можно добиться куда большего выигрыша в производительности другими путями, не жертвуя читаемостью кода: ruhighload.com

Сколько в среднем у вас выделяется памяти на сценарий и сколько времени это занимает?

Странный вопрос. Всё равно, что спросить "Сколько в среднем весят животные?"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Silm
Есть смысл оптимизировать в ущерб удобству и понятности либо небольшие критичные части, либо то, что больше трогать в будущем не придется. Но с последнем можно и не подгадать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы