【发布时间】:2021-02-03 05:40:53
【问题描述】:
我正在编写自己的邮箱系统。
我想加载收件箱文件夹。我已经将结果分页/限制为每页 40 个,但与真正的网络邮件提供商相比,性能仍然很差。
我已经做了一些研究,如果我不加载标志和附件(尤其是附件),似乎性能很好。
查看 40 封电子邮件的结果:
// 3 sec~
$selectedFolder->query()->whereAll()->setFetchFlags(false)->setFetchBody(false)->leaveUnread()
// 3 sec~
$selectedFolder->query()->whereAll()->setFetchFlags(true)->setFetchBody(false)->leaveUnread()
// 9 sec~
$selectedFolder->query()->whereAll()->setFetchFlags(true)->setFetchBody(true)->leaveUnread()
巨大的区别来自setFetchBody(true),但是如果我想快速显示电子邮件是否有附件,我需要正文,那该怎么办?邮件提供商如何取得如此出色的表现?
我能想出的唯一解决方案是:将电子邮件缓存在数据库表中。也许运行一个 cronjob 来更新缓存并直接从数据库中获取电子邮件,这是如何完成的?
【问题讨论】:
-
我会建立一个数据库结构并将电子邮件/附件的内容添加到其中,访问本地信息比每次查找它们要快得多;)。现在有一个 cron 作业,每分钟轮询一次以下载以前未下载的任何消息。然后,当您实际阅读一条消息时,将一条消息发送回邮箱,说明它已被阅读以及您需要的任何其他功能