在symfony 2上,使用Twig
您可以使用asset()
功能以方式链接图像
{{ asset('path_to_the_image') }}
,现在如果文件不存在则文件的src保持不变,
考虑到这一点,我很想在我的TwigExtensions
上创建另一个Twig函数,以便检查文件的存在,以便执行以下操作,如果文件存在,那么我将使用给定的URL和如果不存在,那么我将把函数的结果更改为我将用作not_image图像的默认图像。
此功能的动机是始终向用户显示图像。
现在,我的问题。
我无法弄清楚这种方法的性能问题,因为我将检查文件两次,第一次检查是否存在,另一次是请求文件的请求。通常要做的就是放置资产地址,以防文件不存在,用javascript替换一些默认文件。
我将使用php的file_exists函数,并且我阅读的手册非常便宜,如果文件确实存在,则会缓存结果以避免性能问题。
提前致谢...
答案 0 :(得分:2)
file_exists
触发对文件系统的读访问(或者甚至只是FS元数据)。这确实非常便宜。请记住,在运行Symfony应用程序时,您通常只能访问数百个PHP文件。
file_exists
的结果确实被缓存,但仅限于执行脚本期间。因此,如果您在一次脚本执行中多次调用file_exists
(并且之间不调用clearstatcache
),则会缓存结果。如果稍后再次调用该脚本,PHP将再次查找该文件。
但是,如果确实担心性能问题,则不应在运行时检查文件是否存在“,而是创建一个Symfony命令,检查所有链接资产是否在建设或部署。
此命令基本上会呈现所有页面,而您的自定义资产函数将返回虚拟图像而不是返回异常。这样,您只需在部署期间检查一次所有资产是否有效。