get_thumb_water()这个函数非常影响速度,后台订单列表接口时间长达10秒左右。
hmmmmmmmmmmmmmmmm
2022-08-27 16:20:41
问题:
- 后台订单列表接口,每页10条数据,请求速度10秒左右。
原因:
- 因为在某些服务器下该接口速度为1秒左右,所以导致我们排查问题走了一些弯路,经过反复处理docker环境、以及数据库环境,疯狂掉了两天头发,最终才发现是业务代码的问题。
- 在如下代码处,屏蔽掉get_thumb_water()这个加密方法,接口速度立刻从10秒缩减到1秒。只是略微影响了一下前端页面渲染性能。
/**
* 获取指定订单下的商品详情
* @param int $oid
* @return array|mixed
*/
public function getOrderCartInfo(int $oid)
{
// $cartInfo = CacheService::get(md5('store_order_cart_info_' . $oid));
// if ($cartInfo) return $cartInfo;
$cart_info = $this->dao->getCartColunm(['oid' => $oid], 'cart_info', 'cart_id');
$info = [];
foreach ($cart_info as $k => $v) {
$_info = is_string($v) ? json_decode($v, true) : $v;
if (!isset($_info['productInfo'])) $_info['productInfo'] = [];
//缩略图处理
if (isset($_info['productInfo']['attrInfo'])) {
$_info['productInfo']['attrInfo'] = get_thumb_water($_info['productInfo']['attrInfo']);
}
$_info['product_type'] = $_info['productInfo']['product_type'] ?? 0;
$_info['supplier_id'] = $_info['productInfo']['supplier_id'] ?? 0;
$_info['is_support_refund'] = $_info['productInfo']['is_support_refund'] ?? 1;
$_info['productInfo'] = get_thumb_water($_info['productInfo']);
$_info['refund_num'] = $this->dao->sum(['cart_id' => $_info['id']], 'refund_num');
$info[$k]['cart_info'] = $_info;
unset($_info);
}
CacheService::set(md5('store_order_cart_info_' . $oid), $info);
return $info;
}
处理前后接口速度对比:
- 希望官方开放一下这个函数内部代码实现,因为这个处理缩略图内部如果是调用对象存储接口去处理或者什么样的话,一旦遇到大量数据的foreach循环,那就完犊子,开放一下的话我们可以根据自己的实际情况去改造他。
hmmmmmmmmmmmmmmmm 最后编辑于2022-09-20 09:58:14
快捷回复
{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}
作者 管理员 企业
{{itemf.name}}
{{itemc.user_info.nickname}}
{{itemc.user_name}}
回复 {{itemc.comment_user_info.nickname}}
{{itemf.name}}