我正在编写我自己的邮箱系统。
我想加载收件箱文件夹。我已经将结果分页/限制在每页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),但是如果我想要显示电子邮件是否有附件的快速信息,我需要正文,那该怎么办呢?邮件提供商是如何实现如此好的性能的?
我能想到的唯一解决方案是:将电子邮件缓存到DB表中。也许运行cronjob来更新缓存并直接从数据库获取电子邮件,是这样做的吗?
发布于 2020-10-29 21:54:54
如果我没理解错的话,你的问题是性能。有不同的方法来实现它:
而这份清单只是大冰山的顶部。完美是没有限制的,优化可以是无休止的。但我认为,首先,这应该足以让结果至少接近其他邮件服务。另外,我建议你看看github上其他项目的源代码。其中有很多你可以突出其他想法和优化技巧的地方:
https://stackoverflow.com/questions/64444401
复制相似问题