为什么 Laravel Horizon 执行排队的命令比简单的 artisan queue:work 快得多?

Why does Laravel Horizon executes queued command much faster than a simple artisan queue:work?

我正在排队一个命令(通过另一个命令),如果由 queue:work 处理需要大约 1 分钟才能执行,但是如果 运行 通过 artisan horizon,仅需约 15 秒。 我已经验证并且代码得到正确执行 - 这个排队的命令将文件中的数据加载到数据库中,并且我已经确认在这两种情况下数据都已正确加载。

$ php artisan integ:load ctlem                                                    
Job for files C_afi1411T.txt e C_afi1411V.txt created.

$ php artisan queue:work --queue=data_load --tries=3 --timeout=0
[2019-11-20 09:49:18][1] Processing: Illuminate\Foundation\Console\QueuedCommand
[2019-11-20 09:50:16][1] Processed:  Illuminate\Foundation\Console\QueuedCommand
^C

$ php artisan integ:load ctlem
Job for files C_afi1411T.txt e C_afi1411V.txt created.

$ php artisan horizon
Horizon started successfully.
[2019-11-20 09:51:10][2] Processing: Illuminate\Foundation\Console\QueuedCommand
[2019-11-20 09:51:25][2] Processed:  Illuminate\Foundation\Console\QueuedCommand
^CShutting down...
$

我还在队列命令本身内部记录了调用 "heavy" 函数前后的时间,日志确认了时间,即它与任何设置和拆卸无关 activity..

如果需要,很乐意提供更多详细信息。 知道为什么会有这种差异吗?

好的,我已经确定了造成这种差异的原因:XDebug。 虽然我没有主动调试,但在 php.ini 中禁用 xdebug 会显着加快 'artisan queue:work' 速度。

虽然这显然是预期的,但 运行 'artisan horizon' 以某种方式绕过了 xdebug 而 'artisan quque:work' 却没有,这对我来说是新的.

无论如何,也许这对未来的开发者有帮助...