Symfony 2资产,检查文件是否存在性能

时间:2015-06-25 21:34:18

标签: php symfony

在symfony 2上,使用Twig您可以使用asset()功能以方式链接图像  {{ asset('path_to_the_image') }},现在如果文件不存在则文件的src保持不变,

考虑到这一点,我很想在我的TwigExtensions上创建另一个Twig函数,以便检查文件的存在,以便执行以下操作,如果文件存在,那么我将使用给定的URL和如果不存在,那么我将把函数的结果更改为我将用作not_image图像的默认图像。 此功能的动机是始终向用户显示图像。

现在,我的问题。

我无法弄清楚这种方法的性能问题,因为我将检查文件两次,第一次检查是否存在,另一次是请求文件的请求。通常要做的就是放置资产地址,以防文件不存在,用javascript替换一些默认文件。

我将使用php的file_exists函数,并且我阅读的手册非常便宜,如果文件确实存在,则会缓存结果以避免性能问题。

提前致谢...

1 个答案:

答案 0 :(得分:2)

file_exists触发对文件系统的读访问(或者甚至只是FS元数据)。这确实非常便宜。请记住,在运行Symfony应用程序时,您通常只能访问数百个PHP文件。

file_exists的结果确实被缓存,但仅限于执行脚本期间。因此,如果您在一次脚本执行中多次调用file_exists(并且之间不调用clearstatcache),则会缓存结果。如果稍后再次调用该脚本,PHP将再次查找该文件。

但是,如果确实担心性能问题,则不应在运行时检查文件是否存在“,而是创建一个Symfony命令,检查所有链接资产是否在建设或部署。

此命令基本上会呈现所有页面,而您的自定义资产函数将返回虚拟图像而不是返回异常。这样,您只需在部署期间检查一次所有资产是否有效。