Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
Search
Eiji Hachiya
August 15, 2025
Technology
2
510
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
2025/08/15(金) の perf.tokyo #1 で発表した資料です
Eiji Hachiya
August 15, 2025
Tweet
Share
More Decks by Eiji Hachiya
See All by Eiji Hachiya
Angular Elementsにハマってみた/I use the Angular Elements
hachi_eiji
0
1.1k
なぜClassiはReactが盛り上がってる2017年にAngularを選択したのか?/why we use angular
hachi_eiji
2
1.7k
【Real Tech Night #2】学校教育を支えるマルチテナント/multi-tenant_in_edtech
hachi_eiji
1
300
レガシー業界の社内を変える /realtech
hachi_eiji
0
510
Other Decks in Technology
See All in Technology
クラウドネイティブ時代の 開発プロセス再設計 〜速さと品質を両立するには〜
moritamasami
0
120
IaC を使いたくないけどポリシー管理をどうにかしたい
kazzpapa3
1
170
pmconf 2025 大阪「生成AI時代に未来を切り開くためのプロダクト戦略:圧倒的生産性を実現するためのプロダクトサイクロン」 / The Product Cyclone for Outstanding Productivity
yamamuteki
3
2.8k
クラスタ統合リアーキテクチャ全貌~1,000万ユーザーのウェルネスSaaSを再設計~
hacomono
PRO
0
190
AI自動ペンテスト「RapidPen」ご紹介資料
laysakura
0
110
国産クラウドを支える設計とチームの変遷 “技術・組織・ミッション”
kazeburo
5
9.6k
TypeScript 6.0で非推奨化されるオプションたち
uhyo
15
5.4k
AI時代の戦略的アーキテクチャ 〜Adaptable AI をアーキテクチャで実現する〜 / Enabling Adaptable AI Through Strategic Architecture
bitkey
PRO
15
11k
小規模チームによる衛星管制システムの開発とスケーラビリティの実現
sankichi92
0
150
Building AI Applications with Java, LLMs, and Spring AI
thomasvitale
1
250
事業状況で変化する最適解。進化し続ける開発組織とアーキテクチャ
caddi_eng
1
8.2k
ECS組み込みのBlue/Greenデプロイを動かしてELB側の動きを観察してみる
yuki_ink
3
420
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Side Projects
sachag
455
43k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Faster Mobile Websites
deanohume
310
31k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
For a Future-Friendly Web
brad_frost
180
10k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Transcript
ՆٳΈWebΞϓϦ ύϑΥʔϚϯε૬ஊࣨ 2025/08/15(ۚ) perf.tokyo #1 @ϢχʔΫϏδϣϯגࣜձ༷ࣾ
ࣗݾհ • ീ୩ ӳ࣏ʢͪ ͍͑͡ʣ@hachi_eiji • WebΞϓϦέʔγϣϯΤϯδχΞ • RailsΛத৺ʹAWS,ϑϩϯτΤϯυͳͲԿͰͬͯ·͢ •
σʔλϕʔε • Ͱ͖ͳ͍ͷωΠςΟϒΞϓϦ։ൃ • Objective-CͷຊΛങͬͨʹSwift͕ൃද͞Εͯͦͬดͨ͡͠
ϥδΦͷՆٳΈ͓Έ૬ஊࣨܗࣜͰ ͕࣌ؒڐ͢ݶΓ͝հ NHKͷࢠڙՊֶి૬ஊ40ࠓͬͯΔΒ͍͠
ͦͷલͷ͓ଋ • ͋͘·ͰݸਓͷܦݧஊͰ͢ • ݱࡏɾաڈʹॴଐͨ͠اۀɾஂମͱແؔͰ͢ • Ͳ͔͜Ͱಉ͕͋ͬͨ͡ͱͯͦ͠ΕۮવͰ͢ • ͜ͷޙʹग़ͯ͘ΔϥδΦωʔϜChatGPT͕࡞ͯ͠·͢
ͦΕͰ͍ͬͯΈ·͠ΐ͏ʂ
͓Έᶃ N+1 αʔόͷಛఆͷAPIͰ͕ग़ͳ͍ΜͰ͢ɻ ౦ژ 20ࡀ ᷲγʔΧʔ
͓Έᶃ N+1 DJɿΞϓϦέʔγϣϯͷϩάΈ·͔ͨ͠ʁ ᷲɿϩάʁϩάͬͯͳΜͰ͔͢ʁ
͓Έᶃ N+1 DJɿ ͋ͬ…
͓Έᶃ N+1 ·ͣϩάΛݟ·͠ΐ͏
͓Έᶃ N+1 • ։ൃ࣌ʹϩάΛݟ͍ͯͳ͍ਓҙ֎ʹଟ͍ • ։ൃ࣌σʔλྔ͕গͳ͍ͷͰϧʔϓͷதͰ SQLΛճͯ͠ճͳͷͰؾ͔ͮͳ͍ • ORMܦ༝ͩͱ࣮ߦ͞ΕΔSQL͕ΠϝʔδͰ͖
͍ͯͳ͍ʁʢ͋͘·ͰݸਓͷഽײͰ͢ʣ • ʹؾ͍ͮͯຊ൪ϦϦʔεॳσʔλ ྔ͕গͳ͍ͷͰɺʮ࠷ॳʯʹͳΒͳ͍
͓Έᶃ N+1 • ։ൃऀ·ͣϩάΛݟΔʂʂʂ • ϩάΛඪ४ग़ྗʹग़͢ͱίϯιʔϧ͕͍ Α͘ಈ͘ͷͰؾ͖͍ͮ͢ • N+1ʹݶͬͨͰͳ͘ৗʹݟΔ
• σʔλΛ100݅ఔೖΕͯ୯ମͰAPIΛ࣮ߦ͢Δ ͱϩά͕ಈ͘ͷͰΘ͔Γ͍͢ • N+1Λݕग़͢ΔϥΠϒϥϦΛར༻͢Δ ղܾʂ
͓Έᶄ ࣾཧػೳWebΞϓϦ ͱ͖Ͳ͖͓٬͞Μ͔ΒαΠτ͕͍ͱΫϨʔϜ ͕དྷ·͢ɻͻͲ͍ͱ͖ෳ͋Δαʔόͷ 1͕μϯ͠·͢ɻ Ԭݝ 24ࡀ ͏ʹϘʔΠ
͓Έᶄ ࣾཧػೳWebΞϓϦ DJɿΞϓϦͲͷΑ͏ͳػೳ͕͋Γ·͔͢ʁ χɿސ٬͕͏ػೳͱɺސ٬͕͍࢝ΊΔͨΊʹ ηοτΞοϓ͢Δ͔ࣾΒ͔͠ΞΫηεͰ͖ͳ͍ ཧػೳͷ2͕ͭ͋Γ·͢ DJɿཧػೳͰϢʔβ࡞ϚελσʔλΛ࡞ΔΜ Ͱ͔͢ʁ χɿͦ͏Ͱ͢ɻCSVΞοϓϩʔυͰҰʹ࡞Γ·͢
͓Έᶄ ࣾཧػೳWebΞϓϦ χɿ ͋ͬ…
͓Έᶄ ࣾཧػೳWebΞϓϦ ཧػೳͱސ٬͕৮͍ͬͯΔαʔό͕ಉ͡ͳͷ ͰཧػೳͰෛՙΛ͔͚Δͱɺސ٬ଆʹӨڹ ͕ग़Δ
͓Έᶄ ࣾཧػೳWebΞϓϦ • ࣾཧػೳͱސ٬αΠτͷΞΫηεΛ ͢ΔʢผυϝΠϯɺύεͷϧʔςΟϯάʣ • ॏ͍ϑΝΠϧؔͷॲཧඇಉظॲཧͰߦ͏
͓Έᶄ ࣾཧػೳWebΞϓϦ ղܾʂ
͓Έᶅ େྔσʔλͷѻ͍ αʔϏεΛελʔτͯ͠5ʹͳΓ·͢ɻϢʔ βͷ௨ςʔϒϧ͕ઍສϨίʔυʹͳΓͦ ͏ͰɺSELECTͳͲ͕ͯ͘ࠔ͍ͬͯ·͢ɻ indexదʹషͬͯ·͢ɻ ಢݝ 30ࡀ φϚέϞϊͷޕޙ
͓Έᶅ େྔσʔλͷѻ͍ DJɿͲ͏͍͏௨͕͋ΔͷͰ͠ΐ͏ʁ ޕޙɿӡӦ͔Βͷ͓ΒͤɺଞϢʔβ͔Β ͷϝϯγϣϯࣗܨ͕͍ͬͯΔਓͷߦಈཤ ྺͳͲ༷ʑͰ͢ DJɿ௨σʔλͣͬͱ͓͖ͯ͠·͔͢ʁ ޕޙɿ͏ʔΜ… ଟ1͘Β͍ͳ͍ͱࠔΔ ͔ͳͱࢥ͍·͢
͓Έᶅ େྔσʔλͷѻ͍ • σʔλ͕ফͤΔͷͰ͋Εআ͢Δͷ͕Ұ൪Α͍ • আσʔλΛϩάͱͯ͠ετϨʔδʹอ͢Δͷ͋Γ ʢޙͰ͍߹Θ͕ͤ͋ͬͨͱ͖ͷରࡦʣ • ςʔϒϧͷύʔςΟγϣϯׂΛݕ౼͢Δ •
ྫ͑ΩʔΛϢʔβID mod 10 ʹ͢Δͱ͔ • ςʔϒϧࣗମΛผ͚Δ(ྫ: ௨_<ϢʔβID mod 10>ͱ͔) • MySQL 5.6Ͱιγϟή࡞࣮ͬͯͨ࣌ࡍʹ͜ΕΛͬͯ ͍ͨ • తຖͷ௨ςʔϒϧΛ࡞Δͷ߹ʹΑͬͯ͋Γ
͓Έᶅ େྔσʔλͷѻ͍ • σʔλͷੜଘظؒ͘มߋ͕͍͠ • τϥϒϧΛճආ͢Δʹ࠷ॳͷઃܭ͕উෛ • CRUDͷλΠϛϯάͱσʔλͷϥΠϑαΠΫ ϧΛҙࣝ͢ΔͱτϥϒϧΛճආ͍͢͠ ղܾʂ
͓Έᶆ ϩʔυόϥϯαʔΞϧΰϦζϜ AWSͰApplication Load BalancerΛͬͯෳ αʔόͷߏΛऔ͍ͬͯ·͢ɻ ސ٬͔Βॲཧ͕͍͕࣌͋ΔͱݴΘΕ·͢ɻ ϩάΛݟΔͱΞΫηεྔଟ͘ͳ͍࣌ؒଳͰ ॲཧ͕͍࣌ͱ͍͕࣌͋Γ·͢ɻ Ἒݝ
30ࡀ ͔Β͋͛෦
͓Έᶆ ϩʔυόϥϯαʔΞϧΰϦζϜ DJɿಉ͡APIͰॲཧ͕มΘΔΜͰ͔͢ʁ ෦ɿಉ͡ސ٬ͷಉ͡APIͰॲཧ͕࣌ؒେ͖͘มΘΓ·͢ DJɿͦͷ࣌ͷଞαʔόؚΊͨϦιʔεͲ͏͍͏ΘΕ ํΛ͍ͯ͠·͔͢ʁ ෦ɿͷαʔό͚ͩCPU༻ͳͲ্͕͕ͬͯɺଞͷ αʔόۭ͍ͯ·͢ DJɿଞͷαʔόʹΞΫηεߦͬͯ·͔͢ʁ ෦ɿ͍ɺଞαʔόʹΞΫηεۉʹߦ͍ͬͯ·͢
͓Έᶆ ϩʔυόϥϯαʔΞϧΰϦζϜ ۉʹʁ ॏ͍ॲཧ͍ܰॲཧʁ
͓Έᶆ ϩʔυόϥϯαʔΞϧΰϦζϜ AWS ALB (Application Load Balancer)ʹҎԼͷΞϧΰϦζϜ͕͋Δ • ϥϯυϩϏϯʢσϑΥϧτʣ •
࠷খͷະॲཧͷϦΫΤετ • ՃॏϥϯμϜ ʮϥϯυϩϏϯʯॲཧΛۉʹॱ൪௨ΓʹৼΓ͚Δઃఆɻ ͭ·Γɺॏ͍ॲཧΛ͍ͯ͠ΔαʔόʹϦΫΤετ͕ߦ͘ͱཹ͢Δɻ ઃఆΛʮ࠷খͷະॲཧͷϦΫΤετʯʹ͢ΔͱɺϦΫΤετͷ࠷গͳ͍ αʔόϦΫΤετΛૹΔͷͰɺॲཧͷཹ͕ϥϯυϩϏϯͷ࣌ΑΓݮ Δɻ (ग़యɿALBϧʔςΟϯάΞϧΰϦζϜ) ղܾʂ
͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ SPAͰαΠτΛ࡞͍ͬͯ·͢ɻτοϓϖʔδʹ ΞΫηεͨ࣌͠ʹμϯϩʔυ͢ΔϑΝΠϧ͕ ॏͯ͘ɺදࣔʹ͕͔͔࣌ؒΔΜͰ͢ɻ େࡕ 27ࡀ ϚάΧοϓ
͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ DJɿେ͖͍ϥΠϒϥϦͱ͔͔͍ͭͬͯΔͷͰ͔͢ʁ ϚάɿͳΜͱͳ͘ExcelΛ࡞ΔϥΠϒϥϦ͕ॏ͍ͷ͔ ͳʁͱࢥ͍ͬͯ·͢ɻͰτοϓϖʔδͰͬͯ ͍·ͤΜ DJɿ͍ͬͯͳ͍ͷʹɺτοϓϖʔδͰμϯϩʔ υ͍ͯ͠ΔΜͰ͔͢ʁ Ϛάɿ͍ɻίʔυ্ͰExcelͱ͍͏จࣈݟ·ͨ͠
͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ • ॏ͍ϥΠϒϥϦΛಛఆ͢Δ • ಈతʹϥΠϒϥϦΛimportΛ͢Δ • ݸผʹϑΝΠϧμϯϩʔυ͢Δ
͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ rollup-plugin-visualizerͳͲΛͬͯ ॏ͍ϥΠϒϥϦΛ֬ೝ͢Δ
ग़య: https://github.com/btd/rollup-plugin-visualizer ΛҰ෦Ճ ͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ
͓Έᶇ ϑΝΠϧαΠζ͕େ͖͍JSϥΠϒϥϦͷμϯϩʔυ • ࠓճτοϓϖʔδ͔Βμϯϩʔυͯ͘͠Δ JSʹExcelϑΝΠϧੜϥΠϒϥϦͱֆจࣈϥΠ ϒϥϦ͕͋ͬͨ • ͜ΕΒΛಈతʹimportͯ͠ɺvite(※1)ͷJSϑΝΠ ϧׂํ๏Ͱɺॏ͍JS୯ಠϑΝΠϧʹ͢Δɻ •
ඞཁͳ࣌ʹͦͷϑΝΠϧ͚ͩμϯϩʔυͰ ͖Δ ※1 vite: ϑϩϯτΤϯυϏϧυπʔϧ https://ja.vite.dev/ ղܾʂ
ࠓճ͜͜·Ͱ
େͳͷܧଓͯ͠มԽΛܭଌ͢Δ͜ͱ • 1िؒ୯Ґɺ1ϲ݄୯ҐͳͲܧଓͯ͠มԽΛܭଌ͢Δ • ੑೳྼԽ͢ΔͷϢʔβ͕ར༻͍ͯ͠ΔূڌͰ͋Γɺܾͯ͠ѱ͍͜ͱ Ͱͳ͍ • ͦΕΛ์ஔ͍ͯ͠ΔͱΑΓհͳʹͳΔ • νϡʔχϯάલޙͷܭଌΛΕͣʹΖ͏
ͦͷݪҼɾमਖ਼͋ͬͯΔʁΛৗʹߟ͑Δ • मਖ਼͍ͯ͘͠ͱҶͮΔࣜʹ৭ʑग़͖ͯͯɺਅͷݪҼ͕ҧ͏͜ͱ͋Δ • νϡʔχϯάதʹ։ൃ͕ਐΜͰߦ͘ͱɺमਖ਼Ҋ͕มΘΔ͜ͱ͕͋Δ • मਖ਼͕όάʹͳΒͳ͍Α͏ʹςετ͕ॻ͚ΔͷςετΛॻ͜͏ • मਖ਼͍ͯ͠Δ͜ͱΛυΩϡϝϯτʹͯ͠ΈΜͳʹڞ༗͠Α͏ •
पΓ͔ΒͷϑΟʔυόοΫεΩϧΞοϓظ
None
࠷ޙʹΈͳ͞Μ
None