from php first to javascript first - the wordpress.com story

40
PHP FIRST TO JAVASCRIPT FIRST THE WORDPRESS.COM STORY

Upload: jordan-west

Post on 06-Jan-2017

234 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: From PHP first to JavaScript first - The WordPress.com Story

PHP FIRST TO JAVASCRIPTFIRST

THE WORDPRESS.COM STORY

Page 2: From PHP first to JavaScript first - The WordPress.com Story

WORDPRESS.ORG WORDPRESS.COM

Page 3: From PHP first to JavaScript first - The WordPress.com Story

A LONG, LONG TIME AGOIN THE WORLD OF TECH

SO 3 YEARS AGO

Page 4: From PHP first to JavaScript first - The WordPress.com Story

WORDPRESS.COM - CIRCA 2013

Page 5: From PHP first to JavaScript first - The WordPress.com Story
Page 6: From PHP first to JavaScript first - The WordPress.com Story

CALYPSO

Page 7: From PHP first to JavaScript first - The WordPress.com Story
Page 8: From PHP first to JavaScript first - The WordPress.com Story
Page 9: From PHP first to JavaScript first - The WordPress.com Story
Page 10: From PHP first to JavaScript first - The WordPress.com Story

WHY REWRITE?One of the hardest things to do in technology

is disrupt yourself

Matt Mullenweg

Page 11: From PHP first to JavaScript first - The WordPress.com Story

SPEED

MOBILE FIRST

MULTI-SITE

CONNECTIONS

OFFLINE

CHANCE TO REINVENT OUR PROCESS

Page 12: From PHP first to JavaScript first - The WordPress.com Story

HOW?

Page 13: From PHP first to JavaScript first - The WordPress.com Story

1. Learn JavaScript2. ???3. Pro�t!

Page 14: From PHP first to JavaScript first - The WordPress.com Story

LEARN FROM OTHER PROJECTS

REST API

LEGACY LINKS

Page 15: From PHP first to JavaScript first - The WordPress.com Story

TECH STACK

Page 16: From PHP first to JavaScript first - The WordPress.com Story

NO FRAMEWORKS!Almost...

Page 17: From PHP first to JavaScript first - The WordPress.com Story

REACT

REDUX

BABEL

WEBPACK

Page 18: From PHP first to JavaScript first - The WordPress.com Story

REACT

Page 19: From PHP first to JavaScript first - The WordPress.com Story

REUSABLE COMPONENTS

Page 20: From PHP first to JavaScript first - The WordPress.com Story

REUSABLE COMPONENTS

<PlanStorageButton sitePlanName="Free" mediaStorage={ { storage_used_bytes: 167503724, max_storage_bytes: 3221225472, } } />

Page 21: From PHP first to JavaScript first - The WordPress.com Story

DECLARATIVE VSIMPERATIVE

A PARADIGM SHIFT

Page 22: From PHP first to JavaScript first - The WordPress.com Story

DECLARATIVEDESCRIBE HOW THINGS SHOULD BE

IMPERATIVEDESCRIBE HOW THINGS SHOULD CHANGE

Page 23: From PHP first to JavaScript first - The WordPress.com Story

AN EXAMPLESave

Page 24: From PHP first to JavaScript first - The WordPress.com Story

PHP<!-- Declarative --> <form action="/save"> <input type="submit" id="save-button" value="<?php echo ( saving ? 'Saving...' : 'Save' ); ?>" />

Page 25: From PHP first to JavaScript first - The WordPress.com Story

PHP + JQUERY<!-- Declarative --> <button id="save-button">Save</button>

<!-- Imperative --> <script type="text/javascript"> $('#save-button').on('click', function(){ $(this).html('Saving...'); }) </script>

Page 26: From PHP first to JavaScript first - The WordPress.com Story

REACTReact.createClass({ render() { <!-- Declarative --> return <button onClick={this.save}> { this.state.saving ? 'Saving...' : 'Save' } </button>; },

<!-- Imperative --> save() { this.setState({saving: true}); }, });

Page 27: From PHP first to JavaScript first - The WordPress.com Story

REDUX

Page 28: From PHP first to JavaScript first - The WordPress.com Story

REDUX GLOBAL ACTIONS// ... export const SET_ROUTE = '...'; export const SET_SECTION = '...'; export const GUIDED_TOUR_SHOW = '...'; export const GUIDED_TOUR_UPDATE = '...'; export const SITE_DOMAINS_RECEIVE = '...'; export const SITE_DOMAINS_REQUEST = '...'; export const SITE_DOMAINS_REQUEST_SUCCESS = '...'; export const SITE_DOMAINS_REQUEST_FAILURE = '...'; export const SITE_MEDIA_STORAGE_RECEIVE = '...'; export const SITE_MEDIA_STORAGE_REQUEST = '...'; export const SITE_MEDIA_STORAGE_REQUEST_SUCCESS = '...'; export const SITE_MEDIA_STORAGE_REQUEST_FAILURE = '...'; // ...

Page 29: From PHP first to JavaScript first - The WordPress.com Story

STATE TREE

=

Page 30: From PHP first to JavaScript first - The WordPress.com Story

CHALLENGES

Page 31: From PHP first to JavaScript first - The WordPress.com Story

BROWSER SUPPORTIE6?

LAST TWO MAJOR BROWSER VERSIONS

DESKTOP APP

Page 32: From PHP first to JavaScript first - The WordPress.com Story

BUNDLE SIZE> 1MB

Page 33: From PHP first to JavaScript first - The WordPress.com Story

ERROR HANDLINGTELEMETRY

Page 34: From PHP first to JavaScript first - The WordPress.com Story

ADAPTING TO CHANGING TECH

Page 35: From PHP first to JavaScript first - The WordPress.com Story

BABELAND ES-FUTURE

// :( var sum = function( a, b ) { return a + b; }

// :) const sum = ( a, b ) => a + b;

Page 36: From PHP first to JavaScript first - The WordPress.com Story

BABELAND ES-FUTURE

// :( var Paragraph = React.createClass({ render: function() { return <p>{ this.props.text }</p>; }, });

// :) const Paragraph = props => <p>{ props.text }</p>;

Page 37: From PHP first to JavaScript first - The WordPress.com Story

FLUX⬇

REDUX

Page 38: From PHP first to JavaScript first - The WordPress.com Story

LEFT-PADfunction leftpad (str, len, ch) { str = String(str);

var i = -1;

ch || (ch = ' '); len = len - str.length;

while (++i < len) { str = ch + str; }

return str; }

Page 39: From PHP first to JavaScript first - The WordPress.com Story

OPEN SOURCEgithub.com/Automattic/wp-calypso

Page 40: From PHP first to JavaScript first - The WordPress.com Story

Jordan West

@jordwest

automattic.com