-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
executable file
·222 lines (171 loc) · 6.21 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Profiling The Frontend</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="css/reveal.min.css">
<link rel="stylesheet" href="css/theme/default.css" id="theme">
<!-- For syntax highlighting -->
<link rel="stylesheet" href="lib/css/zenburn.css">
<!-- If the query includes 'print-pdf', use the PDF print sheet -->
<script>
document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>profiling the frontend</h1>
<h3>the need for speed</h3>
<p>
<small>Created by <a href="mailto:[email protected]">Alok Rao</a> / <a href="http://twitter.com/arca1n">@arca1n</a></small>
</p>
</section>
<section>
<h2>Why Optimize?</h2>
<p class="fragment">
Because faster is better.
</p>
<a href="#" class="image navigate-down fragment">
<img width="50%" src="/images/Super-Sport.jpg" alt="Down arrow">
</a>
<aside class="notes">
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit 's' on your keyboard).
</aside>
</section>
<!-- Example of nested vertical slides -->
<section>
<section>
<h2>Profile Before Optimizing</h2>
<p>
Profile Early Profile Often
</p>
</section>
</section>
<section>
<h2>Profiling 101</h2>
<ul>
<li class="fragment">Sampler Profiler</li>
<li class="fragment">Instrumented Profiler</li>
</ul>
<p>
A good resource to learn more about <a href="http://www.youtube.com/watch?v=nxXkquTPng8">Chrome profiler</a>.
</p>
</section>
<section>
<h2>Sampler Profiler</h2>
<ul>
<li class="fragment">Provides approximate time taken</li>
<li class="fragment">Less browser overhead</li>
<li class="fragment">Requires no code change</li>
<li class="fragment">Sample interval in Chrome Tools is 1ms</li>
</ul>
</section>
<section data-markdown>
<script type="text/template">
<h2>Instrumented Profiler</h2>
<ul>
<li class="fragment">Provides exact time taken</li>
<li class="fragment">High browser overhead</li>
<li class="fragment">Requires code changes</li>
</ul>
//Instrumentation Code
console.time("Label goes here");
functionBeingInstrumented(yada, yadaa);
console.timeEnd("Label goes here");
</script>
</section>
<section>
<h2>The "other" tools</h2>
<ul>
<li>chrome://memory-redirect/</li>
<li>chrome://gpu</li>
<li>chrome://tracing</li>
</ul>
<p>
Instrumented code time shows up in chrome://tracing
</p>
</section>
<section>
<h2>The magic number 60fps</h2>
<p>60fps === 16.6666666667 ms/frame</p>
</section>
<section data-markdown>
<script type="text/template">
```
function bar() {
// Do something
}
function foo() {
// Do something
bar();
return true;
}
function renderFrame() {
foo();
}
```
| Function Name | Inclusive Time | Exclusive Time |
| ------------- |:-------------:| -----:|
| renderFrame | 30ms | 2ms |
| foo | 28ms | 10ms|
| bar | 10ms | 10ms |
</script>
</section>
<section>
<h2>Demo Time</h2>
<iframe src="/cocos2dx/samples/games/MoonWarriors/index.html" width="320" height="480
">
Press <strong>ESC</strong> to enter the slide overview.
</iframe>
</section>
<section>
<h2>So which one should you use?</h2>
<ul>
<li class="fragment">Use the Sampler first</li>
<li class="fragment">Narrow down slower code paths</li>
<li class="fragment">Use instrumented profiler on slower code paths</li>
</ul>
<p class="fragment">Don't forget to comment out instrumentation code before QA runs the code on non-chrome browsers.</p>
</section>
<section>
<h1>THE END</h1>
<h3>BY Alok Rao et al.</h3>
</section>
</div>
</div>
<script src="lib/js/head.min.js"></script>
<script src="js/reveal.min.js"></script>
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
// Optional libraries used to extend on reveal.js
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
{ src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
]
});
</script>
</body>
</html>