Slide 1

Slide 1 text

Gregory Moeck Scaling Performance of Large Applications, Even On Mobile Devices @gregmoeck Monday, October 3, 11

Slide 2

Slide 2 text

Introduction Monday, October 3, 11

Slide 3

Slide 3 text

Quick Survey Monday, October 3, 11

Slide 4

Slide 4 text

Largest JS Application You’ve Built? Monday, October 3, 11

Slide 5

Slide 5 text

1,000 LoC Monday, October 3, 11

Slide 6

Slide 6 text

2,000 LoC Monday, October 3, 11

Slide 7

Slide 7 text

5,000 LoC Monday, October 3, 11

Slide 8

Slide 8 text

10,000 LoC Monday, October 3, 11

Slide 9

Slide 9 text

25,000 LoC Monday, October 3, 11

Slide 10

Slide 10 text

50,000 LoC Monday, October 3, 11

Slide 11

Slide 11 text

100,000 LoC Monday, October 3, 11

Slide 12

Slide 12 text

Talk Structure Monday, October 3, 11

Slide 13

Slide 13 text

High Level Overview Monday, October 3, 11

Slide 14

Slide 14 text

No Real Code Monday, October 3, 11

Slide 15

Slide 15 text

Two Types Of Performance: Monday, October 3, 11

Slide 16

Slide 16 text

Initial Load Time Monday, October 3, 11

Slide 17

Slide 17 text

Application Responsiveness Monday, October 3, 11

Slide 18

Slide 18 text

Initial Load Time Monday, October 3, 11

Slide 19

Slide 19 text

Actual Load Time Monday, October 3, 11

Slide 20

Slide 20 text

Follow Best Practices Monday, October 3, 11

Slide 21

Slide 21 text

* Enable Compression * Remove Unused CSS * Combine JS & CSS * Minify JS & CSS * Optimize Images * Cache Resources Monday, October 3, 11

Slide 22

Slide 22 text

That’s Likely Not Enough Monday, October 3, 11

Slide 23

Slide 23 text

Surprising Fact: Monday, October 3, 11

Slide 24

Slide 24 text

Parsing JS Is Really Slow On Mobile Monday, October 3, 11

Slide 25

Slide 25 text

1KB ~ 1ms 1MB ~ 1s Monday, October 3, 11

Slide 26

Slide 26 text

How Do I Get This Down? Monday, October 3, 11

Slide 27

Slide 27 text

1. Remove Code Your Not Using Monday, October 3, 11

Slide 28

Slide 28 text

Example: SproutCore Blacklist Monday, October 3, 11

Slide 29

Slide 29 text

2. Defer Loading Code Till It’s Needed Monday, October 3, 11

Slide 30

Slide 30 text

Break Your Application Into Modules Monday, October 3, 11

Slide 31

Slide 31 text

You Can Prefetch The Packages Monday, October 3, 11

Slide 32

Slide 32 text

Create An Abstraction To Do This For You Monday, October 3, 11

Slide 33

Slide 33 text

Example: Statechart In SproutCore Monday, October 3, 11

Slide 34

Slide 34 text

Perceived Load Time Monday, October 3, 11

Slide 35

Slide 35 text

Users Don’t Care About Actual Load Time Monday, October 3, 11

Slide 36

Slide 36 text

They Care If It “Seems Slow” Monday, October 3, 11

Slide 37

Slide 37 text

How Do I Avoid That “Feeling”? Monday, October 3, 11

Slide 38

Slide 38 text

1. Have A Very Simple Initial Page Monday, October 3, 11

Slide 39

Slide 39 text

Once The Page Is Totally Loaded, Start The App Monday, October 3, 11

Slide 40

Slide 40 text

Sometimes You Can Make Your Load Page Look Like The App Monday, October 3, 11

Slide 41

Slide 41 text

Sometimes It’s Better Not To Monday, October 3, 11

Slide 42

Slide 42 text

2. Put Some Animation While Loading Monday, October 3, 11

Slide 43

Slide 43 text

Caution: Monday, October 3, 11

Slide 44

Slide 44 text

Remember The Browser Is Single Threaded Monday, October 3, 11

Slide 45

Slide 45 text

