2012-10-03 28 views
1

多重內嵌腳本:多個內聯腳本比一個聯合內聯腳本慢嗎?

<script type="text/javascript">/* some codeblock 1 */</script> 
<script type="text/javascript">/* some codeblock 2 */</script> 
<script type="text/javascript">/* some codeblock 3 */</script> 

單聯體嵌入式腳本:

<script type="text/javascript"> 
    /* some codeblock 1 */ 
    /* some codeblock 2 */ 
    /* some codeblock 3 */ 
</script> 

多個內嵌腳本慢?

+3

爲什麼你不基準它,看看自己? –

+2

我不確定速度,但我知道每個字母/字符佔用文件大小的一些空間,所以後面的僞代碼會使頁面更輕。 – inhan

+0

[多個內聯JS腳本是否會減慢頁面的加載時間?](http://stackoverflow.com/questions/4851690/do-multiple-inline-js-scripts-slow-down-loading-time-一頁) – nosebrain

回答

2

如果你談論緊靠編寫的代碼在實際的HTML,而不是加載外部JS,那麼答案是,它其實並不重要。

...如果瀏覽器試圖以60fps的速度處理視覺刺激請求,則根據需要進行更改... ...然後幾微秒的差異不會產生太大影響。

在真正舊​​的瀏覽器上,如果您試圖編寫大量代碼(可能每行數千行,或每行數萬行),那麼使用多行可能會產生明顯的差異。但在這種情況下,擁有單個元素仍然很愚蠢。

0

我猜單聯體嵌入式腳本是稍快

+4

'[需要引證]' –

1

看不到任何可以測量的方式。

現代瀏覽器的解析器速度非常快 - 它們本質上是對排序引擎。這個塊到HTML引擎,這個塊到CSS引擎,這個塊到JavaScript引擎 - 這些引擎可能需要一些時間來做他們的事情,但將塊放到正確的位置不是性能問題。

下載即使是一個小頁面的性能也會大於收集代碼塊並將其發送到引擎的性能。

此外,JavaScript(以及許多其他互操作語言)通過預處理器運行,該預處理器在加載和運行時將其轉換爲機器碼。現在可能有一個更流行的名字(可能有「雲」),但它曾被稱爲「即時編譯」(JIT)。

這一切都非常糾結,但基本上,因爲頁面正在加載它只是發送它找到的所有腳本到這個JIT引擎。這個人收集代碼,優化它並將其存儲在內存中,並將需要立即運行的任何內容傳遞給執行引擎。隨着事情的發展和增加,它試圖儘可能簡化事情,這是最爲困難的。

因此,對於延遲的代碼(例如稍後調用的函數),塊數根本無關緊要。 JIT編譯器將創建內存優化代碼,無論如何都會忽略塊結構。對於在遇到時直接運行的內聯代碼,這並不重要,因爲使用腳本引擎的分析器速度如此之快,以至於您無法在任何合理的情況下看到差異。

這就是說你可能能夠構建一個測試用例,可能顯示出不同。但是我懷疑,在看到可測量的差異之前,你需要進入數千(或數萬)的區域範圍。在這一點上,其他變量 - 如文件大小(每個新的腳本塊增加大約40個字節的文件大小)和渲染時間 - 將會產生巨大影響,因此您可能永遠無法看到差異。底線:寫乾淨的,記錄在案的邏輯代碼,忘記下面的編譯器。這將爲您節省實際時間和金錢,而不是給您分數,不可思議的性能提升。