diff --git a/docs/tips/index.rst b/docs/tips/index.rst index c09723a..8b79153 100644 --- a/docs/tips/index.rst +++ b/docs/tips/index.rst @@ -12,8 +12,4 @@ done with Anymail: django_templates securing_webhooks test_backend - -.. TODO: -.. Working with django-mailer(2) -.. Sharing backend connections (sessions) - + performance diff --git a/docs/tips/performance.rst b/docs/tips/performance.rst new file mode 100644 index 0000000..03c92ba --- /dev/null +++ b/docs/tips/performance.rst @@ -0,0 +1,24 @@ +.. _performance: + +Batch send performance +====================== + +If you are sending batches of hundreds of emails at a time, you can improve +performance slightly by reusing a single HTTP connection to your ESP's +API, rather than creating (and tearing down) a new connection for each message. + +Most Anymail EmailBackends automatically reuse their HTTP connections when +used with Django's batch-sending functions :func:`~django.core.mail.send_mass_mail` or +:meth:`connection.send_messages`. See :ref:`django:topics-sending-multiple-emails` +in the Django docs for more info and an example. + +(The exception is when Anymail wraps an ESP's official Python package, and that +package doesn't support connection reuse. Django's batch-sending functions will +still work, but will incur the overhead of creating a separate connection for each +message sent. Currently, only SparkPost has this limitation.) + +If you need even more performance, you may want to consider your ESP's batch-sending +features. When supported by your ESP, Anymail can send multiple messages with a single +API call. See :ref:`batch-send` for details, and be sure to check the +:ref:`ESP-specific info ` because batch sending capabilities vary +significantly between ESPs.