How Do I Know If My App “Feels Slow”? Monday, October 3, 11

Slide 46

Slide 46 text

Put It In Front Of Non Developers Monday, October 3, 11

Slide 47

Slide 47 text

Responsiveness Monday, October 3, 11

Slide 48

Slide 48 text

Actual Responsiveness Monday, October 3, 11

Slide 49

Slide 49 text

Optimize Your Algorithms Monday, October 3, 11

Slide 50

Slide 50 text

* Faster Algorithms * Loops Instead Of Closures * Memoization * Queueing * Optimize Images Monday, October 3, 11

Slide 51

Slide 51 text

Two Places Most Apps Are Slow Monday, October 3, 11

Slide 52

Slide 52 text

DOM & AJAX Monday, October 3, 11

Slide 53

Slide 53 text

Server Browser Your Application Monday, October 3, 11

Slide 54

Slide 54 text

Server Browser Your Application AJAX DOM Monday, October 3, 11

Slide 55

Slide 55 text

Speeding Up AJAX Monday, October 3, 11

Slide 56

Slide 56 text

Key Ideas: Minimize Calls & Payload Monday, October 3, 11

Slide 57

Slide 57 text

1. Ask Only For The Information You Need Monday, October 3, 11

Slide 58

Slide 58 text

Example: Search For Users Monday, October 3, 11

Slide 59

Slide 59 text

2. Store Items Locally To Not Repeat Calls Monday, October 3, 11

Slide 60

Slide 60 text

3. Don’t Talk To Multiple APIs For A Single Request Monday, October 3, 11

Slide 61

Slide 61 text

Talk To A Middle Tier Monday, October 3, 11

Slide 62

Slide 62 text

Speeding Up DOM Monday, October 3, 11

Slide 63

Slide 63 text

Key Idea: Minimize / Simplify Redrawing Monday, October 3, 11

Slide 64

Slide 64 text

1. Minimize Elements In The DOM Monday, October 3, 11

Slide 65

Slide 65 text

Incremental Rendering Monday, October 3, 11

Slide 66

Slide 66 text

Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile Monday, October 3, 11

Slide 67

Slide 67 text

Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile Visible Window Monday, October 3, 11

Slide 68

Slide 68 text

Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details about the user profile Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details Some Name A some details A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile A some details about the user profile Item Size Monday, October 3, 11

Slide 69

Slide 69 text

Just A Matter Of Math Monday, October 3, 11

Slide 70

Slide 70 text

2. Minimize DOM Updates Monday, October 3, 11

Slide 71

Slide 71 text

Display Some List Pending Items Pending Todo P1 30 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 72

Slide 72 text

Display Some List Pending Items Pending Todo P1 30 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 73

Slide 73 text

Display Some List Pending Items Pending Todo P1 30 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 74

Slide 74 text

Display Some List Pending Items Pending Todo P1 29 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 75

Slide 75 text

Display Some List Pending Items Pending Todo P1 28 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 76

Slide 76 text

Display Some List Pending Items Pending Todo P1 27 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 77

Slide 77 text

... Monday, October 3, 11

Slide 78

Slide 78 text

Display Some List Pending Items Pending Todo P1 0 Complete All Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Pending Todo Monday, October 3, 11

Slide 79

Slide 79 text

Stabilize Application State First Monday, October 3, 11

Slide 80

Slide 80 text

Server Browser Your Application AJAX DOM Monday, October 3, 11

Slide 81

Slide 81 text

Then Update The DOM Monday, October 3, 11

Slide 82

Slide 82 text

Or Buffer Changes Monday, October 3, 11

Slide 83

Slide 83 text

Perceived Responsiveness Monday, October 3, 11

Slide 84

Slide 84 text

1. Put Up A UI Before Long Processes Monday, October 3, 11

Slide 85

Slide 85 text

2. Give The User An Indication That Event Was Received Monday, October 3, 11

Slide 86

Slide 86 text

How Do I Know If My App “Feels Slow”? Monday, October 3, 11

Slide 87

Slide 87 text

Put It In Front Of Non Developers Monday, October 3, 11

Slide 88

Slide 88 text

@gregmoeck [email protected] Questions? Monday, October 3, 11