【问题标题】:Is putting a php script in the src of the image tag slower than normal and by how much?将 php 脚本放在图像标签的 src 中是否比正常速度慢?
【发布时间】:2010-10-06 07:50:09
【问题描述】:

如果我把这个标签放在我的 HTML 中:

<img src="http://server/imageHandler.php?image=someImage.jpg" />

而不是

<img src="http://server/images/someImage.jpg" />

并使用 imageHandler.php 脚本读取图像文件,输出过期标题并打印图像数据,我希望它会更慢。这是一种操作图像标题的可行方法,还是因为图像无处不在,所以性能损失太大。 还有其他方法可以通过我的 php 代码在图像上设置过期标头吗?

【问题讨论】:

    标签: php image header


    【解决方案1】:

    是的,运行任何 PHP 脚本都比提供静态文件慢。

    相反,您可以使用 Apache 配置指令设置过期标头。请参阅mod_expires 的文档。例如,您可以将以下指令放在 Apache httpd.conf 或 .htaccess 文件中:

    # enable expirations
    ExpiresActive On
    # expire JPG images after a month in the client's cache
    ExpiresByType image/jpg A2592000
    

    【讨论】:

      【解决方案2】:

      试试类似的东西

      header("Expires: <the date>");
      http_send_file("someImage.jpg");
      

      来自http://us3.php.net/manual/en/function.http-send-file.php http_send_file 函数(如果它按照我认为的方式工作的话)将文件直接从磁盘复制到网络接口,因此它发送图像本身的速度与服务器本身的速度一样快。 (当然,运行 PHP 解释器所花费的时间仍然会使整个请求比提供静态文件慢一点。)

      正如至少一个其他答案所提到的,如果您正在运行 Apache,可能设置 Expires 标头(或任何其他标头)的最佳方法是使用 .htaccess 文件,或者如果您有更好的访问服务器的主要配置文件,将Expires配置放在那里。看看mod_expires

      【讨论】:

      • 我想运行 php 而不是让服务器获取文件本身会增加开销。根据您的经验,您认为对于大型应用程序可以忽略它吗?
      • 我的印象是最好让服务器自己处理,不用PHP。但根据我的经验,性能差异很小,除非您的服务器非常繁忙。
      【解决方案3】:

      如果图像处理程序使用 GD 或 Imagick,它将比常规的 img 标签慢得多。

      我建议将图像输出缓存到临时文件,如果文件存在,图像处理程序只会输出原始数据,但如果应该创建新文件,则生成一次,然后再次用于缓存。

      您可以使用 htaccess 设置到期时间。

      .htaccess Caching

      【讨论】:

        【解决方案4】:

        这取决于 imageHandler.php 执行的任务。您可以通过在代码中以毫秒为单位打印时间来测量它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 2023-03-29
          • 2021-06-26
          • 2017-07-19
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          相关资源
          最近更新 更多