Slide 1

Slide 1 text

H T T P/ 2

Slide 2

Slide 2 text

D AV E Y S H A F I K • Developer • Author • Open Source Contributor • Release Manager for PHP 7.1 • @dshafik

Slide 3

Slide 3 text

h tt p : / /d e v e l o p e r. a ka m a i .co m

Slide 4

Slide 4 text

H T T P/ 2 A KA : H 2

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

B R O W S E R S U P P O RT

Slide 7

Slide 7 text

B R O W S E R S U P P O RT • Chrome + Chrome Mobile • Firefox • IE 11 on Windows 10 • MS Edge • Safari (El Capitan/iOS 9) • Opera

Slide 8

Slide 8 text

A L L B R O W S E RS R E Q U I R E T LS FO R H T T P/ 2 CC-BY: Jason Baker

Slide 9

Slide 9 text

W H AT I S H T T P/ 2 ? CC-BY: Marco Bellucci

Slide 10

Slide 10 text

B I N A R Y I N ST E A D O F T E XT CC-BY: brett jordan

Slide 11

Slide 11 text

F U L LY M U LT I P L E X E D CC-BY: vadikunc I N S T E A D O F O R D E R E D A N D B L O C K I N G

Slide 12

Slide 12 text

C A N US E O N E CO N N E CT I O N 
 FO R PA R A L L E L R E Q U E STS CC-BY: Alosh Bennett

Slide 13

Slide 13 text

US E S H E A D E R CO M P R E SS I O N CC-BY-SA: Magnus Hagdorn R E D U C E S O V E R H E A D

Slide 14

Slide 14 text

S E R V E R P U S H I S S U P E R CO O L ( N O R E A L LY ) CC-BY-SA: Takeshi

Slide 15

Slide 15 text

S E R V E R P U S H • Allows the server to proactively push assets like stylesheets and images to the client without them needing to parse the HTML page and make subsequent requests • Done by pushing the assets into the client cache, avoiding the roundtrip necessary to pull them up once the client makes the request

Slide 16

Slide 16 text

W H AT D O E S H T T P/ 2 M E A N F O R M Y A P P L I C AT I O N ?

Slide 17

Slide 17 text

T R A N S PA R E N T CC-BY-SA: Patty H A N D L E D B Y N G I N X / A PA C H E

Slide 18

Slide 18 text

S O W H AT ’ S T H E P O I N T ?

Slide 19

Slide 19 text

H T T P/ 1 . X S U C K S CC-BY: Flóra Soós

Slide 20

Slide 20 text

H T T P/ 1 . X S U C K S • Minify + Concat JavaScript and CSS • Inlining small JavaScript and CSS • Using image sprites • Using data: URIs • Domain sharding

Slide 21

Slide 21 text

T H E S E T H I N G S A R E A L L " C L E V E R " H AC K S CC-BY: Matt Biddulph

Slide 22

Slide 22 text

CO D E

Slide 23

Slide 23 text

$numRequests = 378;

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

$url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_exec($ch); curl_close($ch); }

Slide 26

Slide 26 text

$url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_exec($ch); curl_close($ch); }

Slide 27

Slide 27 text

$url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_exec($ch); curl_close($ch); }

Slide 28

Slide 28 text

$url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_exec($ch); curl_close($ch); }

Slide 29

Slide 29 text

$url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_exec($ch); curl_close($ch); }

Slide 30

Slide 30 text

4 7 . 6 7 
 s e co n d s CC-BY: Hernán Piñera

Slide 31

Slide 31 text

H T T P/ 2 : SY N C H R O N O US $url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_setopt($ch, CURLOPT_HTTP_VERSION, HTTP_VERSION_2_0); curl_exec($ch); curl_close($ch); }

Slide 32

Slide 32 text

H T T P/ 2 : SY N C H R O N O US $url = 'https://http2.akamai.com/demo/tile-%d.png'; for ($i = 0; $i <= $numRequests; $i++) { $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, $i); curl_setopt($ch, CURLOPT_HTTP_VERSION, HTTP_VERSION_2_0); curl_exec($ch); curl_close($ch); }

Slide 33

Slide 33 text

6 2 . 1 9 
 s e co n d s CC-BY-NC: Scott Beckner

Slide 34

Slide 34 text

$mh = curl_multi_init();
 $url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 1 . 1 : CO N CU R R E N T

Slide 35

Slide 35 text

$mh = curl_multi_init();
 $url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 1 . 1 : CO N CU R R E N T

Slide 36

Slide 36 text

$mh = curl_multi_init();
 $url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 1 . 1 : CO N CU R R E N T

Slide 37

Slide 37 text

$mh = curl_multi_init();
 $url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 1 . 1 : CO N CU R R E N T

Slide 38

Slide 38 text

H T T P/ 1 . 1 : CO N CU R R E N T ( CO N T. ) do { $exec = curl_multi_exec($mh, $running); } while ($exec == CURLM_CALL_MULTI_PERFORM); while ($running && $exec == CURLM_OK) { $ready = curl_multi_select($mh); if ($ready != -1) { do { $exec = curl_multi_exec($mh, $running);
 } while ($exec == CURLM_CALL_MULTI_PERFORM); } }

Slide 39

Slide 39 text

8 . 6 6 
 s e co n d s

Slide 40

Slide 40 text

$url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 2 : M U LT I P L E X E D $mh = curl_multi_init();

Slide 41

Slide 41 text

$url = 'https://http2.akamai.com/demo/tile-%d.png';
 for ($i = 0; $i <= $numRequests; $i++) { $handles[] = $ch = curl_init(); $conf[CURLOPT_URL] = sprintf($url, ‘%d'); curl_multi_add_handle($mh, $ch); } H T T P/ 2 : M U LT I P L E X E D curl_multi_setopt($mh,
 CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX ); $mh = curl_multi_init();

Slide 42

Slide 42 text

H T T P/ 2 : M U LT I P L E X E D ( CO N T. ) do { $exec = curl_multi_exec($mh, $running); } while ($exec == CURLM_CALL_MULTI_PERFORM); while ($running && $exec == CURLM_OK) { $ready = curl_multi_select($mh); if ($ready != -1) { do { $exec = curl_multi_exec($mh, $running);
 } while ($exec == CURLM_CALL_MULTI_PERFORM); } }

Slide 43

Slide 43 text

2 . 1 4 
 s e co n d s CC-BY: motoracereports

Slide 44

Slide 44 text

I N S U M M A R Y

Slide 45

Slide 45 text

N O M O R E H AC K S !

Slide 46

Slide 46 text

H U G E P E R FO R M A N C E W I N S

Slide 47

Slide 47 text

6 0 % + M A R K E T S H A R E

Slide 48

Slide 48 text

H T T P / 2 I S A W E S O M E ! CC-BY-SA: Steven Gerner

Slide 49

Slide 49 text

F E E D B A C K & Q U E S T I O N S Twitter: Email: Slides: @dshafik [email protected] http://daveyshafik.com/slides