【问题标题】:PHP Dynamic Image Resizing (on the fly)PHP 动态图像大小调整(即时)
【发布时间】:2011-04-15 08:14:38
【问题描述】:

目前,我们的网站存储 2/3 的固定图像尺寸。这些是在上传时生成的,并通过我们的 CDN 分发。然而,我们需要实施更灵活的解决方案,我们正在开发需要多种不同尺寸的移动和平板电脑应用程序。我们提出的解决方案是创建一个可以接受图像标识符(id/type/url 等)和大小限制的 PHP 脚本。然后脚本可以动态创建图像并将其缓存以供下次使用。

这是一个可行的解决方案吗?

目前,CDN 还保护我们的 Web 服务器免受相当大的负载。一旦图像生成一次,是否有将 CDN 合并到此过程中?我能想到的唯一方法是让脚本返回图像资源的 URL,但随后客户端需要发出 2 个 HTTP 请求。重定向可能会更快,但这对速度来说还是不好的做法吗?

【问题讨论】:

  • 我会列出可以生成的有效尺寸;否则,这样的系统很容易受到拒绝服务攻击,这些攻击会在每次大小迭代中快速请求图像。即使对于最大尺寸为 100x100 的单个图像,也有 10,000 次可能的迭代,每个迭代都可以单独请求和生成,而没有适当的限制、消耗时间、内存和磁盘空间。
  • 为什么您不向 CDN 询问请求中要求的大小的文件的缓存版本,如果不存在则创建一个新版本,将其存储以备将来使用并将其返回给客户?我的意思是这对我来说是一个可行的解决方案,并且在服务器负载方面是最好的。
  • 所以 PHP 脚本服务于 CDN,但如果它不存在,则创建并返回图像(并缓存到 CDN)?
  • 是的,这将是您需要的方法。
  • 很高兴您喜欢这样回答,以便您获得积分;)

标签: php image-processing imagemagick


【解决方案1】:

这种系统据说是读多写。

为了让您的系统快速运行,您应该始终尽可能多地进行预处理,以降低较大部分(读取)的性能影响,即使它会增加较小部分(写入)的性能影响.

从这个意义上说,您应该在上传时(即上传后)确定您需要的尺寸并创建这些调整大小的图像。

没有数以千计的有效尺寸,大多数智能手机/平板电脑都在其中,但最终有一些可能的分辨率,预处理不会比即时慢速处理更糟糕 -整个用户体验下降的东西。

再一次,不要被愚弄,任何即时操作都是 A_LOT_SLOWER,因为您检查了 isincache,创建部分,然后只有返回。

并且 EVERY_SINGLE_IMG_REQUEST 将包括缓存检查,有些会在重要时间(读取)不必要地减慢速度,而不是在不重要的时间(上传)不必要地消耗几个 cpu 周期(即生成永远不会看到的图像) .

【讨论】:

    【解决方案2】:

    我们最近做了类似的事情。用户上传文件。对文件的任何版本的任何请求都会通过一个脚本来检查图像是否已生成并生成它或以其他方式提供它。那里有一些开销,但到目前为止我很好。然后脚本将要发送到我们的 CDN(在我们的案例中为 S3)的文件排队,并在发送后更新本地引用,以便下次使用 CDN 的引用呈现页面。重定向是您绝对要避免的。

    【讨论】:

      【解决方案3】:

      如果您的服务器安装了 Imagik,大多数情况下都安装了 Imagik。 Imagik 实际上支持它,只需要构建一个函数来做到这一点,抱歉这不是很有帮助,但我过去曾使用过它。

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        相关资源
        最近更新 更多