Slide 1

Slide 1 text

Pedal to the Metal Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 2

Slide 2 text

Pedal to the Metal - AFTERMATH Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 3

Slide 3 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 4

Slide 4 text

! Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 5

Slide 5 text

Sequel Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 6

Slide 6 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 7

Slide 7 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 8

Slide 8 text

⾠ Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 9

Slide 9 text

Context Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 10

Slide 10 text

Planning @ SoundCloud Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 11

Slide 11 text

the bet Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 12

Slide 12 text

Improve iOS launch time Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 13

Slide 13 text

iOS branch Core Clients Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 14

Slide 14 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 15

Slide 15 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 16

Slide 16 text

Impossibility Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 17

Slide 17 text

Check the code 1. Grab start timestamp 2. Grab end timestamp 3. Diff 4. Multiply by a 1000 5. Send Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 18

Slide 18 text

Check the code 1. Grab start timestamp 2. Grab end timestamp 3. Diff 4. Multiply by a 1000 5. Send Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 19

Slide 19 text

Over 5 seconds Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 20

Slide 20 text

7,000,000 milliseconds Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 21

Slide 21 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 22

Slide 22 text

context Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 23

Slide 23 text

App then Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 24

Slide 24 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 25

Slide 25 text

App now Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 26

Slide 26 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 27

Slide 27 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 28

Slide 28 text

more context Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 29

Slide 29 text

Instruments Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 30

Slide 30 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 31

Slide 31 text

1. Startup Operations 2. ViewController 4. Profit?? Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 32

Slide 32 text

! Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 33

Slide 33 text

Main thread Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 34

Slide 34 text

! Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 35

Slide 35 text

! Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 36

Slide 36 text

How about that ViewController Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 37

Slide 37 text

even more context Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 38

Slide 38 text

Mirroring & you Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 39

Slide 39 text

⚡" Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 40

Slide 40 text

What now !? Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 41

Slide 41 text

Total pre-main time: 2.0 seconds (100.0%) dylib loading time: 355.67 milliseconds (17.0%) rebase/binding time: 1.3 seconds (63.5%) ObjC setup time: 186.10 milliseconds (8.9%) initializer time: 218.53 milliseconds (10.4%) slowest intializers : libSystem.dylib : 5.52 milliseconds (0.2%) : 51.01 milliseconds (2.4%) MediaServices : 57.60 milliseconds (2.7%) SoundCloud : 182.43 milliseconds (8.7%) Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 42

Slide 42 text

Enter Static Frameworks Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 43

Slide 43 text

Total pre-main time: 563.45 milliseconds (100.0%) dylib loading time: 111.39 milliseconds (19.7%) rebase/binding time: 151.48 milliseconds (26.8%) ObjC setup time: 148.33 milliseconds (26.3%) initializer time: 152.08 milliseconds (26.9%) slowest intializers : libSystem.dylib : 3.37 milliseconds (0.5%) : 46.06 milliseconds (8.1%) MediaServices : 25.92 milliseconds (4.6%) SoundCloud : 148.34 milliseconds (26.3%) Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 44

Slide 44 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 45

Slide 45 text

Resources & Static Frameworks Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 46

Slide 46 text

Including Frameworks Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 47

Slide 47 text

Takeaways Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 48

Slide 48 text

1. Parallelize* * Also with care Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 49

Slide 49 text

2. Instruments is your friend Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 50

Slide 50 text

3. Static Frameworks* * Also with care Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 51

Slide 51 text

4. Assume no ill-intention Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 52

Slide 52 text

Links · Automatic's blogpost about static frameworks 1 · Keith Smiley's LD python script 2 · CocoaPods 1.5.0 release notes 3 3 http://blog.cocoapods.org/CocoaPods-1.5.0/ 2 https://github.com/keith/swi"-staticlibs 1 https://blog.automatic.com/how-we-cut-our-ios-apps-launch-time-in-half-with-this-one-cool-trick-7aca2011e2ea Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 53

Slide 53 text

Xiè xiè · Github / Twitter @esttorhe - Mastodon @[email protected] Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 54

Slide 54 text

We are hiring Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 55

Slide 55 text

Esteban Torres • Core Clients @ SoundCloud • @esttorhe

Slide 56

Slide 56 text

Xiè xiè Esteban Torres • Core Clients @ SoundCloud • @esttorhe