我意識到每個瀏覽器都會以不同的方式實現它,但是有沒有任何引用或基準指定它?Node.insertBefore的運行時間是多少?
最簡單的實現似乎是O(n)
在Node
編輯的孩子的數量:我跑了一些基準。下面是結果
火狐3.6.10 Linux上
inserted 1000 elements into 1000 elements in 131.44 ms (average over 101 trials, 291.31 ms inc appendChild) while in dom: true
inserted 1000 elements into 10000 elements in 235.91 ms (average over 11 trials, 1311.36 ms inc appendChild) while in dom: true
inserted 1000 elements into 100000 elements in 2349.00 ms (average over 2 trials, 14150.50 ms inc appendChild) while in dom: true
inserted 1000 elements into 1000 elements in 13.13 ms (average over 101 trials, 267.00 ms inc appendChild) while in dom: false
inserted 1000 elements into 10000 elements in 67.45 ms (average over 11 trials, 1517.09 ms inc appendChild) while in dom: false
inserted 1000 elements into 100000 elements in 617.00 ms (average over 2 trials, 15214.50 ms inc appendChild) while in dom: false
的Chrome 7在Linux上:
inserted 1000 elements into 1000 elements in 0.65 ms (average over 101 trials, 30.34 ms inc appendChild) while in dom: true
inserted 1000 elements into 10000 elements in 1.55 ms (average over 11 trials, 175.09 ms inc appendChild) while in dom: true
inserted 1000 elements into 100000 elements in 12.00 ms (average over 2 trials, 2255.00 ms inc appendChild) while in dom: true
inserted 1000 elements into 1000 elements in 0.49 ms (average over 101 trials, 41.13 ms inc appendChild) while in dom: false
inserted 1000 elements into 10000 elements in 1.36 ms (average over 11 trials, 301.18 ms inc appendChild) while in dom: false
inserted 1000 elements into 100000 elements in 12.00 ms (average over 2 trials, 2565.50 ms inc appendChild) while in dom: false
我創建了一個DOM節點,與N
元素填充它,然後叫insertBefore(newchild, randominitialchild)
M
倍。
in dom: false
意味着父節點未添加到文檔樹,所以瀏覽器不應該重新計算佈局(我希望?)
結果似乎表明,插入是O(n)