JavaScript の pop と shift の速度差

JavaScript の pop と shift の速度差:


概要

JavaScript の Array にある shiftpop の速さってどれぐらい違うのか、という話が某所で出たので、適当に測ってみた。


測定方法

以下の2つのソースをブラウザの開発者機能(?)のコンソールに貼り付けて何が出るかを調査した。

なんか var が無いとか、いろいろ残念なソースだけど気にしない。

shift.js
a=[1] 
while( a.length<100000 ){ 
  a = a.concat(a); 
} 
t0=performance.now(); 
while( 0<a.length ){ 
  a.shift(); 
} 
t1=performance.now(); 
t1-t0; 
pop.js
a=[1] 
while( a.length<100000 ){ 
  a = a.concat(a); 
} 
t0=performance.now(); 
while( 0<a.length ){ 
  a.pop(); 
} 
t1=performance.now(); 
t1-t0; 
マシンは MacBook Pro (Retina, 15-inch, Mid 2015)。

OS は macOS Mojave 10.14.1。


測定結果

ブラウザ shift pop shift÷pop
Chrome70 2788 11 253
Opera57 2782 11 253
Firefox63 52 45 1.2
Safari12 10 3 3.3
IE と Edge がないのが残念だけど仕方ない。


で。

  • Chrome と Opera は同じ感じ。shiftpop に比べてすごく遅い。C++ のvector とかと同じ感じなのかな。
  • Firefox は、shift÷pop がほぼ 1 ということで、shift しても先頭を指すポインタが動くだけとか、そういう実装になっているに違いない。
  • Safari は shift÷pop が 3.3。どんなデータ構造を採用したらこうなるんだろうか。謎。すごく速いのも気になる。

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)