为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 是否比 Nginx/Apache 更快地检查文件是否存在?

PHP 是否比 Nginx/Apache 更快地检查文件是否存在?

哆啦的时光机 2021-11-18 16:59:52
我需要检查服务器上文件的可用性,然后做一些与文件相关的反应。我在每个客户端和服务器端都有文件名和路径,然后我有两种方法来检查可用性。一个来自客户端,另一个来自服务器端。第一种方式:客户端:function check_file(){    $.ajax({        url:'http://www.example.com/somefile.txt',        type:'HEAD',        error: function()        {            //file not exists            //check again after 5 seconds            setTimeout(function(){                check_file();            }, 5000);        },        success: function()        {            //file exists            //start doing other actions related to the file            action_1();        }    });}function action_1(){    $.ajax({        url:'http://www.example.com/action_1.php',        success: function(data)        {            var result = $.parseJSON(data);            if (result.success)            {                //Changes were applied successfully.                //doing some DOM stuff and notifying the client                //check again after 5 seconds                setTimeout(function(){                    check_file();                }, 5000);            }        }    });}服务器端(action_1.php)://update databaseecho '{success: true}';第二种方式:客户端:function action_2(){    $.ajax({        url:'http://www.example.com/action_2.php',        success: function(data)        {            var result = $.parseJSON(data);            if (result.success)            {                //Changes were applied successfully                //doing some DOM stuff and notifying the client            }            setTimeout(function(){                action_2();            }, 5000);        }    });}服务器端(action_2.php):if (file_exists('somefile.txt')){    //update database    echo '{success: true}';}else{    echo '{success: false}';}在第一种方式,我打电话服务器的两倍(Request/ Response/ Request,请注意第一个请求只要求对HEAD),并且它正在使用Apache's默认方案来检查文件的可用性(我不知道它是如何工作的)。但是在第二种方式中,我调用了服务器一次,它正在使用PHP file_exists()这意味着它需要先加载PHP environment,然后执行action_2.php。因为该文件大部分不存在,并且因为它需要处理数百万个请求,那么请您指导我哪种方式更好,为什么?
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

第一种方法肯定更快,特别是如果服务器上有 Nginx 而不是 Apache,但您必须确保您的提取“somefile.txt”没有以任何方式缓存。

您的浏览器和 Web 服务器都喜欢缓存静态文件。


查看完整回答
反对 回复 2021-11-18
?
慕沐林林

TA贡献2016条经验 获得超9个赞

虽然第一种方式可能更快,但假设在大多数情况下文件不存在,我会选择第二种方式。

第一种方式比第二种方式快,因为它不调用 PHP 处理程序,而只是调用默认的静态文件处理程序。我没有测试过,但我认为检查文件是否存在并返回某种错误 (404) 应该比调用 PHP 解释器更快,后者然后执行 PHP 文件。

然而,第二种方式在 IMO 上比第一种方式更清晰、更易于理解,提供了更好的集中“文件检查”逻辑,它以第一种方式分布在服务器和客户端上。


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信