Как я боролся с лагами на сайте
Обзор проблемы и её возможный источник
Началось всё довольно невинно, проверял в очередной раз работу пагинатора, думал как бы улучшить его так, чтобы не лезть на сервер. Как вдруг жду загрузку страницы уже как 10 секунд, потом 20, потом минуту. Я так и не дождался.
Ну класс, наверное опять напортачил в JS или ещё хуже в Django представлении. Сделав быструю интроспекцию кода и протестировав его несколько раз, я не нашёл ошибки.
Это вдруг стало интересно и п****ц как угнетать _(┐「ε:)_. Ведь с такой работой сайта мои поведенческие факторы резко упадут. И я начал думать, что могло статься с сайтом. Есть 4 возможных источника проблем:
- У меня просто плохой интернет и плохо ловит.
- Какие-то проблемы с сайтом
- Какие-то проблемы с браузером
- Какие-то проблемы с сервером
Первый вариант отпал, проверив скорость связи, я двинулся дальше.
Возможно проблема в моём сайте
Со вторым вариантом, предстояло разобраться. Видишь ли, задержка была не только на страницах пагинации, а на всём сайте. Даже админка, и та испытывала задержки. Что общее связывало обычные статические страницы, пагинатор, статьи и django-админку? Только одна вещь - это модели. Я подумал, хм …, а может я как-то плохо делаю запросы в базу данных? И этот вариант то же отпал, ибо я ни как не влияю на то как делаются запросы в базу данных со стороны админки, но она тоже лагает.
Тогда, может дело в самих моделях? Я недавно очень сильно их менял и создал не мало миграций. Что конечно могло повлиять на общую скорость, но единственным способом проверить это, значит снести всю базу данных и пере заполнить её ещё раз ВРУЧНУЮ. Да, конечно, она не сильно большая, 25 статей 65 определений, 30 вопросов ещё 20 инструментов и архивов. Но чёрт, я отложил этот вариант на потом. Да и судя по проектам которые я видел, мои 10 миграций это ничто, по сравнению с ними.
Может, браузер проблема
Третьим вариантом было то, что у меня что-то с браузером. По этому я пересел на хром, и не поверите, сработало. Ну ..., то есть почти. Лаги и задержки остались, но хром дождался и в конце концов возвращал мне необходимые страницы. С админкой было то же самое.
Как ты можешь видеть, целых десять секунд хром просто ждал. И в документации хрома сказано, что Stalled состояние значит, цитата:
Теперь нужно узнать какая ошибка возникает при попытке достучаться до сервера. Для этого нужно сделать дамп сетевой активности, во время запроса на сервер. Введём chrome://net-export такой запрос в поиск и начнём записывать наш дамп.
После того как я поймал очередной простой и записал дамп нужно будет его ещё прочитать. Откроем https://netlog-viewer.appspot.com/#import и перейдём в EVENTS. Найдём соответствующее событие. В моём случае это был запрос страницы пагинации статей.
Откроется ещё одно окно в котором можно найти огромный скачок во времени:
Здесь можно выделить ошибку ERR_HTTP2_PING_FAILED. Эта ошибка говорит, что «клиент», то есть браузер, не дождался ответа на запрос. По этому он попытался сделать ещё один запрос и о чудо, сервер ответил. И чтобы наверняка убедиться что эта проблема не связана с работой браузера я ещё сделал следующие вещи, которые не помогли:
- Обновил браузеры до последних версий (они уже были у меня)
- Очистил кеш и куки
- Отключил все расширения
- Отключил эксперементальную фичу QUICK (только для хрома)
- Очистил DNS кеш
Полный список, того что можно было бы сделать в такой ситуации ты найдёшь на сайте https://10web.io/blog/resolving-the-err_http2_protocol_error/
Тогда, дело в хостинге
Всё это оставило меня с последним вариантом, что-то с сервером и хостингом. Но я так ничего и не нашёл. Ни в одном из доступных мне конфигурационных файлах. И начал думать о том, чтобы обратиться в службу поддержки хостинга. Хотя перед этим шагом, чтобы не обвинять их зря, ведь возможно я что-то упустил или не досмотрел. Было решено развернуть сайт на другом хостинге и посмотреть что будет там.
Славу всем ДНС серверам и двоичному коду, до этого не дошло.
Давай вернёмся в самое начало, где я проверял качество интернета. Так вот, я решил проверить сам IP. То есть поменять его используя VPN и прокси. И вот свершилось, без каких-либо задержек (учитывая тот факт, что я использую VPN). То есть мой IP, каким-то образом попал в чёрный список beget и теперь нужно его от туда вытащить, или просто использовать прокси для доступа к сайту.
Вот такое вот небольшое расследование я провёл. Чувствую себя как мамин хацкер или даже пентестер ( ^◡^)
0
Использованные термины
- Комментарий ⟶ Это оставленное пользователем сообщение на сайте.
- Вебсайт ⟶ Это совокупность связанных между собой веб-страниц, доступных через интернет и имеющих одно общее доменное имя. Каждый веб-сайт может содержать текстовую информацию, изображения, видео и другие мультимедийные элементы. Веб-сайты могут выполнять различные функции, включая предоставление информации, общение, онлайн-торговлю и множество других взаимодействий.
Релевантные вопросы
- Как можно увидеть необработанные SQL-запросы, выполняемые Django? Убедитесь, что настройка Django DEBUG установлена на True. Затем импортируйте соединение из django.db. connection.queries доступен только если DEBUG имеет значение True. Это список словарей в порядке выполнения запроса. Каждый словарь имеет свойство sql и time.
- Назовите несколько способов сократить время загрузки веб-сайта? Вот несколько способов сократить время загрузки сайта: 1) Найдите решение для хостинга с оптимизированной производительностью. 2) Сжимайте изображения и другой визуальный контент. 3) Уменьшите перенаправление URL. 4) Размещайте файлы JavaScript и CSS во внешнем хранилище. 5) Инвестируйте в сеть доставки контента (CDN). 6) Удалите ненужные дополнения