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
パフォーマンス最適化
Search
まりも
September 24, 2024
Programming
0
25
パフォーマンス最適化
プログラマーは常にスピードを求めてしまうものですが、がむしゃらにそれを追い求めることはよい結果を出さないことが多いです。適切なパフォーマンス最適化について解説します。
まりも
September 24, 2024
Tweet
Share
More Decks by まりも
See All by まりも
メンタルモデルから見るオブジェクト設計
hrmstrsmgs
0
180
技術的負債
hrmstrsmgs
0
210
よい設計のプログラムを作るには
hrmstrsmgs
0
71
歴史から理解するJavaScript
hrmstrsmgs
0
55
論理的な考え方
hrmstrsmgs
0
54
論理的な話し合いはなぜ必要か
hrmstrsmgs
0
27
腕のある技術者はなぜ
hrmstrsmgs
0
71
疑似乱数の生成
hrmstrsmgs
0
39
構造化プログラミング
hrmstrsmgs
0
110
Other Decks in Programming
See All in Programming
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.4k
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
320
print("Hello, World")
eddie
2
530
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
9
3.8k
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
230
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
150
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
20
11k
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.4k
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
440
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
130
Featured
See All Featured
Six Lessons from altMBA
skipperchong
28
4k
Site-Speed That Sticks
csswizardry
10
810
Git: the NoSQL Database
bkeepers
PRO
431
66k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Embracing the Ebb and Flow
colly
87
4.8k
Thoughts on Productivity
jonyablonski
70
4.8k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Transcript
パフォーマンス最適化
最適化についての格言 早すぎる最適化は諸悪の根 源である。 •ドナルド・クヌース
最適化についての格言 細かい効率のことは忘れて、時間の97%につ いて考えよう。時期尚早な最適化は諸悪の根 源だ。それでも残り3%についても機会を逃す べきではない • ドナルド・クヌース
最適化についての格言 プログラム最適化の第一法則: 最適化するな。 プログラム最適化の第二法則(上級者限定): まだす るな。 • Michael A. Jackson
最適化についての格言 個々の操作を特定の順に実行させることは非常に興味深く奇妙な問題である。その上で全てを入力する余裕はない。どの ような計算でもプロセスの遷移のための多種多様な配置が可能であり、様々な考慮の上でそれを選択しなければならない。 基本的な目的は計算を完了するまでの時間を最小にする配置を選択することである • Ada Byron‘s notes on the
analytical engine 1842 情報処理における罪の多くは(必ずしも達成されることのない)効率の名においてなされる。そこには盲目の愚かさも含まれ る • W.A. Wulf ボトルネックは思いもよらない場所に存在するので、ボトルネックの箇所を特定するまで性能最適化(ハック)してはいけな い • ロブ・パイク
じゃあどうするか 体系的に立ち向 かう
じゃあどうするか リファクタリングして同じ処理は2度書かないコード にする 実運用と同じ環境、データ数で速度測定 遅い部分を特定し、そこだけ直す
パレートの法則 プログラムの処理に かかる時間の80% はコード全体の20% の部分が占める。
そんなこと言っても速度は 大事だから常に気を付け ないと その方法だと遅くなるから 止めろと言ってます 読みにくいコー ドの全体を見て チューニングと かあまり効果が 出ません
パフォーマンスの予測 実測せずに予測はできません。 • ロブ・パイクもクヌースも予測できない と言っているのに、誰ができると言った ら信じられるというのか。
Q1 以下のどちらが効率的に動くでしょうか?(言語はC#。Javaでも大体同じ。) var str = "あいうえお" + "かきくけこ" + "さしすせそ"
+ "たちつてと" + "なにぬねの"; var builder = new StringBuilder(); builder.Append("あいうえお"); builder.Append("かきくけこ"); builder.Append("さしすせそ"); builder.Append("たちつてと"); builder.Append("なにぬねの"); var str = builder.ToString();
A1 Aが速い
Q1 以下のどちらが効率的に動くでしょうか?(言語はC#。Javaでも大体同じ。) var result = ""; foreach (var str in
strArray) { result += str; } var builder = new StringBuilder(); foreach (var str in strArray) { builder.Append(str); } var result = builder.ToString();
A2 strArray.length <= 7の時はAが速い
Q3 文字列を複雑に結合してHTMLを作る速度が速いのはどの言語での実装でしょう? C Java JavaScript
A3 Chromeあたりのエンジンを使え ばJavaScriptがCを抜いたそうで す。
予測できません