Javascript服务器端记录方法时间

时间:2013-07-14 21:29:22

标签: php javascript logging server-side

我刚在webdev商店实习,我的第一份工作是解决我们的客户之一所遇到的问题。长话短说,前雇员编写的一些代码存在一些问题,由于某些未知原因,客户网站的加载时间正在减慢。我的老板告诉我在代码中插入一个记录器,这样我就可以记录给定方法所花费的时间,并找出哪种方法“占用”时间。我必须将给定方法所用的时间日志打印到SERVER上的日志文件中。例如,我想做这样的事情:

function search(x,acc)
    {
        var startTime = new Date().getTime();
            //
            //
            //method code
            //
            //
            var timeTaken = new Date().getTime() - startTime;
            //the question is now how do I print that to some kind of 
            //server side log file i.e.  "/etc/etc/logFile.log"
    }

我对此有点困惑,因为很明显Javascript被解释为客户端,我希望这个文件存在于服务器端,我不知道从哪里开始。作为参考,页面是.php文件,其中js嵌入在HTML中。

编辑:我在这里借助一些答案尝试了一些东西。让我们看看这个解决方案有多好/坏。

 //js function:
 function search(x,acc)
    {
        var startTime = new Date().getTime();
        //do some stuff
        var middleOfFunction = new Date().getTime() - startTime;
        // do some more stuff
        var endOfFunction = new Date().getTime() - middleOfFunction;
        //find out which chunk of code took longer, the beginning or the end

    var max = Math.max(endOfFunction , middleOfFunction);

        <?php 
            $message = 'The longest part of the function took :' . $max . ' seconds.'
            file_put_contents($file, $message , FILE_APPEND |     LOCK_EX);
        ?>

实际代码比这复杂一点,我有一个更具描述性的消息,显示代码的哪一部分需要更长时间,但这是基本的想法。这是否有意义,或者在任何JS运行客户端之前,php是否会运行serveride?我对这种东西很困惑。感谢大家的帮助,这对我来说意义重大。我正努力在家工作的第二天工作,所以我没有让我的老板问他问题。

再次感谢, 断裂。

3 个答案:

答案 0 :(得分:0)

尝试microtime(true);

$start = microtime(true);
// do stuff
$totaltime = microtime(true) = $start;

并记录:

file_put_contents($file, $totaltime, FILE_APPEND | LOCK_EX);

答案 1 :(得分:0)

可能最好的想法是使用AJAX / $ .post();

每次发生某事时,你都会这样做:

$.post("url/to/php_file.php",{variable: "its_content"},function(response){
  if(response=="what_you_wanted_to_happen")
    alert(response_or_some_other_variable);//or do nothing, but for debugg do some alerts
  else
     //do something else here
});

在服务器端,您可以在此处找到信息:How to create log file of my web site in php?

祝你好运! :)

答案 2 :(得分:0)

您可以存储在"<input type='hidden' name='jsTime' id='jsTime' />中。您的JavaScript可能如下所示:

function E(e){
  return document.getElementById(e);
}
function timeTaken(hiddenId, submitId, func, funcArgsArray){
  E(submitId).onclick = function(){
    var start = new Date().getTime();
    func.apply(func, funcArgsArray);
    E(hiddenId).value = new Date().getTime() - start;
  }
}

如果你有<input type='submit' name='sub' id='sub' value='SUBMIT' />和上面隐藏的输入,以及一个名为testFunction的函数,有两个参数,那么你可以使用这个函数:

timeTaken('jsTime', 'sub', testFunction, ['arg1', variable2]);

由于onclick在提交之前触发,隐藏的值将会更新,因此服务器可以使用$_GET['jsTime']$_POST['jsTime']来访问它。

注意:这只会测试JavaScript函数时间。