Upgrade to Pro — share decks privately, control downloads, hide ads and more …

javascriptのデータ構造について

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 javascriptのデータ構造について

javascriptのデータ構造の特徴とパフォーマンスについて

More Decks by Taketoshi Aono(青野健利 a.k.a brn)

Other Decks in Programming

Transcript

  1. j ja av va as sc cr ri ip pt

    t D Da at ta a S St tr ru uc ct tu ur re es s
  2. ה׶ִ֮׆鋙ִ׷ֿה •  㘗ָずׄ㜥さדꂁ⴨ד葺ְ㜥さ => Array •  㘗ָ麩ֻגꂁ⴨ָ葺ְ㜥さ => Object • 

    せ⵸ד،ؙإأ׃׋ְ㜥さ => Object •  Set׾⢪ְ׋ְ㜥さ => Object •  Object׾ؗ٦ח׃׋Map٥Setָק׃ְ㜥さ => Map٥Set •  Iterator׾⢪ְ׋ְ㜥さ => Object.keys •  暴㹀ךObjectַ׵׃ַ،ؙإأׇׁ׋ֻזְ㜥さ => WeakMap •  Objectך㼐ㄏהず劍׃׋ְ㜥さ => WeakMap •  غ؎شٔ׾䪔ְ׋ְהֹ => TypedArray •  ؒٝر؍،ٝ׾濼׶׋ְהֹ => DataSet
  3. Array ת׆כծֶ꼧厩׫ךꂁ⴨דׅկ P Pr ro os s •  ؎ٝرحؙأ穗歋ד،ؙإأׅ׷ֿהדծ넝鸞ח暴㹀ךر٦ة׾《䖤〳腉 • 

    ꥴ꟦זֻ⚛ץ׷הًٌٔ♳ח鸬竲׃׋걄㚖ד然⥂ׁ׸׷׋׭넝鸞 C Co on ns s •  ر٦ةꆀָ㟓ִ׷ה䯏Ⰵׅ׷׋ןחًٌٔⱄ《䖤ծ؝ؾ٦ָ饥׶鹼ְ •  䌢ח侧⦼ד،ؙإأ׃זְהְֽזְկ
  4. Object ְ׻ײ׷鸬䟝ꂁ⴨ה׃ג⢪ִתׅկ 鸞䏝כꂁ⴨ך如ח傍ְדׅկ P Pr ro os s •  ؗ٦せָ荈歋

    •  ⦼׮荈歋 •  知⽃ח䭁䓸דֹ׷ •  ꂁ⴨ה׃ג׮⢪ִ׷ C Co on ns s •  ؗ٦せחכ俑㶵⴨׃ַ⢪ִזְ侧⦼כ荈⹛㢌䳔
  5. const u32Arr = new Uint32Array(new ArrayBuffer(1024));! // ArrayBufferの第一引数はバイト数、実際の要素数はViewのバイト数で割った数 // 32bitなら1024

    / 4で256要素格納可能 u32Arr[0] = 1; // ここでは0byteオフセット byteLength = 0 && length = 0! u32Arr[1] = 1; // ここでは4byteオフセット byteLength = 4 && length = 1! ! const dv = new DataView(new ArrayBuffer(1024));! dv.setUint8(2, 1); // Uint8の値を2byteオフセットの位置に書き込む! dv.setInt32(0, 1); // Int32の値を4byteオフセットの位置に書き込む
  6. Map Java괏㄂זMapؙٓأדׅկ ֿךؙٓأך剑㣐ך暴䗙כؗ٦חׅץגךؔـآؙؑز ׾⢪ִ׷ֿהדׅկ P Pr ro os s • 

    ؗ٦ָ荈歋 •  iterator׾㹋鄲׃ג֮׷ C Co on ns s •  ؗ٦ָ⿫撑׾䭯׍竲ֽ׷ •  鹼ְ
  7. Map 姻 姻׃ ׃ֻ ֻ⢪ ⢪ֲ ֲ •  ؗ٦חؔـآؙؑز׾⢪ֲ㜥さכ⢪׻זֻז׏׋׵׃׏ַ׶嶊ׅկ • 

    俑㶵⴨׾ؗ٦חׅ׷㜥さכ׉׮׉׮⢪׻זְկ➿׻׶חؔـآؙؑز ׾⢪ֲ
  8. Set Java괏㄂זSetؙٓأדׅկ Mapהずׄ״ֲחؔـآؙؑز׾ؗ٦חדֹתׅկ P Pr ro os s •  ؗ٦ָ荈歋

    •  iterator׾㹋鄲׃ג֮׷ C Co on ns s •  ؗ٦ָ⿫撑׾䭯׍竲ֽ׷ •  鹼ְ
  9. Set 姻 姻׃ ׃ֻ ֻ⢪ ⢪ֲ ֲ •  ؗ٦חؔـآؙؑز׾⢪ֲ㜥さכ⢪׻זֻז׏׋׵׃׏ַ׶嶊ׅկ • 

    俑㶵⴨׾ؗ٦חׅ׷㜥さכ׉׮׉׮⢪׻זְկ➿׻׶חؔـآؙؑز ׾⢪ֲ
  10. 0 10 20 30 40 50 60 70 80 90

    100 Chrom Safari Firefox Edge Performance 剑׮鹼ְ׮ך׾100%ה׃׋הֹךぐر٦ة圓鸡ךػؿؓ٦وٝأ(2017/06/06) http://jsben.ch/#/hohWB
  11. Result •  㘗ָずׄ㜥さדꂁ⴨ד葺ְ㜥さ => Array •  㘗ָ麩ֻגꂁ⴨ָ葺ְ㜥さ => Object • 

    せ⵸ד،ؙإأ׃׋ְ㜥さ => Object •  Set׾⢪ְ׋ְ㜥さ => Object •  Object׾ؗ٦ח׃׋Map٥Setָק׃ְ㜥さ => Map٥Set •  Iterator׾⢪ְ׋ְ㜥さ => Object.keys •  暴㹀ךObjectַ׵׃ַ،ؙإأׇׁ׋ֻזְ㜥さ => WeakMap •  Objectך㼐ㄏהず劍׃׋ְ㜥さ => WeakMap •  غ؎شٔ׾䪔ְ׋ְהֹ => TypedArray •  ؒٝر؍،ٝ׾濼׶׋ְהֹ => DataSet