2013-07-14 29 views
0

我剛在webdev商店實習,我的第一份工作就是解決我們客戶的一個問題。長話短說,前僱員編寫的某些代碼存在一些問題,並且由於某些未知原因,客戶端網站上的加載時間正在減慢。我的老闆告訴我在代碼中插入一個記錄器,這樣我就可以記錄一個給定方法所花費的時間,並找出哪種方法「佔用」時間。我必須將給定方法的時間記錄打印到SERVER上的日誌文件中。例如,我想要做這樣的事情:JavaScript服務器方法時間的日誌記錄

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是interpretted客戶方,我想這個文件存在服務器端,我不知道從哪裏開始有了這個。爲了參考,頁面是.php文件,其中嵌入了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會在服務器端運行?我對這類東西感到困惑。感謝大家的幫助,這對我來說意義重大。我試圖展現出我在家工作的第二天,所以我沒有讓我的老闆向他提問。

再次感謝, 休息。

+0

誰或你找到了這份工作? – 2013-07-14 21:32:26

+0

我並不是要求你給我任何代碼,只是一些指向涉及這類事情的參考資料的指針。我是新來的JavaScript,可以真正使用正確的方向推。儘管我尊重你的理解。 – break

+0

我會通過螢火蟲(或替代)登錄客戶端 – 2013-07-14 21:39:09

回答

0

也許是最好的辦法是用AJAX/$後();

每次有事,你這樣做:

$.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?

祝你好運! :)

0

嘗試microtime(true); 。

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

和登錄:

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

沒有它的js不是php – 2013-07-14 21:43:09

+0

正是我的想法,我可以在每個js代碼塊的開始和結尾插入一段php代碼來代替我想要的時間。 ..但我相信PHP會在客戶端執行任何JS之前運行服務器,對吧? – break

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函數的時間。