2010-07-28 82 views
1

在我的工作中,我們所有的JavaScript都是在編譯生產版本之前通過編譯器運行的。其中一個這樣的JavaScript編譯器做的事情(旁邊做這樣的事情縮小),是尋找那些看起來像這樣的代碼行,並帶他們出去我們的JavaScript的發行版本:JavaScript:#debug指令的可能用法?

//#debug 
alert("this line of code will not make it into the release build") 
//#/debug 

我沒有環顧四周,但我還沒有看到這個//#debug指令在我們的任何JavaScript中使用。

這有什麼用處?我不明白爲什麼這可能是一個好主意,並且認爲#debug指令(無論是像C#還是JavaScript這樣的語言)通常都是不好的編程標誌。

僅僅是浪費時間爲#//調試添加功能或者什麼?

回答

1

如果您使用的是像YUI這樣的大型JavaScript庫,它有一個記錄器,它只能在調試模式下記錄調試消息以提高性能。

0

由於是專有解決方案,我們只能猜測原因。很多瀏覽器提供console對象登錄各種類型,如debugerror

你可以寫一個自定義的console對象總是處於生產模式下被禁用的消息。但是,日誌語句仍然存在,但僅處於禁用狀態。

通過讓源代碼通過像你這樣的編譯器,這些語句可以被刪除,這將減少最終輸出的字節大小。

0

認爲它等價於這樣的事情:

// in a header somewhere... 

// debug is off by default unless turned on at compile time 
#ifndef DEBUG 
#define DEBUG 0 
#endif 

// in your code... 

var response = getSomeData({foo:1, bar:2}); 

#if DEBUG 
console.log(response); 
#endif 

doStuffWith(response); 

這種事情是在編譯語言完全可以接受的,爲什麼不能在(預處理)的JavaScript?

0

我認爲它在幾年後很有用(可能非常有用),並且可能是大多數開發人員知道他們的JavaScript中發生了什麼的最簡單方法。那是因爲IDE和其他工具要麼不夠成熟,要麼使用廣泛。我使用VS2008/VS2010,Fiddler和IE8的工具(呃! - FF後面的年代)開發工具和FF工具,比如firebug /錘頭/ yslow /等等,在你的JavaScript中加入警報並不是真正需要調試。 (可能有一些實例非常有用 - 但現在幾乎沒有這種情況。)能夠逐步瀏覽JavaScript,檢查請求/響應,以及即時修改,這實際上使得調試警報語句幾乎已經過時。

所以,//#調試很有用 - 現在可能不是那麼多。

+0

如果用'console.log'而不是'alert'登錄,你會說它有用嗎? – Anurag 2010-07-28 09:27:36

0

我用下面的自制塞入:

// Uncomment to enable debug messages 
// var debug = true; 

function ShowDebugMessage(message) { 
    if (debug) { 
     alert(message); 
    } 
} 

所以,當你聲明的變量debug被設置爲true - 所有ShowDebugMessage()電話會叫alert()爲好。因此,只需在代碼中使用它,並忘記了諸如ifdef之類的條件或手動評論調試輸出行。

0

對於沒有任何特定重寫控制檯的自定義項目。

我會推薦使用:https://github.com/sunnykgupta/jsLogger,它是由我撰寫的。

特點:

  • 它安全地覆蓋的console.log。請注意,如果控制檯不可用(哦,是的,你也需要考慮這一點。)
  • 存儲所有日誌(即使它們被禁止)供以後檢索。
  • 處理主要的控制檯功能,如日誌,警告,錯誤,信息。
  • 是否有修改,並會在有新的建議出現時更新。