使用 PHP 图像 resize/crop 内置方法的高内存使用率
High memory usage using PHP image resize/crop build in methods
当使用 PHP 裁剪和调整图像大小时,功能如 imagecreatefromjpeg()
、imagecrop()
、imagecopyresampled()
等,您会收到内存使用率过高的通知。
如果我将这个裁剪模块实现到一个CMS中,假设有50个人同时调用裁剪功能:内存使用量会乘以50,从而使服务器内存资源过载吗?
如果是这样,什么是排队请求或防止过载的好方法?
尽管这可能不是您问题的直接答案,但根据我的经验,在另一台服务器上处理图像总是更好,因为您不希望单个用户用几张图像杀死整个网络服务器。
如果您在不同的服务器上处理您的图像并且它死了,最糟糕的事情是图像将 return 404,但网络服务器本身将保持 运行ning 正常。
无论如何,我肯定会推荐使用像 ImageMagick 这样的库。它更容易使用,我相信你可以设置它不能超过的内存限制。
到目前为止,我发现的图像处理的最佳方法是 AWS Lambda。您可以轻松编写一个无服务器 nodeJS 脚本,该脚本下载您的图像,对其进行任何修改并将其上传回您的服务器。除非你每天需要处理数千张图片,否则你几乎可以免费 运行 它可以处理多达 100 个同时调用(它基本上一次启动多达 100 个服务器)所以理论上它可以接近 100 倍比您必须排队请求更快。
当使用 PHP 裁剪和调整图像大小时,功能如 imagecreatefromjpeg()
、imagecrop()
、imagecopyresampled()
等,您会收到内存使用率过高的通知。
如果我将这个裁剪模块实现到一个CMS中,假设有50个人同时调用裁剪功能:内存使用量会乘以50,从而使服务器内存资源过载吗?
如果是这样,什么是排队请求或防止过载的好方法?
尽管这可能不是您问题的直接答案,但根据我的经验,在另一台服务器上处理图像总是更好,因为您不希望单个用户用几张图像杀死整个网络服务器。
如果您在不同的服务器上处理您的图像并且它死了,最糟糕的事情是图像将 return 404,但网络服务器本身将保持 运行ning 正常。
无论如何,我肯定会推荐使用像 ImageMagick 这样的库。它更容易使用,我相信你可以设置它不能超过的内存限制。
到目前为止,我发现的图像处理的最佳方法是 AWS Lambda。您可以轻松编写一个无服务器 nodeJS 脚本,该脚本下载您的图像,对其进行任何修改并将其上传回您的服务器。除非你每天需要处理数千张图片,否则你几乎可以免费 运行 它可以处理多达 100 个同时调用(它基本上一次启动多达 100 个服务器)所以理论上它可以接近 100 倍比您必须排队请求更快。