Технический аудит веб-сайта, интернет-маназина и профилирование кода
Технический аудит и профилирование кода, это такая же процедура, как тех. Осмотр автомобиля или поход к врачу. Мы делаем это если что-то случилось – по факту события или плановое – желаем знать все ли в порядке или необходима терапия.
Ваш проект
- Медленно загружается – работает
- Не стабильная работа и не понятны причины этой не стабильности, ваша команда разработчиков или разработчик не называют очевидных и понятных причин
- Не было постоянной команды разработчиков или разработчики менялись время от времени, и вы не уверены, что все моменты в коде были согласованы и они надлежащего качества
- Может ли масштабироваться – расти
- Будет ли готов обработать – принять количество подключений – клиентов, больше, чем сейчас
Что мы делаем
Анализ кода – соответствие общепринятым стандартам, поиск ошибок, стиль кодирования
Оценка производится на базе сервиса Scrutinizer, мы получаем отчет в виде понятного графика – общая оценка кода и рекомендаций, а также список ошибок.

Анализ программного обеспечения на сервере – последние обновления, наличие уязвимостей
Очень важно поддерживать в актуальном состоянии окружение и программное обеспечение, где работает проект. Если в ПО есть уязвимости, злоумышленник может ими воспользоваться. После изучения мы создаем отчет с рекомендациями, что стоит обновить и на что обратить внимание.
Пример
- PHP – Current version No Vulnerabilities
- MySQL – Total number of vulnerabilities – 14, more information – https://www.cvedetails.com/vulnerability-list/vendor_id-93/product_id-21801/version_id-234923/Oracle-Mysql-5.6.38.html
- Apache – No Vulnerabilities
- Debian – Total number of vulnerabilities – 15, more information – https://www.cvedetails.com/vulnerability-list/vendor_id-23/product_id-36/version_id-182793/year-2018/Debian-Debian-Linux-8.0.html
Нагрузочное тестирование
Мы используем Apache JMeter — инструмент для проведения нагрузочного тестирования для создания большого количества запросов с помощью нескольких компьютеров при управлении этим процессом с одного из них.
Этот вид тестирования очень полезно применять с одновременным профилированием кода (см. ниже), это даст больше информации в контексте вопроса – «как будет вести себя мой веб-сайт если мы запустим рекламную компанию или если к нам придет больше посетителей, чем у нас есть сейчас, будем ли мы готовы к этому?» Исходя из полученной информации будет видно, на что вам стоит рассчитывать. В некоторых случаях мы рекомендовали пересмотреть архитектуру проекта и использовать совершенно другие технологии, т.е. абсолютно неожиданный исход и разворот на 180 градусов.

Профилирование кода
Профилирование кода выполняется специальной программой – Blackfire, через которую мы получаем информацию о работе кода по таким параметрам как:
- Time – общее время выполнения программы/скрипта
- CPU Time – затраченное процессорное время на выполнение кода
- Memory – использование оперативной памяти
- HDD (read/write) – время чтения, записи на/с жесткий диск
- Network (Sent/ Receive) – сколько информации передается в сеть
- HTTP (external queries/Services that use the project) – использование внешних ресурсов в коде: SOAP, API, другое
- SQL Queries – количество запросов к базе данных, а так же время затраченное на их обработку SQL сервером

Этой информации вполне достаточно, чтобы выполнить хороший анализ кода, за короткое время (1-3 дня в зависимости от размера проекта или части анализируемого кода) и понять, какие меры следует предпринять для решения проблемы или для получения лучшего результата.
По опыту могу сказать, что были случаи, когда не корректная работа жесткого диска давала большую латентность 3-5 сек. И было потрачено много времени на оптимизацию кода и решение возможных проблем, которых в коде на самом деле не было
Профилирование выполняется в нашей тестовой среде – на нашем сервере, но мы можем организовать этот процесс и на вашей стороне при соблюдении определенных требований. Так же процесс получения информации может быть организован на основном сервере – в live режиме для сбора более «реальной» информации и это не повлияет на работу проекта.
Сбор информации
Сбор информации происходит только по запросу и не является постоянным, другими словами, мы собираем данные только тогда, когда, нам это нужно и только для конкретной страницы или функции.
В отличие от сервиса New Relic который мы так же рекомендуем использовать – собирает информацию все время и является по большей части мониторинг-сервисом, хотя и показывает очень детальную информацию по процессам.
Рекомендации
Наиболее частые рекомендации, которые мы даем уже после аудита:
- Обновление ПО на сервере (если требуется)
- Использование дополнительных модулей – программ для ускорения и кеширования данных: Varnish, Redis, OPCache
- Тюнинг настроек MySQL – зависит от объема базы данных и количества подключений
- Использовать PWA – Progressive Web Application
- Использовать CDN сервисы
Какой результат дает аудит, на сколько быстрее будет работать код?
Вопрос достаточно общий и зависит от конкретного проекта. Это может быть ускорение в 300% а может быть и в 10% но не сделав аудит, мы об этом никогда не узнаем.
Вы получите гарантированно:
- Общая оценка качества кода
- Есть ли ПО с уязвимостями и что с этим делать
- Готов ли ваш код выдержать новые испытания и принести новых клиентов
- Причины и решение проблем и как следствие рост производительности