我意识到每个浏览器都会以不同的方式实现它,但是有没有任何引用或基准指定它?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)