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

Node Streamでメモリ性能改善、そしてWeb Streams APIへ / Improving memory performance of the CLI tool using Node Stream

tasshi
July 07, 2023

Node Streamでメモリ性能改善、そしてWeb Streams APIへ / Improving memory performance of the CLI tool using Node Stream

Cybozu Frontend Day 2023のセッション資料です。
サイボウズで開発しているNode.js製CLIツール「cli-kintone」のメモリ使用量を、Node Streamを用いて改善しました。

目次
- Node Streamの概要
- AsyncIterator と for await...of
- Node Streamを用いたNode製CLIツールのメモリ使用量改善
- Web Streams API

tasshi

July 07, 2023
Tweet

More Decks by tasshi

Other Decks in Programming

Transcript

  1. /PEF4USFBNͰϝϞϦੑೳվળ ͦͯ͠8FC4USFBNT"1*΁ $ Z C P [ V ' S

    P O U F O E  % B Z                α Π Ϙ ΢ ζ ג ࣜ ձ ࣾ L J O U P O F % 9 ν ʔ Ϝ U B T T I J
  2. ࣗݾ঺հ • UBTTIJ ా୅խ࣏ • ॴଐ • αΠϘ΢ζגࣜձࣾ • LJOUPOF

    %9νʔϜ • झຯ • ήʔϜ🎮 • ࣗసं🚴 
  3. /PEF4USFBN͸େ͖͘छྨ • 3FBEBCMFಡΈऔΓՄೳͳσʔλετϦʔϜ • 8SJUBCMFॻ͖ࠐΈՄೳͳσʔλετϦʔϜ • %VQMFY5SBOTGPSN • ಡΈऔΓՄೳ͔ͭॻ͖ࠐΈՄೳͳσʔλετϦʔϜ •

    5S BOTGPS N͸ड͚औͬͨνϟϯΫʹม׵Λߦͬͯૹग़͢Δ ΄΅%VQMFYͱҰॹ͚ͩͲม׵ॲཧΛ࣮૷͠΍͘͢ͳ͍ͬͯΔ ʢDPOTUS VDUPS΍USBOTGPSN@USBOTGPSN ʣ • Կ΋͠ͳ͍1BTT5ISPVHI΋͋Δ 
  4. 4USFBNͷϝϦοτ • গͳ͍ϝϞϦͰॲཧͰ͖Δ • ඇಉظॲཧʹର్ͯ͠தͰॲཧΛڬΊΔ • ֎͔Β1SPHSF TTΛऔಘͨ͠Γɺ$ BODF Mͨ͠ΓͰ͖Δ

    • ্ྲྀɾԼྲྀͰฒߦʹॲཧΛߦ͑ΔͨΊɺ௿஗Ԇ ʮ4USFBNΛ੍͢Δ΋ͷ͸ɺ/PEFKTΛ੍͢ʯ ʢΒ͍͠ʣ 
  5. 4USFBNͷσϝϦοτ • ֶशίετ͕ߴ͍ • ಉظॲཧ΍BTZODBXBJUͱͷ૬ੑ͕ѱ͍ • 4USF BN͸&WF OU&NJUUF S͕ϕʔεʢΠϕϯτۦಈύϥμΠϜʣ

    • ಉظॲཧʹॲཧʹ૊ΈࠐΈʹ͍͘ • ΤϥʔϋϯυϦϯά͕೉͍͠ • ͦͷଞɺ࢖ͬͯΈͯؾʹͳͬͨͱ͜Ζ͸ޙड़ 
  6. վળํ਑ • DMJLJOUPOF͸$-*πʔϧͰ΄΅શͯ௚ྻ • Π ϕ ϯ τ υ Ϧ

    ϒ ϯ ʹ ͢ Δ ඞ ཁ ੑ ͸ ௿ ͍ • Ұ ఆ ݅ ਺ ͣ ͭ ϧ ʔ ϓ ճ ͠ ͯ ॲ ཧ ͠ ͨ Β ͍ ͍ ͷ Ͱ ͸ ʁ • ҎԼͷཧ༝Ͱ෦෼తʹ4USFBNΛ࠾༻ͨ͠ • ݁ ہ 4 U S F B N ͷ ࠶ ࣮ ૷ ʹ ͳ Γ ͦ ͏ ͩ ͬ ͨ ͜ ͱ • 4 U S F B N ඇ ޓ ׵ ͩ ͱ 4 U S F B N ४ ڌ ͷ ϥ Π ϒ ϥ Ϧ ͕ ࢖ ͑ ͳ ͍ • ক དྷ త ʹ ͸ ฒ ྻ ॲ ཧ ʹ ͳ Δ Մ ೳ ੑ ΋ ͋ Δ ͨ Ί • SFTUBQJDMJFOU͕4USFBNඇରԠ • G T ͔ Β ಡ Έ ग़ ͠ ˠ L J O U P O F Ϩ ί ʔ υ ΁ ͷ ม ׵ Λ 4 U S F B N Ͱ ॲ ཧ • Ҏ ߱ ͸ G P S    B X B J U Ͱ ಉ ظ ॲ ཧ ʹ ૊ Έ ࠐ Ή 
  7. %BUB4PVSDF • ಺ ෦ ʹ 3 F B E B

    C M F ͱ 5 S B O T G P S N Λ Q J Q F ͠ ͨ ΋ ͷ Λ อ ࣋ • M F O H U I   શ ݅ ૸ ࠪ ͠ ɺ ݅ ਺ Λ ฦ ͢ • S F B E F S   ಺ ෦ ͷ 4 U S F B N 5 S B O T G P S N Λ ฦ ͢ 
  8. /PEF4USFBNؾʹͳͬͨͱ͜Ζ • 4USFBNΛ߹੒ͯͭ͠ͷ4USFBNʹ͢Δ҆ఆͳํ๏͕ͳ͍ • 4USF BNDPNQPTF  4UBHF  •

    1VNQJGZͳͲͷ֎෦ϥΠϒϥϦ • 8FC4USFBNT" 1*ͩͱ؆୯ʹͰ͖Δ • DIVOLͷܕ͕BOZ • 8SJUBCMF3FBEBCMF Λܧঝͯ͠ܕΛ౰ͯΕͦ͏͚ͩͲେม • QJQFݩ͕FSSPSDMPTFͯ͠΋QJQFઌ͸ࣗಈͰDMPTF͠ͳ͍ • &SSPSΠϕϯτϋϯυϥͰQJQFઌ΋EF TUPSZ͢Δ 
  9. GTύοέʔδͰؾʹͳͬͨͱ͜Ζ • GJMFIBOEMFDSFBUF3FBE4USFBN • G E Λ ։ ͍ ͨ

    · · ʹ ͠ ͯ ɺ ݎ ࿚ ʹ ॲ ཧ Λ ਐ Ί ͨ ͍ • σ ϑ Υ ϧ τ Ͱ B V U P $ M P T F  U S V F ˠ ಡ Έ ऴ ͑ ͨ Β G E ͕ ด ͡ Δ • G E Λ ࢖ ͍ ճ ͢ ʹ ͸ ɺ D S F B U F 3 F B E 4 U S F B N ͢ Δ ৔ ॴ શ ͯ Ͱ ඞ ͣ B V U P $ M P T F  G B M T F Λ ઃ ఆ ͠ ͳ ͍ ͱ ͍ ͚ ͳ ͍ • GEͷด͡๨Ε͸ྑ͘໰୊ʹͳΔ͚Ͳɺ ؒҧͬͯด͡ͳ͍Α͏ʹ͢Δͷ΋ϛεͦ͠͏ʢײ૝ʣ • E F T U S V D U P S  U S Z  X J U I  S F T P V S D F ͕ ͳ ͍ ͷ Ͱ σ ϑ Υ ϧ τ ด ͡ Δ ͷ ͕ ҆ શ ͳ ͷ ͔ ΋ ͠ Ε ͳ ͍ • V T J O H ͕ ೖ Δ ͱ ͜ ͷ ͋ ͨ Γ ͷ Ϧ ι ʔ ε ؅ ཧ ͸ ָ ʹ ͳ Δ ͔ ΋ 
  10. 8FC4USFBNT"1* 4UBCJMJUZ • 8FCඪ४ͷ4USFBNT"1* • /PEFW ͔Β&YQF SJNF OUBM8BSOJOH͕ग़ͳ͘ͳͬͨ •

    Կ͕خ͍͔͠ • ੔ཧ͞Εͨ" 1* • *TPNPSQIJD 6OJWF STBM ͳίʔυ͕ॻ͖΍͘͢ͳΔ • DIVOLʹରͯ͠ܕ͕ࢦఆͰ͖Δʢ(F OF SJDTʣ • OQNύοέʔδ͝ͱͰαϙʔτঢ়گ͸·ͪ·ͪ • /PEF4USFBNͱม׵ՄೳͳͷͰ͋·Γ໰୊ʹͳΒͳ͍͔΋ʁ • *TPNPSQIJD 6OJWF STBM จ຺ͩͱࠔΓͦ͏ 
  11. ࢀߟࢿྉ • 4 U S F B N  c

     / P E F  K T  W        % P D V N F O U B U J P O • I U U Q T    O P E F K T  P S H  B Q J  T U S F B N  I U N M • ε τ Ϧ ʔϜ " 1 *   8 F C  " 1 *  c  . % / • I U U Q T    E F W F M P Q F S  N P [ J M M B  P S H  K B  E P D T  8 F C  " 1 *  4 U S F B N T @ " 1 * • 4 U S F B N ࠓ ੲ ෺ ޠ  G S P N  T D S B U D I • I U U Q T    Z P T V L F  G V S V L B X B  I B U F O B C M P H  D P N  F O U S Z                   • I J H I 8 B U F S . B S L ͔ Β ୳ Δ / P E F  K T ͷ 4 U S F B N ͷ ࢓ ૊ Έ  :B I P P   + " 1" /  5F D I  # M P H • I U U Q T    U F D I C M P H  Z B I P P  D P  K Q  B E W F O U  D B M F O E B S       O P E F  T U S F B N  I J H I X B U F S N B S L  • 4 U S F B N  * O U P  U I F  ' V U V S F  / P E F + 4  4 U S F B N T   :P V 5 V C F • I U U Q T    X X X  Z P V U V C F  D P N  X B U D I W  B 5 & % $ P U D O