问题回顾
问题定位
但是同一个接口换一个查询条件,接收的数据只有 367 KB,响应时间 4.5 秒。
第一、API 接口的请求与响应是没问题的
第二、换查询条件后,接口响应时间差距近 12 秒之多,说明接收数据有问题
既然是数据问题,于是在和小赵对比入库前和入库后的新闻数据后,发现问题出在图片 base64 加密存储。
另外,为什么新闻列表页需要加载图片呢?通过代码走查,发现图片是放在 contentText 字段里面,但是 新闻内容列表
select 分页语句却包含了 contentText 字段,明显 select 语句不合理。
select ..., contenText from article
解决方案
第一步,用 like 模糊查询存在包含 base64 串的文章,共 34 条记录,数据比较少
select id,title,contenText from article where contenText like '%data:image%'
第二步, 从新闻详情页下载图片,用 fastdfs 分布式文件服务器上传图片后,得到图片的下载地址,替换 img 标签的 src 属性值,格式如下:
group1/M00/00/00/rBIK6VcaP0aARXDSNFHrUgHEviQ663.jpg
10 个人 34 条新闻,花了近 20 分钟,完成 base64 图片地址替换后,问题解决。
base64 编码原理
简单来说就是把一张图片数据加密成一个字符串,使用该字符串代替图像地址,这样的好处是不需要单独用文件服务器存储文件。
问题总结