我正在本地开发/服务。
我正在使用django-admin为内部用户添加项目。
我添加了我的信号代码。我的信号是post_save,其目的是向用户发送电子邮件以供批准。我使用console.EmailBackend测试我的信号
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
我添加了一个新项目,对Web浏览器没有性能影响。我的模型项目页面快速重新加载。
我更新了我的EMAIL BACKEND以使用smtp详细信息
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
我添加了一个新项目,性能影响很大,我的网页浏览器现在需要15-30秒才能在添加后重新加载项目页面。
有关为什么表演如此可怕的任何想法?
真正的电子邮件发送速度很慢。
我建议使用异步队列任务发送电子邮件。例如,Celery是asynchronous Queue task的好图书馆。
如果您计划在AWS或类似设备上运行应用程序,请考虑使用电子邮件发送服务(例如AWS的SES)。它将允许您设置发件人验证(DKIM / SPF),它将是一个低延迟的API调用,而不是缓慢的SMTP交互。如果您计划使用AWS,则可以使用lib,django-ses,您可以配置它并立即开始使用。
如果您想继续自己发送电子邮件,请使用celery或channels设置异步任务队列和worker。这个延迟将让您的Web工作人员继续提供请求,而工作人员完成缓慢的发送过程。
如果您想要一个非常快速的设置,您可以结合上述两种方法,将电子邮件发送到异步工作者,然后命中电子邮件即服务API。您的Web工作人员将很快,并且您的异步工作人员不会被阻止与SMTP服务器通话10-15秒!