Laravel 异步请求的最佳实践

Posted

技术标签:

【中文标题】Laravel 异步请求的最佳实践【英文标题】:Best Practice for Laravel Asynchronous Requests 【发布时间】:2018-02-22 14:04:00 【问题描述】:

我有一个 Laravel 应用程序。当我在控制器中每页只创建 3-10 个 API 时,应用程序加载得非常好。 现在,当我开始在控制器中为每个页面发出 200 API 请求时,我开始看到延迟。

因为 Laravel 是 MVC。

控制器中的所有代码都需要完全执行并完成,然后它将所有数据/变量发送到视图。 但这会导致很多延迟。

我正在考虑异步执行 API 调用,但我不确定哪一个是最好的选择,

我快速搜索了一下,我找到了:

php cURL 异步:http://php.net/manual/en/function.curl-multi-init.php Laravel 异步:https://laravel.com/docs/5.1/queues PHP 承诺:https://github.com/reactphp/promise

对此的任何指示/建议对我和其他面临此问题的人来说意义重大。

【问题讨论】:

IMO 你试图以错误的方式解决它。只需使用后台任务,然后让客户端要求更新进度即可。还取决于结果的生命周期,而不是进行 api 调用。 另外你的第二个链接与异步无关 我现在正在研究 Laravel 队列,但我不确定这是否是解决此问题的最佳方法。 你不能把一些请求合并成一个更大的请求吗? 200 个 api 调用来交付一个页面似乎太多了,但这取决于你在做什么。 为什么不能将这些 api 调用移出阻止呈现视图的方法,并使用 axios 之类的东西来异步获取数据并呈现您需要的内容?如果您使用的是 vuejs 或任何其他前端框架,您应该能够移除那些阻塞的 api 调用并利用 js 来获取和渲染。 【参考方案1】:

为此探索使用Queues。将所有调用卸载到队列中,等待响应。

我建议不要每页 200 个请求,这似乎过多。也许在重新架构之前尝试将其降低。

【讨论】:

以上是关于Laravel 异步请求的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Java 异步编程最佳实践

.Net异步编程异步编程场景以及最佳实践

Celery学习--- Celery 最佳实践之与django结合实现异步任务

Laravel 5 异步 AJAX 请求导致会话问题

取消异步 WCF 请求的最佳方法是啥?

Laravel最佳实践--API请求频率限制(Throttle中间件)