【问题标题】:Photos optimize and cache照片优化和缓存
【发布时间】:2013-09-11 20:53:07
【问题描述】:

我正在开发一个面向旅行者的社区网站。经过大量用户测试,似乎“上传照片”是用户喜欢的主要方面。仅 3 位测试用户在 5 个月内提供了 4000 多张照片。我的问题是:如果我有 1000 个用户,我(或我的服务器)将如何正确管理它?在为这个潜在问题找到可靠的解决方案之前,我怀疑是否要退出测试版并向所有人开放它。

  • 我正在使用 PHP(主要是 CodeIgniter)
  • 图片上传并裁剪成 3 种尺寸(我都保存在服务器上)
  • 我使用 Cloudfare 获得一些性能支持

如何优化这方面以避免服务器问题等?

  • 我不应该保存图像,而是使用 PHP 渲染它们吗?
  • 缓存它们的最佳方法是什么?
  • 我应该使用外部服务来上传/保存/维护这些照片吗?
  • ...

这是一个普遍的问题,但对我来说非常重要。 我非常感谢你们提供的所有技巧和诀窍!

提前致谢! G

【问题讨论】:

    标签: php codeigniter caching optimization photo


    【解决方案1】:

    我的建议:

    • 以所需的分辨率上传后直接调整它们的大小,就像现在一样;一直在运行中渲染它们会消耗大量 CPU。
    • 缓存:将它们作为常规文件存储在您的 web 目录中,例如在 /images 中;然后,您的网络服务器可以直接为它们提供服务。创建一个 2 级子目录结构,以防止一个目录中存在大量文件。我建议从原始文件中获取 MD5 哈希,然后使用前 2x2 字节作为子目录,其余作为文件名。

    例如文件的 md5sum 是 4ad5ec63e6c771a4f1c91e4d19bdf921 并且您想要渲染 3 种分辨率(小、中、大)。然后将磁盘上的(调整大小的)文件命名为:

    /images/4a/d5/ec63e6c771a4f1c91e4d19bdf921_s.jpg
    /images/4a/d5/ec63e6c771a4f1c91e4d19bdf921_m.jpg
    /images/4a/d5/ec63e6c771a4f1c91e4d19bdf921_l.jpg
    

    将哈希值存储在您的数据库中。

    如果来自图像的流量显着增长,您可以考虑使用仅提供图像的单独服务器(例如来自 http://images.domain.com/),从而减轻 PHP 服务器的负载。

    【讨论】:

    • 非常感谢!目前我正在上传文件,将它们直接调整为/uploads、/uploads/thumb、/uploads/medium、/uploads/large,我猜这方面已经涵盖了。如果我将这些名称存储在数据库中(我现在这样做,将其链接到旅行者),这究竟是如何处理缓存的?
    • 其实缓存是由浏览器完成的。当它第二次请求图像时,它会发送一个“Modified-Since”标头或类似的标头,其中包含上一次提取的时间戳。如果文件在磁盘上没有更改,浏览器会返回 304“未修改”HTTP 状态代码。但是网络服务器仍然需要在磁盘上检查文件的时间戳。如果您想防止这种情况发生,您可以强制 Apache 发送额外的 Expire 标头,这将告诉浏览器不要检查更改,除非用户强制它。当然,您必须非常确定图像不会发生变化。
    猜你喜欢
    • 2016-06-05
    • 2012-10-15
    • 2011-04-03
    • 2019-07-14
    • 1970-01-01
    • 2014-02-16
    • 2018-04-20
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多