Laravel 5.2 的一处严重性能问题
原文链接:http://tech.tjs.im/2017-10-08/mb_strpos-pe...
最近发现 Laravel 在处理某类队列任务时时间超长,经排查发现 src/Illuminate/Queue/Jobs/Job.php 文件中的 rolveQueueableEntity 使用了 Illuminate Str 的 startsWith,此方法中使用了 mb_strpos 方法。mb_strpos 的性能非常差 (Why is mb_strpos so considerably slower than strpos?),在处理大 string (100M以上) 时会产生严重性能问题。可以看到这里处理的数据有一种是序列化后的 Job 实例,是有可能出现大的 string.
由于 Laravel 已经停止对 5.2 版本的支持,5.5版本也更新了实现,不再使用rolveQueueableEntity方法,这个问题只能自行修复。修复方法:fix bad performance of resolve queueable entity
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
升级laravel版本呗。
100M 以上的 string,什么场景会出现?
Dont worry this is just a test
https://www.youtube.com/watch?v=_lsGCH23Rf...
@lx1036 不敢妄动
@leo 把一个实例放到job里
@江湖大虾仁 据比较这块做了比较大的修改
@江湖大虾仁 哦,以为说的修改消费job的实现
当时没看startsWith的新实现,不过在第一次修改的时候确实用了截取头再比较的方法。话说这个substr对多字节内容操作后不会有问题吗。
@江湖大虾仁 这样看来这个问题在新版本已经被彻底修复了