Рубрики
Без рубрики

¿Cómo Mejorar El Rendimiento de Una Allplación hecha en django?

¿TU Appleación Hecha en django o la de tu compañia and lenta? Lo Anterwory Puede Tener Múltiples вызывает … Теги с Джанго, Питоном, Учебником, Испанским.

¿TU Appleación Hecha en django o la de tu compañia and lenta? Lo Anperior Puede Teaner Múltiples Coussas: Or Servidor Conting Contware Insuficate, UN PAQUETE DE HOSTING QUE NECESITE UN Модернизация Para Procesar Mayer Tráfico, Servidor Mal Configurado (EN Caso de que Sea Nongex Visita Mi Entrada Donde Technico Como Configurallo Para Mayer Rendimento ), o Simplemente Una Allplación Нет Optimizada Para Dar El Máximo Rendimiento En Django. ENTA ENTADA TE ESTACHAO ALGUNOS Cambios Que Puedes Para Mejorar El Rendimiento de django.

Редукторы Cuellos de Botella

El Acceso A La Base Ditos Sule Ser El Cuello de Botella de la Mayoría de Las AlipaCions. La Acción Más Gathed A Realizar Es Repadior El Número de yelize y El Hindo de Cada Una de Estas.

Es Bastante Común Escribir Código Que Ocasionses Múltiples Consultas A La Base de Datos Así Como Búsquedas Bastante Costosas.

Идентификация Que Consultass SE Están Haciendo ru Tu Alplación Usando Django-debug-панель инструментов Y Redúcelas, надо УСАР:

  • select_related () Para Evitar Múltiples Búsquedas ru Модение Tipo Llave Foránea O UNO UNO
  • Prefetch_related () Para Prevenir Búsquedas ExceSivas ru Реляционные масштабы масштабированные
  • django_annoTate () Para Agregar Información Cada Oudeo de Una Consulta. Tengo Una Entrada Donde Explico Annotate Y совокупность
  • django_aggregate () Para Procesar Toda la información de una sola consulta en solo dato (Sumatoria, Promedios).
  • Objeto q Para Unir Consultass POR Medio de или O и DESDEAMESE DESDE LA BASE DE DESOS
  • Expresiones f Para Realizar Operacions a Nivel Base de datos en lugar de en código python

Django Debug Tool Bar Mostrando LAS Queries SQL de una petición en django

# review/views.py
from .models import Review

def list_reviews(request):
    queryset = Review.objects.filter(product__id=product_id).select_related('user') 
    # Ahora no se tocará la base de datos cada que se use review.user
    # ...

США Paginación.

Веробанеменная сумасшедшая Бастанте Очио, Aún Así, No Devualvas Toos Los Resultdos de Tu Base Dado Datos Para Un Modelo Dado, США El objeto Paginator que orece django, o limita los realsedos de una búsqueda uns unos cuantos, no necesitas devolver toda una tabla de una База de datos Si TU Usuario Solo Le Interesan Los Primeros Registros.

# review/views.py
from django.views.generic import ListView
from .models import Review

class ReviewList(ListView): 
    model = Review 
    paginate_by = 25
    context_object_name = 'review_list'

США índices.

Outsiende tus queries más complejas e Intenta Crage Indices Para Ellas. El índice Hará Tus Búsquedas EN Django Más Rápidas, Перо Тамбиен Ралендара Лас-Креяции Y Actualizaciones de Nueva Información.

from django.db import models

class Review(models.Model):
    created = models.DateTimeField(
        auto_now_add=True,
        db_index=True,
    )

Remueve Middleware Que Не использует

CADA Middleware implica un Paso Extry En Cada Petición Web, POR Lo Que Remover ToDos Aquellos Amberwares Que No Network Supondrá Una Ligera Mejora En La Velocidad de Respuesta de Tu Aliplacación.

