Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Eiji Hachiya
August 15, 2025
Technology
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
2025/08/15(金) の perf.tokyo #1 で発表した資料です
Eiji Hachiya
August 15, 2025
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.8k
【Real Tech Night #2】学校教育を支えるマルチテナント/multi-tenant_in_edtech
hachi_eiji
1
330
レガシー業界の社内を変える /realtech
hachi_eiji
0
550
Other Decks in Technology
See All in Technology
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
1.9k
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
240
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
120
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
130
enechainの内製セルフサービスプラットフォーム
hiyosi
0
140
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
AIで仕事のやり方を変える
matsu7874
3
1k
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
130
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
3
170
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
110
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
120
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
220
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
470
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
770
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Optimizing for Happiness
mojombo
378
71k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Docker and Python
trallard
47
4.2k
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