Presentation is loading. Please wait.

Presentation is loading. Please wait.

Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT.

Similar presentations


Presentation on theme: "Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT."— Presentation transcript:

1

2 Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media XAMLHTML / CSS HTML JavaScript C C++ C# VB Desktop Apps Win32. NET / SL Internet Explorer System Services View Model Controller Core

3 Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media XAMLHTML / CSS HTML JavaScript C C++ C# VB Desktop Apps Win32. NET / SL Internet Explorer System Services View Model Controller Core

4 Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media XAMLHTML / CSS HTML JavaScript C C++ C# VB Desktop Apps Win32. NET / SL Internet Explorer System Services View Model Controller Core

5 Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media XAMLHTML / CSS HTML JavaScript C C++ C# VB Desktop Apps Win32. NET / SL Internet Explorer System Services View Model Controller Core

6 You’ll leave with… Understanding of what makes a site/app fast. Specific things to improve your performance today.

7 30 0

8 20 0

9 How much do you know about performance?

10

11

12

13

14

15

16

17

18

19 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

20 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

21 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

22 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

23 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

24 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

25 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

26 Which is the fastest website?

27 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

28 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

29 Which is the slowest website?

30 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

31 YUI Total Size (k) Number Elements CSS Rules Image Files Script Lines (F) Script Libraries Site #1 3,6971,5041,3924177,768 Site #2 2,2781,1005,3252939,183 Site #3 1,0612,6731,1056612,643 Site #4 1,8124,2521,6721210,284 Site #5 1,3729003,902638,269 jQueryPrototypeExtJS Other Scriptaculous

32 What is web performance?

33 Core 1Core 2 Core 3Core 4 GPU

34

35 CPU Activity Initial Document Requested Waiting For Initial Document Processing Initial Document

36 CPU Activity Waiting For Sub-Downloads Processing Content

37 CPU Activity Waiting For XHR Processing Content (again) Page Displayed To Screen Page Finished Loading Page Updates Screen Processing Content

38 CPU Activity Elapsed Page Load Time (1.81 seconds)Time to Glass (1.14 seconds)CPU Time (1.39 seconds)Idle CPU Time (0.42 seconds)

39 CPU Activity Elapsed Page Load Time (1.81 seconds)Time to Glass (1.14 seconds)CPU Time (1.39 seconds)Idle CPU Time (0.42 seconds)

40 Where does the CPU time go?

41 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

42 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

43 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

44 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

45 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

46 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

47 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

48 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

49 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

50 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

51 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

52 NetworkingHTMLCSSCollectionsJavaScriptMarshallingDOMFormatting Block Building LayoutRendering

53

54

55

56 50 Performance Tricks

57 Six Principles to Remember 1)Quickly Respond to Network Requests 2)Minimize Bytes Downloaded 3)Efficiently Structure Markup 4)Optimize Media Usage 5)Write Fast JavaScript 6)Know What Your Application is Doing

58 Principle #1: Quickly Respond to Network Requests

59 Avoid 3xx Redirection Quickly Respond to Network Requests

60 Request GET / HTTP/1.1 Host: www.news.com

61 Avoid 3xx Redirection Quickly Respond to Network Requests Response HTTP/1.1 303 See Other Location: http://homepage.news.com/ Request GET / HTTP/1.1 Host: www.news.com

62 Avoid 3xx Redirection Quickly Respond to Network Requests 63% of top 1000 websites worldwide contain 3xx redirect

63 Avoid Meta Refresh Tag Quickly Respond to Network Requests

64 Avoid Meta Refresh Tag Quickly Respond to Network Requests 14% of worldwide URL’s contain meta-refresh

65 Minimize Server Time for Requests Quickly Respond to Network Requests

66

67

68

69 Use Content Distribution Networks (CDN’s) Quickly Respond to Network Requests

70

71

72

73

74 Maximize Concurrent Connections Quickly Respond to Network Requests

75

76

77 HTTP Response HTTP/1.1 200 OK Content-Type: application/javascript Content-Length: 230848 Connection: close Reuse Connections Quickly Respond to Network Requests

78 HTTP Response HTTP/1.1 200 OK Content-Type: application/javascript Content-Length: 230848 Connection: close Reuse Connections Quickly Respond to Network Requests

79 Know Your Servers Quickly Respond to Network Requests

80 Understand Your Network Timing Quickly Respond to Network Requests

81 Principle #2: Minimize Bytes Downloaded

82 Download Fewer Resources and Bytes Minimize Bytes Downloaded 777k average number of bytes downloaded