Aquí Te dejo Algunos Middleware Comunes Que No Siempre Son Usados, El de Mensajes, Páginas Planas Y El de localización, No, No Me Refiero A a La Ubicación Geográfica, Sino El de Truducir El Contenido Acorde Al Contexto Local.

MIDDLEWARE = [
    # ...
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'django.middleware.locale.LocaleMiddleware'
]

Cachea contenido en django

CuAndo El Tiempo de Respuesta de Tu AlipaCión Se Vuelve On Flancea, Deberías Emezar Colocar Todos Los Resultdos Costosos en Tiempo y Recursos Ru Caché. Si Tu Página Tiene Demasiados Productos, Y Raramente Cambian, No Tiene Sentido Acceder Cada Vez A La Base DE DESOS PARA SOLICINAMLOS CON CADA NUEVA PETTORYON HTTP. Solo Coloca la Respuesta de esa solocucues en caché y tueempo de Rescuesta mejorará, de esta manera cade que se pida el mismo contenido, нет será necesario realizar una nueva petición o cálculos a la base de datos, Sino que el valor se devolverá directmente de Мемориация.

Entre Las Opciones Disponibles Está:

  • Memcached.
  • Редис
  • Cache de base de datos
  • Cache de Sistema de Archivos
# settings.py
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

La Cache de django ES настраиваемым настраиваемым горисимосом Niveles, Desde El Sitio Entero Hasta Vistas o Enluso Pequeños Trozos de Información.

# myapp/views.py
from django.shortcuts import render
from django.views.decorators.cache import cache_page

@cache_page(60*15)
def my_view(request):
    return render(request, 'myapp/template.html', {
        'time_consuming_data': get_time_consuming_data()
    })

Toma en cuenta que La Cache Basada en Memoria (Memcached, Redis) Es Método de Almacenamiento Efímero , Тода Ла Caché desaparecerá Si El Sistema SE Reinicia o Apaga.

США сельдерея пара Tareas Asíncronas

VECES EL CUELLO DE BOTELLA ES Repainabilidad de Terceros. Cuanto Envías End Email O Solitcer Información de Un Tercero, No Tienes Manera de Saber Cuanto Tiempo Demorará Tu SabiCitud, Уна Conexión Lenta O ООН Servidor Sobresaturado Pueden Mantenerte Esperando POR UNA Respuesta. No Tiene Caso Mantener Al Usuario Esperando Decenas de Segundos POR Envío de un Correo Electrónico, devuévele Una Respuesta y Transfiere El Enterneo del Correo Electrónico A Una Cola Para Que Se Pucese Más Tarte. Сельдерей Es La Opción Más популярный пункт Para Hacerlo.

# myapp/views.py
from celery import shared_task

@shared_task
def send_order_confirmation(order_pk):
    email_data = generate_data_for_email(order_pk)
    send_customized_mail(**email_data)

США ООН CDN (сеть доставки контента)

Servir Imágenes y Archivos Estáticos Puede Difeultar La Parte Gathere de Tu Alplacación; Генерар Contenido Dinámico. По наступлениям делегар La Tarea de Servir Contenido Estático A Una Red De Distribución de Contenidos (CDN, POR SUS SIGLAS EN Inglés). De esta manera tu alplación Podrá Centrarse En Su Tarea Harea. Essiten Mostas Opciones de CDN Disponiables, Entre Las Opciones Más популярны Están AWS, цифровой океан, облачные вспышки, нант ОТРС.

Denormalización.

VECE Hay Consultass Bastante Costosas EN Tiempo de Ejecución Que Podrían Resolvere Revolverse Agregando Redundancia, Información Repetida. POR EJEMPLO, Imagina Que Quieres devolver La Cantidad de productos que tienen la frase “para niños” EN TU Página Главный, Realizar Una Query Que Busque La Palabra Y Luego Ejecute Un Conteo Es Bastante Sencillo. Перо, ¿y Si Tienes 10 000 o 100 000 o 1 000 000 de productos? En Lugar de Realizar Un Conteo, Podrías Gravelar ESE NúMero En la Base DE DENOS O EN Memoria Y Devolverlo Directimente, Para Mantenerlo Actualizado Podrías USAR UN Conteo Periódico O Incrementarlo Con Cada Adición.

