Spec-Zone.ru › Wagtail

Производительность

Wagtail разработан для скорости, как в интерфейсе редактора, так и на переднем плане. Но если вам нужна ещё большая производительность или вы хотите обрабатывать очень большой объём трафика, вот несколько советов по эффективному использованию вашей установки.

Интерфейс редактора

Мы старались свести к минимуму внешние зависимости для работоспособной установки Wagtail, чтобы сделать его максимально простым в использовании. Однако, для повышения производительности можно настроить ряд параметров по умолчанию:

Кэширование

Мы рекомендуем Redis в качестве быстрого и постоянного кэша. Установите Redis через ваш менеджер пакетов (в Debian или Ubuntu: sudo apt-get install redis-server), добавьте django-redis в ваш requirements.txt, и включите его как кэш-бекенд:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/dbname',
        # for django-redis < 3.8.0, use:
        # 'LOCATION': '127.0.0.1:6379',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

Кэширование представлений изображений

Если вы определите кэш с именем «renditions» (обычно наряду с кэшем «default»), Wagtail будет кэшировать запросы к представлениям изображений, что может улучшить производительность страниц, содержащих много изображений.

CACHES = {
    'default': {...},
    'renditions': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 600,
        'OPTIONS': {
            'MAX_ENTRIES': 1000
        }
    }
}

URL-адреса изображений

Если вам нужен только URL-адрес изображения (например, для использования в тегах meta или других атрибутах тегов), скорее всего, эффективнее использовать представление обработки изображений и {% image_url %} тег:

<meta property="og:image" content="{% image_url page.hero_image width-600 %}" />

Вместо поиска или создания представления в запросе страницы, представление обработки изображений перенаправляет эту задачу в отдельное представление, которое создаёт представление только при запросе изображения пользователем (или возвращает существующее представление, если оно уже есть). Это может значительно ускорить загрузку страниц с множеством изображений. Это может увеличить количество запросов, обрабатываемых Wagtail, если вы используете внешний хранилище данных (например, Amazon S3).

Ещё одним побочным преимуществом является предотвращение ошибок при обработке данных от вывода ошибок на странице. Если изображение слишком велико для обработки Willow (размер изображения можно ограничить с помощью WAGTAILIMAGES_MAX_IMAGE_PIXELS), Willow может аварийно завершить работу. Так как изменение размера выполняется вне загрузки страницы, изображение будет отсутствовать, но остальная часть содержимого страницы останется.

Того же результата можно достичь в Python, используя generate_image_url.

Поиск

Wagtail имеет хорошую поддержку Elasticsearch — как в интерфейсе редактора, так и для пользователей вашего сайта — но может использовать поиск по базе данных, если Elasticsearch отсутствует. Elasticsearch быстрее и мощнее, чем Django ORM для поиска по тексту, поэтому мы рекомендуем установить его или использовать хостинг-сервис, такой как Searchly.

Подробности по настройке Wagtail для Elasticsearch см. в разделе Бекенд Elasticsearch.

База данных

Wagtail протестирован на PostgreSQL, SQLite и MySQL. Он может работать и с некоторыми сторонними базами данных, но это не гарантируется. Для использования в рабочей среде мы рекомендуем PostgreSQL.

Шаблоны

Накладные расходы от чтения и компиляции шаблонов суммируются. Django оборачивает свои загрузчики по умолчанию с помощью кэшированного загрузчика шаблонов, который хранит скомпилированные Template в памяти и возвращает их для последующих запросов. Кэшированный загрузчик автоматически включается, когда DEBUG находится в состоянии False. Если вы используете пользовательские загрузчики, обновите свои настройки, чтобы использовать его:

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'OPTIONS': {
        'loaders': [
            ('django.template.loaders.cached.Loader', [
                'django.template.loaders.filesystem.Loader',
                'django.template.loaders.app_directories.Loader',
                'path.to.custom.Loader',
            ]),
        ],
    },
}]

Пользователи

Кэширующий прокси

Для поддержки больших объёмов трафика с отличными временами отклика мы рекомендуем кэширующий прокси. Как Varnish, так и Squid тестировались в рабочей среде. Хостинг-прокси, такие как Cloudflare, также должны работать хорошо.

Wagtail поддерживает автоматическое отключение кэша для Varnish/Squid. Дополнительную информацию см. в разделе Очистка кэша переднего плана.

Атрибуты изображений

Для некоторых изображений может быть полезно отложенная загрузка изображений, чтобы остальная часть страницы могла продолжить загрузку. Это можно настроить как для всего сайта Добавление атрибутов по умолчанию для всех изображений, так и для каждого изображения Больше контроля над тегом img. Для получения более подробной информации, вы можете узнать об атрибуте loading='lazy' и атрибуте 'decoding='async' или этой статье web.dev о ленивой загрузке изображений.

Для изображений в административной части сайта эта оптимизация уже выполняется.

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/advanced_topics/performance.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API