83 Download Fewer Resources and Bytes Minimize Bytes Downloaded

84 Request GET / HTTP/1.1 Accept: */* Accept-Language: en-us UA-CPU: x86 Accept-Encoding: gzip, deflate Host: www.live.com Response HTTP/1.1 200 OK Content-Length: 3479 Expires: -1 Date: Sun, 14 Mar 2010 21:30:46 GMT Pragma: no-cache Content-Encoding: gzip GZIP Compress Network Traffic Minimize Bytes Downloaded

85 Request GET / HTTP/1.1 Accept: */* Accept-Language: en-us UA-CPU: x86 Accept-Encoding: gzip, deflate Host: www.live.com Response HTTP/1.1 200 OK Content-Length: 3479 Expires: -1 Date: Sun, 14 Mar 2010 21:30:46 GMT Pragma: no-cache Content-Encoding: gzip GZIP Compress Network Traffic Minimize Bytes Downloaded

86 Request GET / HTTP/1.1 Accept: */* Accept-Language: en-us UA-CPU: x86 Accept-Encoding: gzip, deflate Host: www.live.com Response HTTP/1.1 200 OK Content-Length: 3479 Expires: -1 Date: Sun, 14 Mar 2010 21:30:46 GMT Pragma: no-cache Content-Encoding: gzip GZIP Compress Network Traffic Minimize Bytes Downloaded

87 Persist App Resources Locally in Package Minimize Bytes Downloaded

88

89 Cache Dynamic Resources in App Cache Minimize Bytes Downloaded

90

91

92 v2 Cache Dynamic Resources in App Cache Minimize Bytes Downloaded

93 Request GET /images/banner.jpg HTTP/1.1 Host: www.microsoft.com Response HTTP/1.1 200 OK Content-Type: image/jpeg Expires: Fri, 20 Apr 2011 00:00:00 GMT Provide Cacheable Content Minimize Bytes Downloaded

94 Request GET /images/banner.jpg HTTP/1.1 Host: www.microsoft.com Response HTTP/1.1 200 OK Content-Type: image/jpeg Expires: Fri, 20 Apr 2011 00:00:00 GMT Provide Cacheable Content Minimize Bytes Downloaded

95 Request GET /images/banner.jpg HTTP/1.1 Host: www.microsoft.com If-Modified-Since: Sun, 10 Apr 2011 21:30:46 GMT Response HTTP/1.1 304 Not Modified Content-Type: image/jpeg Last-Modified: Sun, 1 Mar 2011 21:30:46 GMT Send Conditional Requests Minimize Bytes Downloaded

96 Request GET /images/banner.jpg HTTP/1.1 Host: www.microsoft.com If-Modified-Since: Sun, 10 Apr 2011 21:30:46 GMT Response HTTP/1.1 304 Not Modified Content-Type: image/jpeg Last-Modified: Sun, 1 Mar 2011 21:30:46 GMT Send Conditional Requests Minimize Bytes Downloaded

97 Request GET /images/banner.jpg HTTP/1.1 Host: www.microsoft.com If-Modified-Since: Sun, 10 Apr 2011 21:30:46 GMT Response HTTP/1.1 304 Not Modified Content-Type: image/jpeg Last-Modified: Sun, 1 Mar 2011 21:30:46 GMT Send Conditional Requests Minimize Bytes Downloaded

98 jQuery Data Request jQuery.ajax({ url: url, dataType: 'json', data: data, success: callback }); Cached jQuery Data Request jQuery.ajax({ url: url, dataType: 'json', data: data, cache: true, success: callback }); Cache Data Requests Minimize Bytes Downloaded

99 jQuery Data Request jQuery.ajax({ url: url, dataType: 'json', data: data, success: callback }); Cached jQuery Data Request jQuery.ajax({ url: url, dataType: 'json', data: data, cache: true, success: callback }); Cache Data Requests Minimize Bytes Downloaded

100 Lower Case Title Case Careless Developer Standardize File Capitalization Convention Minimize Bytes Downloaded

101 Lower Case Title Case Careless Developer Standardize File Capitalization Convention Minimize Bytes Downloaded

102 Lower Case Title Case Careless Developer Standardize File Capitalization Convention Minimize Bytes Downloaded

103 Lower Case Title Case Careless Developer Standardize File Capitalization Convention Minimize Bytes Downloaded

104 Principle #3: Efficiently Structure Markup

105 Load Pages in Latest Browser Mode (HTML5) Efficiently Structure Markup

106

107 Page Meta Tag Use HTTP Header to Specify Legacy IE Modes Efficiently Structure Markup HTTP Header HTTP/1.1 200 OK Date: Sun, 14 Mar 2010 21:30:46 GMT X-UA-Compatible: IE=EmulateIE7

108 Page Meta Tag Use HTTP Header to Specify Legacy IE Modes Efficiently Structure Markup HTTP Header HTTP/1.1 200 OK Date: Sun, 14 Mar 2010 21:30:46 GMT X-UA-Compatible: IE=EmulateIE7

109 Page Meta Tag Use HTTP Header to Specify Legacy IE Modes Efficiently Structure Markup HTTP Header HTTP/1.1 200 OK Date: Sun, 14 Mar 2010 21:30:46 GMT X-UA-Compatible: IE=EmulateIE7

110 Link Style Sheets at Top of Page Efficiently Structure Markup Test …

111 Link Style Sheets at Top of Page Efficiently Structure Markup Test …

112 Test … Never Link Style Sheets at Bottom of Page Efficiently Structure Markup

113 Test … Never Link Style Sheets at Bottom of Page Efficiently Structure Markup

114 @import url(/stylesheets/one.css); @import url(/stylesheets/two.css); MyHeading { color: red; font-family: 'New Century Schoolbook', serif; background: white; } Avoid Using @import for Hierarchical Styles Efficiently Structure Markup

115 @import url(/stylesheets/one.css); @import url(/stylesheets/two.css); MyHeading { color: red; font-family: 'New Century Schoolbook', serif; background: white; } Avoid Using @import for Hierarchical Styles Efficiently Structure Markup

116 Test.item { color:#009900;} MyItem Avoid Embedded and Inline Styles Efficiently Structure Markup

117 Test.item { color:#009900;} MyItem Avoid Embedded and Inline Styles Efficiently Structure Markup

118 /* These styles are for the home page. */ HomePage { color: red; } /* These styles are for the content page. */ ContentPage { color: green; } Only Include Necessary Styles Efficiently Structure Markup

