25 августа 2026 г.
Почему сайт не грузился на телефоне (и как мы это нашли)
Отчёт был предельно неприятный: сайт открывается бесконечно, потом падает в ошибку — на любом телефоне, в любом браузере, с VPN и без. При этом на ноутбуке по тому же Wi-Fi всё работало нормально. Первая гипотеза — DNS: A-запись домена реально указывала не на тот IP, и мы её поправили. Но проблема осталась. Вторая гипотеза оказалась куда фундаментальнее.
Настоящая причина
Почти каждая страница сервиса при рендере проверяет, залогинен ли пользователь — обращается к Supabase за сессией. Если этот запрос падает по сети (а мобильный интернет даёт заметно больше сетевых сбоев и задержек, чем стабильный Wi-Fi), он не просто говорит «пользователь не найден» — он выбрасывает исключение. И почти нигде в коде это исключение не перехватывалось. В итоге вся страница крашилась целиком, что в браузере выглядит как раз как «бесконечная загрузка → потом ошибка».
Самое неожиданное: этот же баг уже один раз чинили — но только в одном месте (общий layout и middleware), с явным комментарием в коде про «нестабильное мобильное соединение». Фикс просто не добрался до самих страниц — дашборда, аналитики, складов, поставок, карточки товара и так далее, — которые делали ту же самую проверку по новой, каждая сама по себе.
Что сделали
Завели один общий безопасный обработчик и применили его на всех восьми серверных страницах сервиса. Теперь при сетевом сбое страница просто отрендерится как «не залогинен» — можно обновить и попробовать снова, — вместо падения с ошибкой на каждый чих мобильной сети.
Мораль: если паттерн сбоя воспроизводится хуже на мобильном интернете, чем на Wi-Fi, и «то работает, то нет» — чаще всего дело не в мистике, а в необработанном сетевом исключении где-то на пути рендера. DNS в этот раз был красной селёдкой.
Хочешь увидеть эти цифры по своим товарам?
Попробовать SellOps бесплатно