Php 调用缓存映像时,哪一个更高效/更快?

Php 调用缓存映像时,哪一个更高效/更快?,php,gd,Php,Gd,我用php制作了一个图像大小调整器。调整图像大小时,它会缓存具有新维度的新jpg文件。下次调用确切的img.php?file=hello.jpg&size=400时,它会检查是否已经创建了新的jpg 如果尚未创建该文件,它将创建该文件,然后打印输出(很酷) 如果它已经存在,则不需要生成新文件,而是调用已经缓存的文件 我的问题是关于第二种情况。哪一个更快 重定向:header('Location:cache/hello_400.jpg');模具() 抓取数据并打印缓存文件:$data=file\u

我用php制作了一个图像大小调整器。调整图像大小时,它会缓存具有新维度的新jpg文件。下次调用确切的img.php?file=hello.jpg&size=400时,它会检查是否已经创建了新的jpg

  • 如果尚未创建该文件,它将创建该文件,然后打印输出(很酷)
  • 如果它已经存在,则不需要生成新文件,而是调用已经缓存的文件
  • 我的问题是关于第二种情况。哪一个更快

  • 重定向:
    header('Location:cache/hello_400.jpg');模具()
  • 抓取数据并打印缓存文件:
    $data=file\u get\u contents('cache/hello\u 400.jpg');标题('Content-type:'。$mime);
    标题('Content-Length:'.strlen($data));
    回波数据
  • 还有其他方法可以改进吗


    如果有人想要生成的代码,请检查以下内容:


    谢谢大家的帮助

    我会选择从不将数据打印到浏览器。这两种情况都应该向生成的映像抛出永久重定向。除非图像还不存在,否则它是在发送位置标头之前创建的

    编辑:

    只是想弄清楚我说的永久重定向是什么意思

    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: http://path/to/image'); 
    
    作为第三个(更强大的)选项:将图像缓存在数据库的二进制字段中,并查询数据库中的图像

    实施所有三种解决方案并对其进行基准测试

    我猜第一个选项(重定向)将是现实世界中最慢的,因为它需要与第二个选项(file\u get\u contents)一样多的努力,但涉及第二个请求和更多的开销

    还有其他方法可以改进吗

    有一种只发送HTTP头的方法:条件get。

    您可以查看类似的脚本,对于实现,您可以执行以下操作:

  • 为这些图像设置一些目录

  • 链接到此目录中的图像(
    如果可能,在您的情况下,您还可以实现一个函数,直接在html中设置缓存图像的url,如:

    <img src="<?php getImageUrl('hello.jpg', 400); ?>" />
    
    “/>
    

    getImageUrl()将返回缓存图像的url(如果存在),否则它将返回url以动态生成调整大小的图像。

    一个好问题(我不确定哪个更快)。若要添加到Matt,它可以在从浏览器到代理服务器的internet点上缓存图像。这非常有效。如果图像不存在,脚本将创建新的调整大小的img并缓存它。下次您请求相同的链接时,脚本将为浏览器缓存的img提供服务。谢谢。如果有人想要生成的代码,请检查:您可以nt来研究使用readfile()而不是file\u get\u内容,因为整个文件从未加载到php中,而是直接发送到user@ChrisT文件获取内容()是将文件内容读入字符串的首选方式,因此我猜readfile不是最好的方式。他不需要将其加载到字符串中,只需将其输出到浏览器+1即可。我同意。尽可能委托给Apache,仅在实际需要时调用PHP。
    <img src="<?php getImageUrl('hello.jpg', 400); ?>" />