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
34
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
パフォーマンス最適化
プログラマーは常にスピードを求めてしまうものですが、がむしゃらにそれを追い求めることはよい結果を出さないことが多いです。適切なパフォーマンス最適化について解説します。
まりも
September 24, 2024
More Decks by まりも
See All by まりも
オブジェクトモデルと関係モデルの設計
hrmstrsmgs
0
43
メンタルモデルから見るオブジェクト設計
hrmstrsmgs
0
350
技術的負債
hrmstrsmgs
1
370
よい設計のプログラムを作るには
hrmstrsmgs
0
120
歴史から理解するJavaScript
hrmstrsmgs
0
96
論理的な考え方
hrmstrsmgs
0
100
論理的な話し合いはなぜ必要か
hrmstrsmgs
0
69
腕のある技術者はなぜ
hrmstrsmgs
0
140
疑似乱数の生成
hrmstrsmgs
0
68
Other Decks in Programming
See All in Programming
AIで効率化できた業務・日常
ochtum
0
160
dRuby over BLE
makicamel
2
400
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
170
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.7k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
380
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
170
AIエージェントで 変わるAndroid開発環境
takahirom
1
270
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
350
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
140
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
320
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
1k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
WCS-LA-2024
lcolladotor
0
670
RailsConf 2023
tenderlove
30
1.5k
Utilizing Notion as your number one productivity tool
mfonobong
4
340
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
580
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
From π to Pie charts
rasagy
0
230
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
620
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
410
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
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を抜いたそうで す。
予測できません