【レポート】
![]() |
Nicholas C. Zakas is a web software engineer who specializes in user interface design and implementation for web applications using JavaScript, Dynamic HTML, CSS, XML, and XSLT. |
JavaScriptのNoteListオブジェクトは特殊なオブジェクトだ。同じオブジェクトであるにもかかわらず、動的なオブジェクトと静的なオブジェクトという2種類の実装を持っている。この違いが性能に大きな差を与えている。このあたりの話がWhy is getElementsByTagName() faster that querySelectorAll()? - NCZOnlineにわかりやすくまとまっており参考になる。
JavaScriptには特定の要素のリストを取得する次の方法がある。
Nicholas C. Zakas氏はTwitterのつぶやきを見ていて、この2つの処理時間が大きく違うことに気がついたという。Windows XPのFirefox 3.6.8でgetElementsByTagName("a")とquerySelectorAll("a")を実行して比べてみたところ、querySelectorAll("a")の方が98%も遅かったという。この性能の違いはNoteListオブジェクトに2つの種類があることが理由だと説明されている。NoteListオブジェクトには次の2つの実装がある。
結果として返ってくるNodeListの種類は次のように違っている。
動的なNodeListオブジェクトの生成は要するにデータに対するエントリを追加する実装になる。シャローコピーといえる。これに対して静的なNodeListオブジェクトの生成は実際に関連するデータをすべてコピーして独立したものして保持する実装になる。ディープコピーというわけだ。実装的にみてディープコピーはシャローコピーよりもコストのかかる処理となる。実装を工夫することで改善は可能だろうが、本質的に静的なNodeListを生成するquerySelectorAll()はgetElementsByTagName()よりも処理時間がかかることになる。
Nicholas C. Zakas氏はこうした特性を踏まえたうえで、次のように使いわけるのがいいだろうと指摘している。
| クロスドメインで同じlocalStorageを使うテクニック [2010/9/9] |
| JavaScriptコードのノンブロッキングダウンロードを実現する方法 [2010/8/12] |
| src=""とhref=""で無駄リクエストが発生する問題、ブラウザ対応状況 [2010/7/15] |
| iPad向けWebアプリケーション開発テクニック [2010/4/9] |
| src=""だけでもリクエストとデータ取得が発生する [2010/3/23] |
| 「High Performance JavaScript」、3月登場 [2010/2/12] |
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【女性編】おなかが減ったけどおかずがない! そんなときおかずになる調味料ランキング [15:00 5/27] ライフ |
|
【男性編】おなかが減ったけどおかずがない! そんなときおかずになる調味料ランキング [15:00 5/27] ライフ |
|
1万人の中から現役女子中学生ら3人グランプリ‐「Dream Vocal Audition」 [15:00 5/27] エンタメ |
|
【レポート】「メガホビ EXPO 2012 SPRING」開催! ハイクオリティなフィギュアが多数展示される [14:50 5/27] ホビー |
|
「僕と彼女のゲーム戦争」マンガ化、小冊子で魅力を解説 [14:48 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。