Как диагностировать медленное время отклика Google App Engine и Django для обслуживания веб-приложения?

Я развернул основанный на Django сайт портфолио - http://johnmcgurk.no - на App Engine, и мне трудно диагностировать, почему одно приложение имеет такое плохое время отклика. При запуске google PageSpeed Insights "основное" приложение на корневом url имеет начальное время отклика сервера ~6 с, в то время как вторичное приложение (демо-версия электронной коммерции) имеет все еще плохое, но гораздо лучшее время отклика около 0,8 с.

Приложение использует Google Cloud SQL с Postgres 14 для базы данных и ведро Google Image для обслуживания статических файлов и изображений.

Я совсем новичок в хостинге веб-приложений, поэтому за совет буду очень признателен, заранее спасибо!

Я искал в Интернете инструменты, которые помогли бы мне диагностировать узкое место, и запускал сайт на своей локальной машине с помощью google-sql-proxy в попытке исключить базу данных как корень проблемы (кроме того, сайт электронной коммерции использует гораздо больше запросов к базе данных), но не смог найти ничего полезного.

  1. Посмотрите на пулю 2 из ответа SO

    .
  2. По умолчанию GAE Standard настроен на "автоматическое масштабирование", что означает, что экземпляр отключается, когда у вас нет трафика, а затем снова запускается, когда получает "первый" трафик. Такой запуск нового экземпляра обычно занимает некоторое время.

    Некоторые способы решения этой проблемы следующие

    a) Настройте свой код так, чтобы библиотеки загружались только в тот момент, когда они необходимы

    b) Иметь всегда запущенный экземпляр и настроить разминку (см. docs)

Выглядит страница хорошо, но на ней есть ошибки Javascript. Похоже, что страница просто не может загрузить шрифты, и я не вижу, чтобы что-то происходило на странице или в веб-консоли до тех пор, пока загрузка не завершится неудачей, так что ваш код, должно быть, завис здесь.

Reason: CORS header ‘Access-Control-Allow-Origin’ missing

Во-первых, у вас возникают проблемы, когда вы пытаетесь GET получить файлы из Google Cloud. Вам необходимо включить CORS Cross Origin Requests, чтобы разрешить межсайтовые запросы на вашем сервере. Пожалуйста, отредактируйте ваш settings.py:

CORS_ALLOW_ALL_ORIGINS = True
CORS_ORIGIN_ALLOW_ALL = True

Если вы решите использовать SSL-сертификат, вам нужно будет добавить что-то вроде этого, я также включил некоторые настройки для обеспечения безопасности межсайтовых куки, потому что это хорошая практика:

SECURE_PROXY_SSL_HEADER = None
SECURE_SSL_REDIRECT = True
SECURE_SSL_HOST = "https://irisdocuments.com"
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 3600
SECURE_HSTS_PRELOAD = True

Если вы решили использовать какие-либо HTML-формы для отправки данных, мы должны учитывать и межсайтовые запросы - даже когда мы отправляем данные обратно на свой собственный url - с помощью токена csrf:

<form action="/CreateAccount/" method="POST" id="CreateAccountForm">
  {% csrf_token %}
  <label id="cemaillabel" for="cemail" class="confirmLabels">Email:</label>
  <input type="email" id="cemail" name="cemail">
  <br><br>
  <label id="cnamelabel" for="cname" class="confirmLabels">Name:</label>
  <input type="text" id="cname" name="cname">
  <br><br>
  <label id="cpwdlabel" for="cpwd" class="confirmLabels">Password:</label>
  <input type="password" id="cpwd" name="cpwd">
  <br><br>
  <label id="cpwdconfirmlabel" for="cpwdconfirm" class="confirmLabels">Confirm Password:</label>
  <input type="password" id="cpwdconfirm" name="cpwdconfirm">
  <br><br>
  <p id="textAgreement" style="font-size: small;text-align: center;margin-top: 1%;">By clicking 'Create Account' you agree to the Iris Documents 
    <a href="https://iris1-static.s3.amazonaws.com/static/TermsAndConditions.pdf" style="display: inline;">Terms and Conditions</a> and 
    <a href="https://iris1-static.s3.amazonaws.com/static/PrivacyPolicy.pdf" style="display: inline;">Privacy Policy</a>.
  </p>
  <button type="submit" id="cConfirmButton" class="button" style="width: 180px;display: block;margin-left: 10px;margin-right: 10px;">Create Account</button>
</form>

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

Посмотрев немного на ваш сайт, я увидел, что сайт электронной коммерции, о котором вы говорили, с объявлениями об аукционах загружается нормально, потому что на нем нет межсайтовых запросов, не выполняющихся из-за отсутствия заголовков CORS. Однако я щелкнул на аукционном объявлении и увидел, что у вас в settings.py включен режим отладки. У меня уже возникали проблемы с включенной отладкой, когда я пытался GET статические файлы на производственном уровне на живом домене. Так что если у вас все еще возникают проблемы, попробуйте отключить отладку.

Удачи, надеюсь, это решит ваши проблемы и поможет вам твердо встать на путь истинный!

Вернуться на верх