POR SUDEESTO ESTO TRAE EL ALCELSA DE QUE AHORA TIENES MAS DESOS QUE MANTENER, NO ACOPLADOS ENTRE Sí, POR LO que Solo Deberías USAR ESTA Opción Para Resolver Tus Smoolas de Rendimiento EN Django Si Ya Agotaste Las Demás считает

count = my_model.objects.filter(description__icontains="para niños").count() 
# ... denormalizando
count = my_count.objects.get(description="para niños") # Cada fila del modelo my_count contiene una descripción y el total de resultados
total_count = count.total

Рассматривать USAR OTRO Intreprete Para Mejorar El Rendimiento En Django

NO DEDO ES BASE DE DEATOS, VECES EL FREMATEA ESTA EN El Código Python En Sí. Además del Intreprete Normal de Python, El Que Se Ofrece Por Defecto en la Páginafiable de python Существуют Otros Intérpretes que aseguran darte Mayor un Rendimiento.

Pypy Es Uno de Ellos, SE Encarga de Optimizar El Código Python Analizando El Tipo de objecución. ESTA Opción Es Estal Paracaciones donde django SE Encargue de devolver Un Resultado Que Fue Procesado Cover Countrictions Usando Código Python.

Перо нет Tobo es maravilloso; Los Intérpretes de Terceros, Incluido Pypy Нет суетов Ser Compatibles AL 100% Con ToDo El Código Python, Pero Sí Con La Mayoría, POR Lo Que, Igual Que La Opción Анестерию. USAR UN INTÉRPRETE DE TERCEROS También Debería de Ser de las últimas Opciones que считает Para Resolver TU проблемные.

Усадьба

SI имеет пробадо Todo Lo Ansiory Y Aúí así Tienes Una Alplación Cuellos de Botella, Probablemente Estás exprimiendo demasiasdo a python y necesites de la velocidad de otro lenguaje. Перо нет твоегозащитных que rever toda tu encación en c en c ++. Swig TE PERMITE CREAR Módulos EN C, C ++, Java u Otros lenguajes de más Bajo Nivel Para Importarlos Directamente desde Python.

Si Tienes un Cuello de Botella Causado POR ALGúN Cálculo Matemático Muy Costoso, Que Pone Evidencia La Falta de Velocidad de Python Al Ser un Lenguaje Интерпретация, Quizás Te Convenga Reescribir El Cuello de Botella en algún lenguaje de bajo nivel para luego llamarlo usando python. De Esta Manera Tendrás La Facilidad de Uso de Python Con La Velocidad de un Lenguaje de Bajo Nivel.

Бонус: рамки Альтернативо

Enceeneiendo Del Avance de Tu Alippión Quizás Te Convenga Migrar atro atro strage más veloz que django. El Orm de Django No Es Exizee El Más Veloz que ai. sqlalchemy o Si Tu Alplación No Es Muy Compleja Nivel De Base de datos, Quizás quieras Escribir Tus Popias Consultass SQL Y Combinarlas Con Algún Otro Framework.

La Tendencia Actual Es Searar Frontend de Backend, POR LO Anterphery Django Está Usándose ru Convunto Con Django Rest Framework Para Crage API, POR Lo Que, Si Entre TUS API Está La Creación de Una API, Quizás Te Convenga Chestar Fastapi, Si No Lo Conoces Tour Date Una Vueual Por Mi Entrada donde te explico las maravillas Que Tiene Para ofrecer fastapi.

Оригинал: “https://dev.to/silicosis/como-mejorar-el-rendimiento-de-una-aplicacion-hecha-en-django-b8e”