首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imap加载邮箱内容性能| php-imap | laravel

Imap加载邮箱内容性能| php-imap | laravel
EN

Stack Overflow用户
提问于 2020-10-20 19:41:26
回答 1查看 189关注 0票数 0

我正在编写我自己的邮箱系统。

我想加载收件箱文件夹。我已经将结果分页/限制在每页40个,但与真正的webmail提供商相比,性能仍然很差。

我已经做了一些研究,如果我不加载标志和附件(特别是附件),性能似乎很好。

查看40封电子邮件的结果:

代码语言:javascript
复制
// 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来更新缓存并直接从数据库获取电子邮件,是这样做的吗?

EN

回答 1

Stack Overflow用户

发布于 2020-10-29 21:54:54

如果我没理解错的话,你的问题是性能。有不同的方法来实现它:

  1. Cache -尝试缓存应用程序重复多次的所有内容。Api结果、内容、文件..同时,你应该小心使用它。在速度和存储之间总是有两难选择,capability.
  2. Load只需要你需要的。当你只显示邮件列表时,不需要下载内容,附件,历史记录。对于最终用户来说,标题、主题和发送者就足够了。当客户按下“显示电子邮件”button
  3. Pagination.时,可以显示电子邮件的其他部分您不需要加载所有mails.
  4. Parallelism,您可以并行运行4个查询。理论上,你可以处理4倍以上的电子邮件。

而这份清单只是大冰山的顶部。完美是没有限制的,优化可以是无休止的。但我认为,首先,这应该足以让结果至少接近其他邮件服务。另外,我建议你看看github上其他项目的源代码。其中有很多你可以突出其他想法和优化技巧的地方:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64444401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档