$30 off During Our Annual Pro Sale. View Details »

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

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

Masaharu TASHIRO

July 07, 2023
Tweet

More Decks by Masaharu TASHIRO

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

    View Slide

  2. ࣗݾ঺հ
    • UBTTIJ ా୅խ࣏

    • ॴଐ
    • αΠϘ΢ζגࣜձࣾ
    • LJOUPOF %9νʔϜ
    • झຯ
    • ήʔϜ🎮
    • ࣗసं🚴

    View Slide

  3. LJOUPOF%9νʔϜ
    • LJOUPOFฐࣾఏڙͷΫϥ΢υαʔϏε
    • %9։ൃऀମݧ %FWFMPQFSF9QFSJFODF

    • LJOUPOFͷΤίγεςϜ։ൃऀͷ%9޲্
    • 4%,ͷఏڙɾอक 044

    • ґଘϥΠϒϥϦ΁ͷ$ POUS JC VUJPO
    • ٕज़ελοΫ
    • /PEFKT 5ZQF4DSJQU F UDʜ

    View Slide

  4. /PEF4USFBN

    View Slide

  5. /PEF4USFBNͱ͸
    • /PEFͰετϦʔϜೖग़ྗΛߦ͏ͨΊͷΠϯλʔϑΣʔε
    • ετϦʔϜ͸σʔλΛ෼ׂ͞Εͨখ͍͞୯ҐʢDIVOLʣ
    ͷ࿈ଓͨ͠ྲྀΕͱͯ͠ѻ͏΋ͷ
    • ͔ͳΓੲ͔Β͋Δ֓೦ͰେମͲͷݴޠʹ΋͋Δ
    • 4USFBN͕͋Δ͕ɺࠓճ࿩͢ͷ͸4USFBN
    • /PEF W

    View Slide

  6. /PEF4USFBN͸େ͖͘छྨ
    • 3FBEBCMFಡΈऔΓՄೳͳσʔλετϦʔϜ
    • 8SJUBCMFॻ͖ࠐΈՄೳͳσʔλετϦʔϜ
    • %VQMFY5SBOTGPSN
    • ಡΈऔΓՄೳ͔ͭॻ͖ࠐΈՄೳͳσʔλετϦʔϜ
    • 5S BOTGPS N͸ड͚औͬͨνϟϯΫʹม׵Λߦͬͯૹग़͢Δ
    ΄΅%VQMFYͱҰॹ͚ͩͲม׵ॲཧΛ࣮૷͠΍͘͢ͳ͍ͬͯΔ
    ʢDPOTUS VDUPS΍USBOTGPSN@USBOTGPSN
    ʣ
    • Կ΋͠ͳ͍1BTT5ISPVHI΋͋Δ

    View Slide

  7. 4USFBNΛQJQF
    Ͱܨ͙͚ͩͰॲཧ͕ॻ͚Δ

    SFBEBCMF
    QJQF USBOTGPSN" UP#

    QJQF USBOTGPSN# UP$

    QJQF XSJUBC MF

    View Slide

  8. 4USFBNͷϝϦοτ
    • গͳ͍ϝϞϦͰॲཧͰ͖Δ
    • ඇಉظॲཧʹର్ͯ͠தͰॲཧΛڬΊΔ
    • ֎͔Β1SPHSF TTΛऔಘͨ͠Γɺ$ BODF Mͨ͠ΓͰ͖Δ
    • ্ྲྀɾԼྲྀͰฒߦʹॲཧΛߦ͑ΔͨΊɺ௿஗Ԇ
    ʮ4USFBNΛ੍͢Δ΋ͷ͸ɺ/PEFKTΛ੍͢ʯ
    ʢΒ͍͠ʣ

    View Slide

  9. 4USFBNͷσϝϦοτ
    • ֶशίετ͕ߴ͍
    • ಉظॲཧ΍BTZODBXBJUͱͷ૬ੑ͕ѱ͍
    • 4USF BN͸&WF OU&NJUUF S͕ϕʔεʢΠϕϯτۦಈύϥμΠϜʣ
    • ಉظॲཧʹॲཧʹ૊ΈࠐΈʹ͍͘
    • ΤϥʔϋϯυϦϯά͕೉͍͠
    • ͦͷଞɺ࢖ͬͯΈͯؾʹͳͬͨͱ͜Ζ͸ޙड़

    View Slide

  10. "TZOD*UFSBUPSͱBXBJUPG
    • 4USFBNΛಉظॲཧʹ͏·͘૊ΈࠐΈ͍ͨ
    • 4USFBN͸4ZNCPMBTZOD*UFSBUPSΛ͍࣋ͬͯΔ
    • ͜ΕΛGPSBXBJUPGͰDPOTVNFͰ͖Δ

    GPSBXBJU DPOTUDIVOLPGSFBEBCMF
    \
    DPOTPMFMPH DIVOL

    ^

    View Slide

  11. DMJLJOUPOFͰͷಋೖ

    View Slide

  12. DMJLJOUPOF
    • LJOUPOF͔ΒϨίʔυΛΠϯϙʔτΤΫεϙʔτ͢Δ
    ίϚϯυϥΠϯπʔϧ
    • σʔλόοΫΞοϓ΍ଞجװγεςϜͱͷ࿈ܞʹར༻

    View Slide

  13. ϝϞϦ࢖༻ྔͷ໰୊
    • WϦϦʔε࣌ʹ͸શϨίʔυΛϝϞϦʹࡌͤͯॲཧ
    • ެ։ޙ͠͹Β͘͸ݕূ໨తͰͷར༻͕ϝΠϯͱ൑அ
    • ύϑΥʔϚϯεվળ͸௥࣮ͬͯࢪ͍ͯ͘͠༧ఆͩͬͨ
    • ެ։͔Βϲ݄ͰϝϞϦ࢖༻ྔʹؔ͢Δ໰͍߹Θͤ
    • ਺ສ݅Λ௒͑ΔϨίʔυͰͷ࣮ߦͰ
    +BWB4DSJQUIF BQPVUPGNF NPSZ ͕ൃੜ

    View Slide

  14. ύϑΥʔϚϯεվળલ
    • શͯͷϨίʔυΛऔಘˠม׵ˠॻ͖ग़͠

    View Slide

  15. վળํ਑
    • 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 Ͱ ಉ ظ ॲ ཧ ʹ ૊ Έ ࠐ Ή

    View Slide

  16. ύϑΥʔϚϯεվળޙ
    • %BUB4PVSDFΛఆٛ
    • GPSBXBJUͰDIVOL͝ͱʹΞοϓϩʔυ

    GPSBXBJU DPOTUDIVOLPGEBUB4PVSDFSFBEFS

    \
    VQMPBE3FDPSET DIVOL

    ^

    View Slide

  17. %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
    Λ ฦ ͢

    View Slide

  18. ύϑΥʔϚϯεൺֱʢΠϯϙʔτʣ

    View Slide

  19. ύϑΥʔϚϯεൺֱʢΤΫεϙʔτʣ

    View Slide

  20. ΊͪΌͪ͘ΌੑೳվળͰ͖ͨʂʂ

    View Slide

  21. /PEF4USFBNؾʹͳͬͨͱ͜Ζ
    • 4USFBNΛ߹੒ͯͭ͠ͷ4USFBNʹ͢Δ҆ఆͳํ๏͕ͳ͍
    • 4USF BNDPNQPTF
    4UBHF
    • 1VNQJGZͳͲͷ֎෦ϥΠϒϥϦ
    • 8FC4USFBNT" 1*ͩͱ؆୯ʹͰ͖Δ
    • DIVOLͷܕ͕BOZ
    • 8SJUBCMF3FBEBCMF Λܧঝͯ͠ܕΛ౰ͯΕͦ͏͚ͩͲେม
    • QJQFݩ͕FSSPSDMPTFͯ͠΋QJQFઌ͸ࣗಈͰDMPTF͠ͳ͍
    • &SSPSΠϕϯτϋϯυϥͰQJQFઌ΋EF TUPSZ͢Δ

    View Slide

  22. 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 ͕ ೖ Δ ͱ ͜ ͷ ͋ ͨ Γ ͷ Ϧ ι ʔ ε ؅ ཧ ͸ ָ ʹ ͳ Δ ͔ ΋

    View Slide

  23. 8FC4USFBNT"1* 4UBCJMJUZ

    • 8FCඪ४ͷ4USFBNT"1*
    • /PEFW ͔Β&YQF SJNF OUBM8BSOJOH͕ग़ͳ͘ͳͬͨ
    • Կ͕خ͍͔͠
    • ੔ཧ͞Εͨ" 1*
    • *TPNPSQIJD 6OJWF STBM
    ͳίʔυ͕ॻ͖΍͘͢ͳΔ
    • DIVOLʹରͯ͠ܕ͕ࢦఆͰ͖Δʢ(F OF SJDTʣ
    • OQNύοέʔδ͝ͱͰαϙʔτঢ়گ͸·ͪ·ͪ
    • /PEF4USFBNͱม׵ՄೳͳͷͰ͋·Γ໰୊ʹͳΒͳ͍͔΋ʁ
    • *TPNPSQIJD 6OJWF STBM
    จ຺ͩͱࠔΓͦ͏

    View Slide

  24. ֤छ4USFBNͷ૬ޓม׵

    View Slide

  25. ·ͱΊ
    • /PEF4USFBNΛ࢖ͬͯϝϞϦ࢖༻ྔΛ௒վળͯ͠ΈͨΑ
    • ΋ͬͱฒྻͰ৭ʑͳॲཧΛ͢Δඞཁ͕͋Δ
    ΞϓϦέʔγϣϯͩͱߋʹޮՌΛൃشͦ͠͏
    • 8FC4USFBNT"1*΋৮͍͖͍ͬͯͨ

    View Slide

  26. ࢀߟࢿྉ
    • 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

    View Slide

  27. ͓·͚
    • TUSFBN3FBEBCMFXSBQ
    ͷίϝϯτ

    View Slide