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

我需要检查服务器上文件的可用性,然后做一些与文件相关的反应。我在每个客户端和服务器端都有文件名和路径,然后我有两种方法来检查可用性。一个来自客户端,另一个来自服务器端。


第一种方式:

客户端:


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 database

echo '{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。


因为该文件大部分不存在,并且因为它需要处理数百万个请求,那么请您指导我哪种方式更好,为什么?


哆啦的时光机
浏览 142回答 2
2回答

慕哥9229398

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

慕沐林林

虽然第一种方式可能更快,但假设在大多数情况下文件不存在,我会选择第二种方式。第一种方式比第二种方式快,因为它不调用 PHP 处理程序,而只是调用默认的静态文件处理程序。我没有测试过,但我认为检查文件是否存在并返回某种错误 (404) 应该比调用 PHP 解释器更快,后者然后执行 PHP 文件。然而,第二种方式在 IMO 上比第一种方式更清晰、更易于理解,提供了更好的集中“文件检查”逻辑,它以第一种方式分布在服务器和客户端上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript