当前位置: 首页 > news >正文

Java技术栈 —— 网络带宽受限,图片预览加速

Java技术栈 —— 网络带宽受限,图片预览加速

  • 一、方法列表
  • 二、原实现 —— Nginx+Minio
  • 三、改进实现 —— Nginx+ImgProxy+Minio

一、方法列表

方法解释
图片压缩降低图片大小
图片懒加载滚动加载:只加载用户视野范围内的图片,当用户滚动页面时再加载其他图片
按需加载:根据用户的操作预测需要加载的图片,例如在电商网站中,只加载用户正在查看的商品图片
CDN内容分发网络将图片存储在多个地理位置不同的服务器上,用户可以从距离最近的服务器加载图片,减少延迟
缓存策略浏览器缓存或应用缓存
优化图片格式如WebP格式,它通常比JPEG或PNG提供更好的压缩率
分片加载将大图片分割成多个小块,逐一请求加载
使用流式传输渐进式JPEG:允许图片逐步加载,从模糊到清晰,给用户一种快速加载的感觉
优化图片质量降低质量:在不显著影响视觉效果的前提下,适当降低图片的质量以减少文件大小

分片加载和流式传输有区别,分片加载是将图片分割成小块,然后按顺序加载这些图片块

流式传输是,用户会首先看到一个低质量的版本,随着数据的不断到达,图片的质量会逐渐提高。

二、原实现 —— Nginx+Minio

我目前采用的是nginx+minio的实现,局域网可以直接访问minio的图片预览链接,那么在外网的话,通过nginx转发到本地的图片预览链接也是一样的,nginx配置如下

location ^~ /preview/minio/ {rewrite ^/preview/minio/(.*) /$1 break;proxy_pass http://{minio_ip}:{minio_console_port}/;#proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_redirect off;
}

但这样做有缺点,以下是缺点列表

缺点解释
问题维度直接转发Minio的缺陷
带宽消耗直接返回原图,未压缩或动态调整尺寸,大图下载浪费带宽
处理能力Minio原生不支持动态裁剪/压缩/格式转换(需依赖SDK生成缩略图,无法实时按需处理)
缓存效率缺少多层缓存(浏览器/CDN/Nginx),重复请求原图导致流量浪费
兼容性无法智能响应设备分辨率(如手机端仍需下载桌面级大图)
扩展性高并发时Minio可能成为瓶颈,缺乏弹性伸缩能力

三、改进实现 —— Nginx+ImgProxy+Minio

客户端 → Nginx → 图片处理服务 → Minio → 返回处理后的图片并缓存
# imgproxy.env
# 不要使用行尾注释,行尾注释会一并被当作参数
#IMGPROXY_BIND=0.0.0.0:18080# 安全签名(推荐填!防攻击)
#IMGPROXY_KEY=your_secure_key
#IMGPROXY_SALT=your_secure_salt# Minio集成(S3协议访问)
IMGPROXY_USE_S3=true
AWS_ACCESS_KEY_ID={your_access_key}
AWS_SECRET_ACCESS_KEY={your_secret_access_key}
# Minio服务地址
IMGPROXY_S3_ENDPOINT=http://{ip}:{port}
# Minio默认region
IMGPROXY_S3_REGION={bucket_name}
# Minio地址访问风格
IMGPROXY_S3_ENDPOINT_USE_PATH_STYLE=true# 性能优化
# 并发处理数
IMGPROXY_CONCURRENCY=1024
# 客户端缓存1周
IMGPROXY_TTL=604800
# 长连接保持时间
IMGPROXY_KEEP_ALIVE=120
# 从Minio读取超时
IMGPROXY_READ_TIMEOUT=20#图片分辨率参数
IMGPROXY_QUALITY=5
IMGPROXY_FORMAT_QUALITY=jpeg=5,avif=5,webp=5
IMGPROXY_DOWNLOAD_BUFFER_SIZE=256
docker pull darthsim/imgproxy:v3.28.0docker run -d \
--name imgproxy \
--env-file /data/envfile/imgproxy.env \
-p 18080:8080 \
-v imgproxy:/data \
darthsim/imgproxy:v3.28.0
参考文章
[1] minio/S3服务增加图片处理服务imgproxy -CSDN
[2] 【商城】Minio+ImgProxy商城图片一站式处理 - CSDN
[3] 使用imgproxy来构建你的图片边缘计算服务 - 废墟
[4] nginx+imgproxy实现图片自动缩放裁剪 - 掘金
[5] An exercise with MinIO Imgproxy - Medium
[6] minio获取缩略图
[7] Processing an image - imgproxy
[8] Serving files from Amazon S3 - imgproxy
[9] 通过开发者工具-网络排查响应时间过长的问题 - CSDN

相关文章:

  • 5.4.1 Password控件的Password属性绑定问题
  • 06 GE Modifier
  • 【AI论文】对人工智能生成文本的稳健和细粒度检测
  • 性价比超高的 英伟达Tesla T4卡 如何解决散热问题?
  • Ubuntu 22.04 更换 Nvidia 显卡后启动无法进入桌面问题的解决
  • OpenAPI 3.0学习笔记
  • 【Redis】了解Redis
  • Java Web项目(一)
  • Java29:Spring MVC
  • 积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法
  • Federated Weakly Supervised Video Anomaly Detection with Multimodal Prompt
  • SpringBoot集成Kafka详解
  • 【锂电池SOH估计】SVM支持向量机锂电池健康状态估计,锂电池SOH估计(Matlab完整源码和数据)
  • 零点、驻点、拐点、极值点、最值点的定义、几何意义、求解方法
  • 2025年4月19日-得物算法岗春招笔试题-第二题
  • 项目预期管理:超越甘特图,实现客户价值交付
  • The_Planets_Earth靶场笔记(VulnHub)
  • 996引擎-拓展变量:物品变量
  • python:循环语句 while循环,for遍历循环,break,continue,else,嵌套循环(打印矩形、三角形,九九乘法表)
  • AI与思维模型【68】——排列组合
  • 南部战区海军新闻发言人发表谈话
  • 今年以来金价涨幅超26%,未来会继续上涨吗?
  • 美伊第二轮核问题间接谈判结束,伊方称“结果是建设性的”
  • 中华民族共同体体验馆第二期在北京开展,上海体验区展现人民城市与民族团结交融之美
  • 韩国国会未通过“内乱特检法”
  • 言短意长|大学本科招生,提前抢跑