119 /* These styles are for the home page. */ HomePage { color: red; } /* These styles are for the content page. */ ContentPage { color: green; } Only Include Necessary Styles Efficiently Structure Markup

120 /* These styles are for the home page. */ HomePage { color: red; } /* These styles are for the content page. */ ContentPage { color: green; } Only Include Necessary Styles Efficiently Structure Markup

121 Always Link JavaScript at End of File Efficiently Structure Markup

122

123 Test … Avoid Linking JavaScript In Head Efficiently Structure Markup

124 Test … Avoid Linking JavaScript In Head Efficiently Structure Markup

125 function helloWorld() { alert('Hello World!') ; } … Avoid Inline JavaScript Efficiently Structure Markup

126 function helloWorld() { alert('Hello World!') ; } … Avoid Inline JavaScript Efficiently Structure Markup

127 Test … Use the Defer Tag When Head Only Option Efficiently Structure Markup

128 Test … Use the Defer Tag When Head Only Option Efficiently Structure Markup

129 Test … Asynchronously Download Script Efficiently Structure Markup

130 Test … Asynchronously Download Script Efficiently Structure Markup

131 Test … Remove Duplicate Code Efficiently Structure Markup

132 Test … Remove Duplicate Code Efficiently Structure Markup

133 52% of the pages on the web have duplicate code

134 … Standardize on a Single Framework Efficiently Structure Markup

135 … Don’t Include Script To Be Cool Efficiently Structure Markup

136 Principle #4: Optimize Media Usage

137 Minimize Number of Images Optimize Media Usage

138 58 average number of media resources on the top 100,000 web sites

139 Avoid Death by 1,000 Images Optimize Media Usage

140

141 Use Image Sprites Optimize Media Usage 240px 40px Scenario #1 – Multiple FilesScenario #2 - Image Sprite 40px 6 Images 6 Connections 96k Download 1 Image 1 Connection 21k Download 40px

142 Create Your Sprites by Hand Optimize Media Usage 700px 289px

143 Create Your Sprites by Hand Optimize Media Usage 700px 289px

144 Image Formats: PNG, JPEG, JPEG-XR Optimize Media Usage PNG (Default) Website Elements, Logos JPEG Photographs JPEG-XR High Resolution Photographs Don’t Get Distracted GIF, TIFF, BMP, WebP, etc.

145 Test … … Use Native Image Resolutions Optimize Media Usage

146 Test … … Use Native Image Resolutions Optimize Media Usage

147 Test … … Use Native Image Resolutions Optimize Media Usage

148 Replace Images with CSS3 Gradients Optimize Media Usage

