Я обновил Nomads.com до PHP 8.2 с включенным Opcache, что...
163
Я обновил Nomads.com до PHP 8.2 с включенным Opcache, что позволило сократить загрузку страницы с 1000-2000 мс до ~250 мс (таким образом, в 4-8 раз быстрее), сообщает Levelsio.
Opcache кэширует PHP-файлы целиком в оперативной памяти.
Я хакнул его забавным способом: чтобы держать весь датасет Nomads постоянно в оперативке сервера.
Поскольку весь сайт построен на данных о городах/странах (от страниц городов и списков стран до профилей юзеров с их маршрутами), критически важно, чтобы эти данные были всегда доступны и загружались БЫСТРО.
Без Opcache загрузка всего датасета занимала около секунды, а с включенным Opcache это происходит буквально менее чем за 1мс (1/1000 секунды).
Особенность сайта в том, что в отличие от других проектов, нельзя просто взять и выбрать ОДИН город из БД для показа - нужны ВСЕ данные, потому что это рейтинг городов/стран по всему миру.
При этом база данных Nomads.com просто огромная и содержит миллионы постоянно обновляемых (каждую минуту) показателей:
— температура,
— качество воздуха,
— уровень безопасности,
— криминальная статистика,
— удобство для пешеходов,
— лайки/дизлайки пользователей,
— отзывы,
— анализ тональности отзывов,
— и даже курсы валют (которые влияют на стоимость жизни!).
Каждый час робот (PHP-крон) сжимает эту базу данных в один датасет с финальными значениями: например, есть более 100 показателей скорости интернета в городе, он вычисляет их медиану и определяет, что в Бангкоке скорость интернета должна быть 45 Мбит/с.
Затем этот робот записывает PHP-файл, который буквально представляет собой финальный датасет в виде PHP-массива, и этот файл загружается при каждой загрузке страницы.
Обновление происходит каждый час, поэтому данные и рейтинги всегда свежие.
Этот датасет используется на каждой странице Nomads для разных целей:
1. показа лучших городов для жизни и удаленной работы,
2. возможности супербыстрой фильтрации без миллионов обращений юзеров к БД.
А с Opcache все это постоянно находится в оперативке.
@MikeBlazerX

– https://x.com/levelsio/status/1854507708340142265
– https://t.me/MikeBlazerX
Источник новости https://t.me/mikeblazerx/4213...

