2013-04-13 49 views
0

這是一個非常簡單的問題,但它可能對我們中的一些人非常有用。我一直在谷歌尋找答案,但我沒有找到它。我對瀏覽器如何讀取if/else語句有疑問。簡而言之,當條件爲false時,瀏覽器是否忽略了結果(即不讀取它)或瀏覽器首先讀取它,但它不執行代碼?當例如你有一個真實長的循環代碼時,差別是巨大的。謝謝!瀏覽器如何真正閱讀if/else語句?

+1

它不是瀏覽器,而是它內部的Javascript解釋器,它解析Javascript的條件語句。現代的Javascript實現非常複雜(追蹤JIT技術等) –

+6

如果您的循環代碼足夠長,以至於掃描它需要多長時間,則可能是錯誤的。 – FrankieTheKneeMan

回答

2

總之,它取決於用戶代理,更具體地說,它的JavaScript引擎。現代引擎非常聰明,可能會一起忽略它,特別是如果它可以推斷出該分支是死代碼並且永遠不會執行。即,這個代碼可以安全地忽略:

if (false) { 
    // Do a bunch of stuff 
} 

然而,即使它沒有,它很可能你會需要的代碼非常大量的在您的分支爲它實際上使在解析延遲的差異。有幾條線不足以保證任何速度問題。

一如既往的表現,然而,衡量真的是唯一重要的事情。人們會說什麼更快的事情,但沒有證據就沒有意義,所以如果你不確定哪個更快,那麼測量它!根據JavaScript引擎,您可能會得到非常不同的結果,因此無論如何,最好採取這種方式來詢問StackOverflow,即使這個是一個非常聰明的社區。

查看jsperf可以很好地衡量不同用戶代理之間的差異。

+0

謝謝!我會檢查出jsperf。此外,我的問題不切實際,而是理論上的。我有一個可以正常工作的requestAnimationFrame循環,但是我想知道我是否做得正確。只是。 – Angel

+1

事情是,在談論表演時,理論上幾乎總是毫無用處,因爲你很可能最終錯了。在談論績效時,衡量是唯一重要的事情。在你衡量之前,你永遠不會知道。 –