我正在编码自己的邮箱系统。
我想加载INBOX文件夹。我已经将结果分页/限制为每页40个,但是与真正的Webmail提供商相比,性能仍然很差。
我已经进行了一些研究,如果不加载标志和附件(尤其是附件),则性能似乎很好。
查看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来更新缓存并直接从数据库中获取电子邮件,这是怎么做的?
答案 0 :(得分:0)
如果我对您的理解正确,那么您的问题就是性能。有多种方法可以实现它:
这个列表只是大冰山的顶部。完美无止境,优化可能是无止境的。但是我认为,从一开始,这应该足以使结果至少接近其他邮件服务。 另外,我建议您在github上查看其他项目的源代码。在其中很多地方,您可以突出显示其他想法和优化技巧: