我目前正在本地开发/服务。
我正在使用django-admin供内部用户添加项目。
我添加了信号代码。我的信号是post_save,目的是向用户发送电子邮件以供批准。我使用console.EmailBackend
测试信号window.location.origin
我添加了一个新项目,对Web浏览器没有性能影响。我的模型项目页面快速重新加载。
我也使用smpt详细信息更新了EMAIL_BACKEND
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
我添加了一个新项目,对性能的影响是巨大的,添加后,我的Web浏览器现在需要15到30秒的时间来重新加载项目页面。
有什么想法为什么表现如此糟糕?
答案 0 :(得分:2)
真正的电子邮件发送本质上是缓慢的。
我建议您使用异步队列任务发送电子邮件。例如,Celery是asynchronous Queue task的不错的库。
答案 1 :(得分:1)
如果计划在AWS或类似设备上运行应用程序,请考虑使用电子邮件发送服务(例如AWS的SES)。它可以让您设置发件人验证(DKIM / SPF),它将是低延迟的API调用,而不是慢速的SMTP交互。如果您打算使用AWS,那么已经有一个django-ses库,您可以对其进行配置并立即开始使用。
如果您想继续自己发送电子邮件,请使用celery或channels设置异步任务队列和工作程序。这种延迟将使您的网络工作者继续处理请求,而该工作者完成了缓慢的发送过程。
如果您想真正快速地进行设置,则可以将上述两种方法结合使用,将电子邮件发送延迟到异步工作程序,然后再使用电子邮件即服务API。您的网络工作者将变得活泼,并且您的异步工作者将在10到15秒钟内不会被阻止与SMTP服务器通话!