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

仮想DOMの実装とパフォーマンス 

 仮想DOMの実装とパフォーマンス 

仮想DOMを実装してみてわかったこと、パフォーマンスに効果のあった実装方法

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

Other Decks in Programming

Transcript

  1. What is virtual dom?  DOM node DOM node DOM

    node DOM node DOM node DOM node Virtual Node Virtual Node Virtual Node Virtual Node Virtual Node Virtual Node DOM tree VDom Tree
  2. div span div text span p What is virtual dom?

     div span div text span p Removed VDom tree A VDom Tree B 嫰鯰
  3. DOM node DOM node DOM node DOM node DOM node

    DOM node div span div text span p Removed What is virtual dom?  VDom tree Dom Tree ؔلٖ٦ءّٝ׾黝欽 Remove OP
  4. Virtual DOM Implementation  <div> {[1, 2, 3].map(v => <span>{v}</span>)}

    <span>test</span> </div> React.createClass(‘div’, {}, [1, 2, 3].map(v => React.createClass(‘span’, {}, v)), React.createClass(‘span’, {}, ‘test’) )
  5. Virtual DOM Implementation  React.createClass(‘div’, {}, //䒷侧ה׃ג㶨銲稆׾「ֽ《׷ָծ㶨銲稆ך㘗ָ麩ֲկ [1, 2, 3].map(v

    => React.createClass(‘span’, {}, v)), //痥♧䒷侧כReactElementךꂁ⴨ծ痥✳䒷侧כReactElement React.createClass(‘span’, {}, ‘test’) )
  6. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“4” li key=“3” li key=“2” li key=“1” ؙ ؙٗ ٗأ أ  Unmatch Match treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 4 treeBRightIndex = 4
  7. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“4” li key=“3” li key=“2” li key=“1” ؙ ؙٗ ٗأ أ  Unmatch Match treeALeftIndex = 0 treeARightIndex = 3 treeBLeftIndex = 1 treeBRightIndex = 4
  8. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“4” li key=“3” li key=“2” li key=“1” ؙ ؙٗ ٗأ أ  Unmatch Match treeALeftIndex = 0 treeARightIndex = 2 treeBLeftIndex = 2 treeBRightIndex = 4
  9. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“4” li key=“3” li key=“2” li key=“1” ؙ ؙٗ ٗأ أ  Unmatch Match treeALeftIndex = 0 treeARightIndex = 2 treeBLeftIndex = 2 treeBRightIndex = 4
  10. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“4” li key=“3” li key=“2” li key=“1” ؙ ؙٗ ٗأ أ  Match treeALeftIndex = 0 treeARightIndex = 2 treeBLeftIndex = 2 treeBRightIndex = 4
  11. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“3” li key=“1” li key=“2” li key=“4” li key=“5” ٔ ٔ، ،  Unmatch Unmatch treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 4 treeBRightIndex = 4 Match
  12. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“3” li key=“1” li key=“2” li key=“4” li key=“5” ٔ ٔ، ،  Unmatch Unmatch treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 3 treeBRightIndex = 3 Match
  13. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“3” li key=“1” li key=“2” li key=“4” li key=“5” ٔ ٔ، ،  Unmatch Match treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 2 treeBRightIndex = 2
  14. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“3” li key=“1” li key=“2” li key=“4” li key=“5” ٔ ٔ، ،  Match treeALeftIndex = 0 treeBLeftIndex = 1 treeARightIndex = 2 treeBRightIndex = 2
  15. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“3” li key=“1” li key=“2” li key=“4” li key=“5” ٔ ٔ، ،  Match treeALeftIndex = 1 treeBLeftIndex = 2 treeARightIndex = 2 treeBRightIndex = 2
  16. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“4” li key=“2” li key=“3” li key=“1” li key=“5” ؙ ؙٗ ٗأ أ٥ ٥ٔ ٔ، ،  Unmatch Unmatch treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 4 treeBRightIndex = 4 Match
  17. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“4” li key=“2” li key=“3” li key=“1” li key=“5” ؙ ؙٗ ٗأ أ٥ ٥ٔ ٔ، ،  Unmatch Match treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 3 treeBRightIndex = 3
  18. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“4” li key=“2” li key=“3” li key=“1” li key=“5” ؙ ؙٗ ٗأ أ٥ ٥ٔ ٔ، ،  Unmatch Unmatch treeALeftIndex = 0 treeBLeftIndex = 1 treeARightIndex = 2 treeBRightIndex = 3 Match
  19. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“4” li key=“2” li key=“3” li key=“1” li key=“5” ؙ ؙٗ ٗأ أ٥ ٥ٔ ٔ، ،  treeALeftIndex = 1 treeBLeftIndex = 1 treeARightIndex = 2 treeBRightIndex = 2 Match
  20. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“4” li key=“2” li key=“3” li key=“1” li key=“5” ؙ ؙٗ ٗأ أ٥ ٥ٔ ٔ، ،  treeALeftIndex = 2 treeBLeftIndex = 2 treeARightIndex = 2 treeBRightIndex = 2 Match
  21. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“3” li key=“1” li key=“4” li key=“2” ֲ ֲת תֻ ְֻ ְַ ַז זְ ְ㜥 㜥さ さ  Unmatch Match treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 4 treeBRightIndex = 4
  22. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“3” li key=“1” li key=“4” li key=“2” ֲ ֲת תֻ ְֻ ְַ ַז זְ ְ㜥 㜥さ さ  Unmatch Unmatch treeALeftIndex = 0 treeBLeftIndex = 1 treeARightIndex = 3 treeBRightIndex = 4 Unmatch Unmatch
  23. Virtual DOM Implementation  li key=“1” li key=“2” li key=“3”

    li key=“4” li key=“5” li key=“5” li key=“1” li key=“3” li key=“4” li key=“2” ֲ ֲת תֻ ְֻ ְַ ַז זְ ְ㜥 㜥さ さ  treeALeftIndex = 0 treeBLeftIndex = 0 treeARightIndex = 4 treeBRightIndex = 4 {1: 1, 3: 2, 4: 3, 2: 4} = {key: index} Map
  24. Virtual DOM Implementation  ֲתְַֻ׆ծMapך欰䧭ָ䗳銲ז؛٦أד׮ծ 剑㼭ך眔㔲דMap׾欰䧭ׅ׷׌ֽד幥׬ךד⸬桦ָ״ְկ li key=“1” li key=“2”

    li key=“3” li key=“4” li key=“5” li key=“5” li key=“1” li key=“3” li key=“4” li key=“2” この範囲 この範囲