149 Replace Images with CSS3 Border Radius Optimize Media Usage

150 Leverage CSS3 Transforms Optimize Media Usage -ms-transform: translate(75px, 100px) scaleY(.75) skewY(10deg); -webkit-transform: translate(75px, 100px) scaleY(.75) skewY(10deg); -moz-transform: translate(75px, 100px) scaleY(.75) skewY(10deg); -o-transform: translate(75px, 100px) scaleY(.75) skewY(10deg); ElementRotateSkewMove

151 Test <img src= "data:image/png;base64 iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblA" alt="Red dot" /> Use DataURI’s for Small Single View Images Optimize Media Usage

152 Test <img src= "data:image/png;base64 iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblA" alt="Red dot" /> Use DataURI’s for Small Single View Images Optimize Media Usage

153 Test <img src= "data:image/png;base64 iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblA" alt="Red dot" /> Use DataURI’s for Small Single View Images Optimize Media Usage

154 Test <img src= "data:image/png;base64 iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblA" alt="Red dot" /> Use DataURI’s for Small Single View Images Optimize Media Usage

155 Avoid Complex SVG Paths Optimize Media Usage

156 Video: User Preview Images Optimize Media Usage

157 Minimize Media Plugin Usage Optimize Media Usage

158 Proactively Download Future Media Optimize Media Usage

159 Principle #5: Write Fast JavaScript

160 C, C++, C# (Static Language) static int DoMath(int value) { int result = 0; for (int i = 0; i < 10000; i++) { for (int j = 0; j < 10000; j++) { result = i + j + value; } return result; } JavaScript (Dynamic Language) function DoMath(value) { for (var i = 0; i < 10000; i++) { for (var j = 0; j < 10000; j++) { var result = i + j + value; } return result; } Stick to Integer Math Write Fast JavaScript

161 C++JavaScript DoMath(999); 40ms 200ms (~5x) DoMath(999/2); 40ms 1600ms (~40x)

162 Stick to Integer Math Write Fast JavaScript 0x005e22a0 Pointer 01 Type Tag 449.4999999…… … Value 02 Type Tag “Hello World” Value 0x005e4148 Pointer

163 Stick to Integer Math Write Fast JavaScript DoMath(Math.floor(999 / 2)); var b = Math.ceil((p[i].r + p[i].g + p[i].b) / 3);

164 Stick to Integer Math Write Fast JavaScript DoMath(Math.floor(999 / 2)); var b = Math.ceil((p[i].r + p[i].g + p[i].b) / 3);

165 Stick to Integer Math Write Fast JavaScript DoMath(Math.floor(999 / 2)); var b = Math.ceil((p[i].r + p[i].g + p[i].b) / 3);

166 Minify Your JavaScript Write Fast Loading JavaScript

167 Initial (66 Characters) function Sum(number1, number2) { return (number1 + number2); } Minify Your JavaScript Write Fast Loading JavaScript

168 Initial (66 Characters) function Sum(number1, number2) { return (number1 + number2); } Characters Removed (54 Characters) function Sum(number1,number2){return number1+number2;} Minify Your JavaScript Write Fast Loading JavaScript

169 Initial (66 Characters) function Sum(number1, number2) { return (number1 + number2); } Characters Removed (54 Characters) function Sum(number1,number2){return number1+number2;} Compacted (30 Characters) function Sum(a,b){return a+b;} Minify Your JavaScript Write Fast Loading JavaScript

170 Initialize JavaScript on Demand Write Fast Loading JavaScript var userTileScriptsLoaded = false; function CustomizeUserTile() { if (userTileScriptsLoaded == false) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'upload.js'; head.appendChild(script); }

171 Initialize JavaScript on Demand Write Fast Loading JavaScript var userTileScriptsLoaded = false; function CustomizeUserTile() { if (userTileScriptsLoaded == false) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'upload.js'; head.appendChild(script); }

172 Initialize JavaScript on Demand Write Fast Loading JavaScript var userTileScriptsLoaded = false; function CustomizeUserTile() { if (userTileScriptsLoaded == false) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'upload.js'; head.appendChild(script); }

173 Initialize JavaScript on Demand Write Fast Loading JavaScript var userTileScriptsLoaded = false; function CustomizeUserTile() { if (userTileScriptsLoaded == false) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'upload.js'; head.appendChild(script); }

174 Initialize JavaScript on Demand Write Fast Loading JavaScript var userTileScriptsLoaded = false; function CustomizeUserTile() { if (userTileScriptsLoaded == false) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.type = 'text/javascript'; script.src = 'upload.js'; head.appendChild(script); }

