Performance: Signal dispatch process
This affects server response time and request handling speed by adding synchronous or asynchronous signal processing overhead.
Jump into concepts and practice - no test required
from django.db.models.signals import post_save from django.dispatch import receiver from django.contrib.auth.models import User from myapp.tasks import async_heavy_task @receiver(post_save, sender=User) def trigger_async_task(sender, instance, **kwargs): # Delegate heavy work to async task async_heavy_task.delay(instance.id)
from django.db.models.signals import post_save from django.dispatch import receiver from django.contrib.auth.models import User @receiver(post_save, sender=User) def heavy_task(sender, instance, **kwargs): # Heavy synchronous processing import time time.sleep(5) # Simulate long task print('User created:', instance)
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Synchronous heavy signal handler | 0 (server-side) | 0 (server-side) | 0 (server-side) | [X] Bad |
| Asynchronous signal handler with background task | 0 (server-side) | 0 (server-side) | 0 (server-side) | [OK] Good |
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def user_saved(sender, instance, created, **kwargs):
if created:
print(f"User {instance.username} created")
else:
print(f"User {instance.username} updated")
user = User(username='alice')
user.save()from django.db.models.signals import pre_delete
def my_receiver(sender, instance, **kwargs):
print(f"Deleting {instance}")
pre_delete.connect(my_receiver)