客户端与服务器端图像压缩

6
我正在开发一个用户可以上传图片的项目(图片大小不受限制)。现在我有两个选择,要么使用PHP(服务器端)压缩图像,要么使用JavaScript在客户端机器上压缩图像,然后再上传到服务器。我想问一下,这两种方法中哪一种更好?在服务器上进行压缩可能会导致服务器负载过重,因此我考虑使用客户端压缩;但是,如果我上传一个较大的图像(假设为12MB左右),那么浏览器会由于脚本而冻结一段时间。
目前还没有代码,只是一个理论问题。目前我正在使用J-I-C进行客户端压缩。 还有其他好的客户端图像压缩库吗?哪种方法更好?任何帮助都将不胜感激。

这个问题比较宽泛,而且大部分是基于个人意见。你应该考虑到客户的满意度。如果我的手机需要压缩图像以发送数据,那么这将耗费电池性能,而只能节省少量字节,因为图像已经被压缩过了。 - Xorifelse
@Xorifelse 是的,我知道这个问题很广泛和主观,但我想不到一个更好的地方来询问这个问题。是的,电池性能会存在,这就是为什么我想要了解哪种方法会有较少的权衡和更好的结果。 - Yomesh
你应该始终在服务器端压缩图像。由于安全原因,上传文件时必须小心。搜索图像中的代码注入。 - instead
1个回答

9

正如@Xorifelse所说,这个问题可能太过宽泛,但是以下是一些想法。

缺点

  • 用户输入不可信; 在客户端进行压缩,您仍然需要在服务器端进行一些检查
  • 图像压缩(或优化)涉及复杂操作,在JavaScript中的选择比其他语言少
  • 由于操作很复杂,您会给客户端带来压力;如果您无法控制他们的配置(硬件、浏览器和版本),这种情况几乎只会出现在内部网络中,您可能会降低(或失败)一些用户的浏览体验
  • 由于所有这些原因,客户端错误更难跟踪和修复,并且很快就可能比将资源添加到服务器中更花费开发成本

优点

  • 您可以从服务器卸载一些计算
  • 您可以帮助带有小带宽但功能强大的计算机和最新浏览器的人上传大型图像

图像压缩工具

仅限JPEG

BGP

我的建议

  • 如果您需要节省服务器资源,可以在一天的某个时间批量异步进行图像优化,当服务器没有重负载时
  • 如果您有大量输入,将优化发送到另一个服务器可能比升级“主”服务器更便宜(即:在Amazon、DigitalOcean、Linode等地的按需虚拟机上,只有在需要时才支付费用)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接