記事へのコメント33

    • 注目コメント
    • 新着コメント
    t_f_m
    2019年6月の記事

    その他
    axljpn
    みんな new Array() ってやってるのか…というのが一番の衝撃。JSではx = []が普通だと思ってた。

    その他
    mysticatea
    array.fill(0) したら戻らないかな?

    その他
    efcl
    V8は疎の配列は最適化しないという話。一度でもsparseなarrayになると、fast pathから落ちてしまう

    その他
    ginpei
    empty slotsを持つHoley Array状態だと要素アクセスがV8で17%遅くなるという計測結果。また一度なるとそうでないPacked状態には戻せない。実際この差を気にする程の実装することはないだろうけど、こういうのたのしい。

    その他
    you21979
    推測するな計測せよ案件。でも正直こまる。typedarray使うしかないかな

    その他
    iwadon
    確認用ページの各ブラウザの結果を見たら、Chrome以外はそこまで差がないかむしろHoleyの方が早い場合があるようで興味深い。

    その他
    uzimith
    こういう最適化によるコード書くとエンジンが進化していらなくなったあと読むと謎になるから思うがままに書いたほうがよさそう

    その他
    mayumayu_nimolove
    airbnbの方式でやれって言ってる

    その他
    rryu
    むしろ「new Array(100)」はPacked Arrayが保証されそうな気がするのにHoley Arrayになるのはどういう利用想定なのだろう。

    その他
    lorenz_sys
    js やる人で配列の実装を意識する人ってどのくらいいるんだろう? まぁアプリの仕事やってるとよっぽどの問題がない限り言語実装レベルに思いをはせることは忘れがちになってしまうんだよなぁ。言語に関係なく。

    その他
    kathew
    new Array(100)するくらいなら100回push()せよということらしい。このくらいならちょっと意識してれば良いので問題ないかな/他言語でありふれている書き方がNoとされるのは微妙だけど

    その他
    amedama41
    そもそもなんで穴あき配列なんて仕様を入れたのか。メリットよりも、バグの要因になるデメリットの方が大きそう

    その他
    diveintounlimit
    17%はまぁ、誤差の範囲内って感じするなぁ(´・ω・`)エンジンの実装に寄せてチューニングするのはあんまりいい感じしない。

    その他
    tick2tack
    最適化は最適化の必要性が出たときにのみ行うべきとしたうえで、こういう話を知るのは楽しい

    その他
    kabochatori
    ほぼ使われることのないArrayコンストラクタはやっぱり使う必要がなかった

    その他
    annoy
    モダンな言語で実装とかの細部は抽象化されたプログラミングをしていたはずなのに本末転倒だよなあ。

    その他
    og24715
    range = r => [...new Array(r).keys()]

    その他
    monorod
    JavaScriptは割と速度求める気がするけど…、でもこういう系の実行速度はブラウザによってまちまちだから最適化しづらくて、結局あまり考えない方が良いのはある。トランスパイラとか使ってればもうわからんしな

    その他
    Helfard
    興味深い。この仕様は合理的ではあると思うけど、そのうち定期的に再検証するようにはならないのかな?

    その他
    yulalila
    資料的なテーブル作るときによくやってた。気をつけよ。

    その他
    odakaho
    “new Array(0) で長さゼロの配列を作っても、なぜか穴あき配列(Holey Array)扱いされてしまうようです。もちろん new Array(1, 2, 3) のように初期化すると、詰まった配列(Packed Array)扱いされる”

    その他
    madooka
    速度差については追試してみたいが、とりあえず面白い / 以前(いつ)はキー n に値を入れただけで n+1 要素確保されていたような

    その他
    fn7
    fn7 バージョンアップで改善されて意味のないコーディングスタイルが残るということになりそうだからやらないけど、面白い内容でした。

    2019/06/10 リンク

    その他
    infobloga
    infobloga 話としては興味深いだけど、17%は誤差範囲だよな。非ネイティブなPromiseやasync-awaitのオーバヘッドとか比べ物にならないほど重いけど、普通にみんな使ってるしね。

    2019/06/10 リンク

    その他
    otherworld
    個人的にはここ20年ぐらいでnew Array(100)を必要とする機会がなかったかも。

    その他
    chimerast
    chimerast C++やJavaあたりの、配列リストの要素追加時のメモリ再配置について知っているとやりがちかも。最近はCPU速いし実装も賢くなってるからやらないな。あとよほど高頻度でアクセスしない限り17%の速度劣化は無視していい。

    2019/06/10 リンク

    その他
    yasu-log
    yasu-log イミュータブル思考や関数型など、GC起きまくり富豪プログラミングをしているプログラマには、速度の大事さやこの記事のありがたみがわからないのでは

    2019/06/10 リンク

    その他
    fa11enprince
    fa11enprince うーん。JavaScriptにぶっちゃけ速度なんて求めてない。変なハックやられるほうが困る

    2019/06/09 リンク

    その他
    kazuau
    new Array(100)と[...new Array(100)]が違うものになってパフォーマンスも違うということなら、エンジンの最適化がまだ不十分なのではないだろうか

    その他

    注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています

    アプリのスクリーンショット
    いまの話題をアプリでチェック!
    • バナー広告なし
    • ミュート機能あり
    • ダークモード搭載
    アプリをダウンロード

    関連記事

    高速化の観点から new Array(100) を使わない方が良い理由

    別件で V8 の JIT コードの逆アセンブルを眺めている時に気づいたのですが、JavaScriptで new Array(100...

    ブックマークしたユーザー

    • funghi_seven2025/06/03 funghi_seven
    • t_f_m2024/06/11 t_f_m
    • techtech05212023/09/09 techtech0521
    • ggkuron2023/01/10 ggkuron
    • sugyan2021/02/23 sugyan
    • a96neko2021/01/06 a96neko
    • sucrose2020/09/30 sucrose
    • kyo_ago2020/07/27 kyo_ago
    • mkusaka2019/12/31 mkusaka
    • berlysia2019/12/11 berlysia
    • mfham2019/06/20 mfham
    • uki00a2019/06/14 uki00a
    • axljpn2019/06/14 axljpn
    • mysticatea2019/06/14 mysticatea
    • efcl2019/06/14 efcl
    • ilyaletre2019/06/13 ilyaletre
    • somathor2019/06/12 somathor
    • shoma2019/06/12 shoma
    すべてのユーザーの
    詳細を表示します

    同じサイトの新着

    同じサイトの新着をもっと読む

    いま人気の記事

    いま人気の記事をもっと読む

    いま人気の記事 - テクノロジー

    いま人気の記事 - テクノロジーをもっと読む

    新着記事 - テクノロジー

    新着記事 - テクノロジーをもっと読む

    同時期にブックマークされた記事

    いま人気の記事 - 企業メディア

    企業メディアをもっと読む