175 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

176 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

177 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

178 function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; } Minimize DOM Interactions Use DOM Efficiently

179 function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

180 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

181 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

182 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; }

183 Minimize DOM Interactions Use DOM Efficiently function CalculateSum() { var leftSide = document.body.all.lSide.value; var rightSide = document.body.all.rSide.value; document.body.all.result.value = leftSide + rightSide; } 15 lookups

184 function LoopChildren(elm) { var node = elm.firstChild; while (node != null) { node = node.nextSibling; } Built in DOM Methods Always More Efficient Use DOM Efficiently

185 function LoopChildren(elm) { var node = elm.firstChild; while (node != null) { node = node.nextSibling; } Built in DOM Methods Always More Efficient Use DOM Efficiently

186 function LoopChildren(elm) { var node = elm.firstChild; while (node != null) { node = node.nextSibling; } Built in DOM Methods Always More Efficient Use DOM Efficiently

187 function doValidation() { var reqs = document.querySelectorAll(".required"); var missingRequiredField = false; for (var i = 0; i < reqs.length; i++) { if (reqs[i].value == "") missingRequiredField = true; } Use Selectors API for Collection Access Use DOM Efficiently

188 function doValidation() { var reqs = document.querySelectorAll(".required"); var missingRequiredField = false; for (var i = 0; i < reqs.length; i++) { if (reqs[i].value == "") missingRequiredField = true; } Use Selectors API for Collection Access Use DOM Efficiently

189 function InsertUsername() { document.getElementById('user').innerHTML = userName; } User.innerHTML to Construct Your Page Use DOM Efficiently

190 function InsertUsername() { document.getElementById('user').innerHTML = userName; } User.innerHTML to Construct Your Page Use DOM Efficiently

191 function BuildUI() { var elm = document.getElementById('ui'); var contents = BuildTitle() + BuildBody() + BuildFooter(); elm.innerHTML = contents; } Batch Markup Changes Use DOM Efficiently

192 function BuildUI() { var elm = document.getElementById('ui'); var contents = BuildTitle() + BuildBody() + BuildFooter(); elm.innerHTML = contents; } Batch Markup Changes Use DOM Efficiently

193 function BuildUI() { var elm = document.getElementById('ui'); var contents = BuildTitle() + BuildBody() + BuildFooter(); elm.innerHTML = contents; } Batch Markup Changes Use DOM Efficiently

194 function BuildUI() { var elm = document.getElementById('ui'); var contents = BuildTitle() + BuildBody() + BuildFooter(); elm.innerHTML = contents; } Batch Markup Changes Use DOM Efficiently

195 Maintain a Small and Healthy DOM Use DOM Efficiently DocumentHTMLBody Element

196 JSON Always Faster than XML for Data XML Representation example glossary S Markup Language SGML ISO 8879:1986 meta-markup language

197 Native JSON Methods var jsObjStringParsed = JSON.parse(jsObjString); var jsObjStringBack = JSON.stringify(jsObjStringParsed); Use Native JSON Methods Write Fast JavaScript

198 Use Regular Expressions Sparingly Write Fast JavaScript var foo = ^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*(?:\s*\$)\\;

199 Principle #6: Know What Your Application is Doing

200 setTimeout setTimeout(callback, ms); setInterval var test = setInterval(callback, ms); clearInterval(test); Understand JavaScript Timers Know What Your Application is Doing nnnnnn

201 Combine Application Timers Know What Your Application is Doing 10 66666666666 50

202 Align Timers to the Display Frame (16.7) Know What Your Application is Doing setInterval(renderLoop, 16.7); setInterval(renderLoop, 33.4); 16.7

203 Use requestAnimationFrame for Animations Know What Your Application is Doing window.requestAnimationFrame(renderLoop); 16.7

204 Know When Your App is Visible Know What Your Application is Doing Page Visibility API document.hidden (property) Visibilitychange (event)

205 Six Principles to Remember 1)Quickly Respond to Network Requests 2)Minimize Bytes Downloaded 3)Efficiently Structure Markup 4)Optimize Media Usage 5)Write Fast JavaScript 6)Know What Your Application is Doing

206

207 Core 1Core 2 Core 3Core 4 GPU

208

209 ?

210 

211

212


Download ppt "Windows 8 Windows Core OS Services JavaScript (Chakra) C C++ C# VB Windows Store Apps Communication & Data Application Model Devices & Printing WinRT."

Similar presentations


Ads by Google