2015-04-06 86 views
3

我在這裏尋找答案,發現它是通過webstorage和cookie完成的。不過,我也遇到了這個有趣的帖子:在頁面重新加載時以js存儲值

Do browsers parse javascript on every page load?

它說: 「鉻42引入了存儲編譯代碼的本地副本的先進技術,這樣當用戶返回到頁面下載,解析和編譯步驟都可以跳過,在所有頁面加載中,這樣Chrome就可以避免大約40%的編譯時間,並在移動設備上節省寶貴的電池。

這是否意味着變量的值將在頁面重新加載時保持不變? 例如。如果我將用戶選擇的顏色存儲在一個變量中,那麼在另一個頁面(在同一個域上)加載後,該變量是否可用?

P.S:我不能評論,因爲我是新手,沒有足夠的評價答案的聲望。

回答

2

不,這並不意味着存儲變量,或者HTML突然有狀態,這隻意味着Chrome會在內部存儲解析的腳本,因此不必再次下載和解析。

這只是一個內部優化,使Chrome更快,而不是你已經獲得的東西,你仍然需要持久存儲,如cookies,本地存儲或服務器。

+0

感謝您的回答。幾個更多的問題: 解析是否與通過JS渲染/操作DOM樹相同?如果是,那麼瀏覽器如何在不同的頁面上使用相同的預解析JS? (因爲DOM在每次頁面加載時都被重建)如果沒有,那麼請好好解釋差異b/w解析和渲染 此外,瀏覽器中存儲的變量值在哪裏?它是連接到DOM樹還是有一個單獨的內存區域由瀏覽器保留爲JS? (這裏我不是指存儲HTML元素的屬性,例如可能被JS更改的顏色,也可能是DOM樹的一部分) – maverick 2015-04-06 11:36:30

+0

這是非常技術性的,但解析腳本與渲染不同,瀏覽器通常會有一個JavaScript引擎和一起工作的渲染引擎。 Chrome究竟如何在內部完成這些工作對我來說是非常複雜的,但它存儲了腳本以及可能的一些數據,以便知道解析結果是什麼,因此不必再次執行。在第一次頁面加載時,腳本解析通常總是相同的,DOM是相同的。等等變量存儲在內存中,並且由於HTML是無狀態的,所以在新的頁面載入上釋放內存。 – adeneo 2015-04-06 11:46:56

+0

因此,在重新加載頁面或重定向到其他頁面時,所有使用javascript完成的操作都會丟失,因此沒有任何狀態。 Cookie,本地存儲等是跨頁加載數據的唯一方式。 – adeneo 2015-04-06 11:48:40

相關問題