2012-06-10 47 views
0

我試圖遞歸地將CSSStyleDeclaration對象重新應用到文檔的innerHTML中的每個節點。例如,如果您在此頁上調用window.getComputedStyle(document.getElementsByTagName("a")[0]),則返回的哈希中大約有650個不同的屬性。假設我在文檔的innerHTML中有1000個節點。當我循環遍歷innerHTML並在每個CSSStyleDeclaration散列中應用樣式時,即650000個調用node.style.setProperty(key, value)。但是,通過遍歷一個循環,我正在逐個完成每個節點。相反,一次對DOM進行1000次調用而不是執行此循環會更有效率。事情是,如果在Chrome中這是可能的,我不知道如何。Chrome中的併發DOM節點修改?

我懷疑Chrome在整個DOM上有一個GIL(缺少一個更好的詞),但這可能只是迷信。如果不是這樣,我會假設鎖在節點級。但是,總的迷信。我在這個一個沒有真正意義的環境中工作。如果您有任何指示,我將不勝感激。

+0

你能夠做些什麼像'node.style = firstLinkStyle;'?不知道這是否有效。 – cHao

回答

1

首先,DOM被指定爲不是線程安全的,所以很少有機會可以同時應用這些屬性。另外,javascript並不是並行的,所以爲了同時執行這些任務,你必須使用一個WebWorker,它不能像原來那樣訪問DOM,唉,不是線程安全的。其次,爲什麼不在你的文檔中創建一個樣式表,並使用insertRule來附加一個新的動態創建的規則,並讓瀏覽器的渲染引擎爲你完成工作?

+0

因爲對於這個應用程序,我必須嚴格級聯,insertRule出現在計算值步驟之前,以達到我的理解。從DOM Level 2 CSS規範: 'insertRuleUsed將新規則插入樣式表。新規則現在成爲級聯的一部分.' – leahy16

+0

根據您的使用情況,'!important'標誌可能會變得有用:) –