SlideShare a Scribd company logo
1 of 80
Download to read offline
Front-end
Modernization
FOR MORTALS
CO RY G ACK ENH EIMER @ CG ACK
About Me
Software Engineer @Healthx
jQuery Mobile Team Member
Author
“Node.js Recipes”
“Introduction to React”
Consultant
What’s Covered
Motivation for this talk
Ideal Workflows vs. Actual Workflows
Tackling Monolithic JavaScript
Modularization Ideas
Making it Backcompat
Cherry-picking some new frameworks
Maintaining your sanity application
Motivation
FOR THIS TALK
The Front-end
Landscape
The Front-end
Landscape
IS CRAZY
Language Choices
Ye olde JavaScript
Ye Next JavaScript (ES6 and beyond)
TypeScript
CoffeeScript
Dart
OtherScript
MyNewScript
…
Framework Choices
jQuery
Backbone
Knockout
Angular
Ember
React
CanJS
???
Others (sorry if I left your favorite off the list, not intended)
How do choose?
Blog posts
Conference Talks
Video tutorials
Try it yourself
Your friend/colleague recommended
Framework X is most popular so it is best
ANY OF THESE COULD BE VALID FOR YOU
But…
… reality sets in
The codebase is not primed to accept
◦ bower
◦ browserify
◦ AMD modules
◦ Grunt Tasks, Gulp Tasks, Brocolli.
◦ …
It definitely doesn’t support
◦ A full rewrite of all the things
◦ A fully single-page framework
◦ An entirely new workflow
Workflow
Divergence
OR HOW TO ANGER YOUR ENTIRE TEAM
Workflow.current
Its been tested
◦ The team has been doing it for years
◦ The company is making money doing X for so long
◦ The developers understand it and have bought in
◦ Changing things wholesale will take some adjustment
Workflow.next
You can either
A) Adopt wholesale the processes of someone you
◦ Have seen talk
◦ Read a blog about
◦ Uses Framework X
B) Accept that you cannot change everything
◦ allow your process to evolve naturally
◦ adopting new or more modernized processes incrementally
◦ Make modernization an extension of your current work, not a replacement
Breaking Up
A MONOLITH
What is a Monolith?
It can be anything that hinders the maintainability and stability of your
front-end code
- A single file for all logic (note: concatenated files on production don’t
count)
- jQuery bits thrown about on inlined script tags served separately from
each server load
How to break it up?
Download React and everything will just work!
How to break it up?
… actually, It can be done in some simple, or at least manageable, steps.
Modularization
STEP ZERO
Take Inventory
Do you need these to coexist
◦ API Wrapper
◦ Validation Calls
◦ Date Parsing
◦ Animation/UI hacks
Split it out
First step is to
Split those into manageable chunks for development
MyBigApp.validations.js
MyBigApp.api.js
MyBigApp.uihacks.js
Next Step
Take what you have and concatenate and minimize them
Myapp.validations.js + Myapp.api.js + Myapp.uihacks.js =>
Myapp.min.js
This is enough
TO MAKE A MEASURABLE DIFFERENCE
How?
First!
◦ Your code is immediately more manageable
◦ Your code is immediately more maintainable
Second
◦ Your code is minimized on the client
I ALREADY KNOW THIS AND DO THIS
Modularization
STEP ONE
Step One
Concatenation and Minimization may not be enough
Next
◦ Modularize better
◦ Do not include all the code all the time
◦ Load modules when needed
Step One
You already have your code broken apart
◦ Main.js, validations.js, uihacks.js, etc.js
Make these load only when needed.
There are a ton of ways to do this… I’ll show you a few
Leverage jQuery
jQuery’s extend method can allow you to merge objects easily
Use AMD Modules
Require.js is pretty great
Using ES6
Using babel.io (or whatever) - https://babeljs.io/
Or any number of others…
TypeScript modules
Browserify – http://browserify.org/
webpack - http://webpack.github.io/
… etc.
Just one example - Browserify
Using browserify you can utilize CommonJS modules ->
require(“module”) like you see in Node.js
Browserify creates the require function so you can easily implement this
in the browser. You can run:
$ browerify myDevFile.js -o bundle.js
To get the output you want, or use a tool like watchify to watch a file ||
directory for changes and automatically create your bundle file.
So you can write your code like the following slide and use it in the
browser
Webpack
Similar to browserify, but can also do AMD modules along with
CommonJS modules
Pick your flavor and enjoy!
Change
Everything
YOU HAVE NOW OPTIMIZED THE MONOLITH AND
DECIDE TO CHANGE IT ALL
Revisit and Refactor
Modernize stale methods
Revisit helpers, validators, etc that might not be needed any more
Remove that old IE6, Opera (pre-Blink), and other hacks
… But what happens when you know there are likely places in the code
that are dependent on old hacks, functions, or objects
…
backcompat
GRACEFUL DEPRECATION
Deprecation Ideas
First
◦ Keep deprecated code around for a release or two (or six)
◦ Educate your team about deprecation
◦ Educate your users about deprecation
◦ Give alternatives
Log
At least use console.log() console.warn() during dev
Log using ajax
Log using google analytics custom variables
Log using some other method
Convert date string
Convert date string
Convert date string
What happens in some browsers when the dateStr === “2015-05-14”?
Convert date string
IRL we fix this
But what if we relied on this method somewhere or we are a third-party
library where we have a set of users that rely on it. We might not be
able to make a breaking change
So we make a new method
Backcompat
First we need to log that the old function was called
◦ Log via ajax, or analytics
◦ Add a console warning for teammates
Then we can call the new method or in this case .apply() the new
method
Framework
integration
Try It Out
Side Projects
Freelance Gigs
Hack time (if you get any)
Try It Out
You may not get the chance to try full-fledged apps, but at least go
through the basic trivial solutions before you settle on one for
production
This lets you get a taste of how the development flow works with the
different frameworks
A tale of three apps
One freelance gig building a new service
◦ Owner wanted a new front-end for solution X
◦ Thought “Knockout or whatever fits best”
◦ I built first prototypes with the existing jQuery, then Angular, and React
Find the Fit
This is where it gets difficult
It is easy to think X framework is better than Y because it has factor Z
If you honestly build a prototype with N number of frameworks, you will
find the one that
◦ Fits best with your current solution
◦ Or… will be easy enough to build from scratch
◦ Or… will be able to be used for new development and integrate with the old
Example Time
SIMPLE USER SELECT IN $, ANGULAR, AND REACT
Once You Choose
Evangelize to other developers on your team
Integrate with modern tools (more on that in a sec)
Be happy o/
Bottom Line
THERE REALLY ISN’T A WRONG ANSWER FOR THE
FRAMEWORK YOU CHOOSE AS LONG AS YOU MAKE
AN INFORMED DECISION
More Important
THAN PICKING A NEW FRAMEWORK, OR ANYTHING
ELSE REALLY
TOOLS
NOTHING HAS TO BE TOO FANCY…
Testing
PLEASE ADD AT LEAST ONE VALUABLE TEST
Lint
SERIOUSLY
Consistent Code
Style
ONE SHOULD NOT BE ABLE TO TELL WHO WROTE
WHAT CODE
Performance
testing
PERFORMANCE IS NOT A NICE-TO-HAVE FEATURE
Build tools
CONCATENATE AND MINIFY PLEASE
Thank You
QUESTIONS?

More Related Content

What's hot

NodeJS for Novices - 28/Oct/13 - Winnipeg, MB
NodeJS for Novices - 28/Oct/13 - Winnipeg, MBNodeJS for Novices - 28/Oct/13 - Winnipeg, MB
NodeJS for Novices - 28/Oct/13 - Winnipeg, MB
David Wesst
 

What's hot (19)

professional core java trainer
professional core java trainerprofessional core java trainer
professional core java trainer
 
Test your Javascript! v1.1
Test your Javascript! v1.1Test your Javascript! v1.1
Test your Javascript! v1.1
 
NodeJS for Novices - 28/Oct/13 - Winnipeg, MB
NodeJS for Novices - 28/Oct/13 - Winnipeg, MBNodeJS for Novices - 28/Oct/13 - Winnipeg, MB
NodeJS for Novices - 28/Oct/13 - Winnipeg, MB
 
Everyones invited! Meet accesibility requirements with ColdFusion
Everyones invited! Meet accesibility requirements with ColdFusionEveryones invited! Meet accesibility requirements with ColdFusion
Everyones invited! Meet accesibility requirements with ColdFusion
 
Node.JS error handling best practices
Node.JS error handling best practicesNode.JS error handling best practices
Node.JS error handling best practices
 
Enterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScriptEnterprise Strength Mobile JavaScript
Enterprise Strength Mobile JavaScript
 
Nightwatch JS for End to End Tests
Nightwatch JS for End to End TestsNightwatch JS for End to End Tests
Nightwatch JS for End to End Tests
 
Building Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiBuilding Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript Spaghetti
 
Testing nightwatch, by David Torroija
Testing nightwatch, by David TorroijaTesting nightwatch, by David Torroija
Testing nightwatch, by David Torroija
 
From zero to hero with React Native!
From zero to hero with React Native!From zero to hero with React Native!
From zero to hero with React Native!
 
React JS Belgium Touch Base - React, Flux, React Native
React JS Belgium Touch Base - React, Flux, React NativeReact JS Belgium Touch Base - React, Flux, React Native
React JS Belgium Touch Base - React, Flux, React Native
 
Introduction of React.js
Introduction of React.jsIntroduction of React.js
Introduction of React.js
 
React Django Presentation
React Django PresentationReact Django Presentation
React Django Presentation
 
(Js) Export your own WebGL Viewer
(Js) Export your own WebGL Viewer(Js) Export your own WebGL Viewer
(Js) Export your own WebGL Viewer
 
Automation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and BeyondAutomation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and Beyond
 
FreshAir2008
FreshAir2008FreshAir2008
FreshAir2008
 
JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016
 
A Closer Look At React Native
A Closer Look At React NativeA Closer Look At React Native
A Closer Look At React Native
 
Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0Taking Your GWT App to Tablets with GXT 4.0
Taking Your GWT App to Tablets with GXT 4.0
 

Similar to Front end-modernization

The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
Mark Fayngersh
 
Recipe of a rockstar developer
Recipe of a rockstar developerRecipe of a rockstar developer
Recipe of a rockstar developer
Topu Newaj
 

Similar to Front end-modernization (20)

Selecting the Best Javascript Web Framework
Selecting the Best Javascript Web FrameworkSelecting the Best Javascript Web Framework
Selecting the Best Javascript Web Framework
 
Improving Drupal Performances
Improving Drupal PerformancesImproving Drupal Performances
Improving Drupal Performances
 
Pain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr SugakPain Driven Development by Alexandr Sugak
Pain Driven Development by Alexandr Sugak
 
Fewd week4 slides
Fewd week4 slidesFewd week4 slides
Fewd week4 slides
 
Workshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfWorkshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdf
 
The State of Front-end At CrowdTwist
The State of Front-end At CrowdTwistThe State of Front-end At CrowdTwist
The State of Front-end At CrowdTwist
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and Selenium
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
 
The Perfect Neos Project Setup
The Perfect Neos Project SetupThe Perfect Neos Project Setup
The Perfect Neos Project Setup
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
Ajax Performance
Ajax PerformanceAjax Performance
Ajax Performance
 
Moving Large Apps to React - NYC JS
Moving Large Apps to React - NYC JSMoving Large Apps to React - NYC JS
Moving Large Apps to React - NYC JS
 
Agile
AgileAgile
Agile
 
Ionic framework one day training
Ionic framework one day trainingIonic framework one day training
Ionic framework one day training
 
Recipe of a rockstar developer
Recipe of a rockstar developerRecipe of a rockstar developer
Recipe of a rockstar developer
 
Create first android app with MVVM Architecture
Create first android app with MVVM ArchitectureCreate first android app with MVVM Architecture
Create first android app with MVVM Architecture
 
Ci tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepinsCi tips and_tricks_linards_liepins
Ci tips and_tricks_linards_liepins
 
Web Test Automation Framework - IndicThreads Conference
Web Test Automation Framework  - IndicThreads ConferenceWeb Test Automation Framework  - IndicThreads Conference
Web Test Automation Framework - IndicThreads Conference
 

More from devObjective

More from devObjective (20)

Lets git together
Lets git togetherLets git together
Lets git together
 
Raspberry Pi a la CFML
Raspberry Pi a la CFMLRaspberry Pi a la CFML
Raspberry Pi a la CFML
 
Command box
Command boxCommand box
Command box
 
Effective version control
Effective version controlEffective version control
Effective version control
 
Using type script to build better apps
Using type script to build better appsUsing type script to build better apps
Using type script to build better apps
 
Csp and http headers
Csp and http headersCsp and http headers
Csp and http headers
 
Who owns Software Security
Who owns Software SecurityWho owns Software Security
Who owns Software Security
 
Naked and afraid Offline mobile
Naked and afraid Offline mobileNaked and afraid Offline mobile
Naked and afraid Offline mobile
 
Web hackingtools 2015
Web hackingtools 2015Web hackingtools 2015
Web hackingtools 2015
 
Node without servers aws-lambda
Node without servers aws-lambdaNode without servers aws-lambda
Node without servers aws-lambda
 
I am-designer
I am-designerI am-designer
I am-designer
 
Garbage First and You!
Garbage First and You!Garbage First and You!
Garbage First and You!
 
Fusion Reactor
Fusion ReactorFusion Reactor
Fusion Reactor
 
Paying off emotional debt
Paying off emotional debtPaying off emotional debt
Paying off emotional debt
 
My SQL Skills Killed the Server
My SQL Skills Killed the ServerMy SQL Skills Killed the Server
My SQL Skills Killed the Server
 
Authentication Control
Authentication ControlAuthentication Control
Authentication Control
 
Multiply like rabbits with rabbit mq
Multiply like rabbits with rabbit mqMultiply like rabbits with rabbit mq
Multiply like rabbits with rabbit mq
 
Preso slidedeck
Preso slidedeckPreso slidedeck
Preso slidedeck
 
Intro to TDD & BDD
Intro to TDD & BDDIntro to TDD & BDD
Intro to TDD & BDD
 
Rethink Async with RXJS
Rethink Async with RXJSRethink Async with RXJS
Rethink Async with RXJS
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Recently uploaded (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Front end-modernization

  • 1. Front-end Modernization FOR MORTALS CO RY G ACK ENH EIMER @ CG ACK
  • 2. About Me Software Engineer @Healthx jQuery Mobile Team Member Author “Node.js Recipes” “Introduction to React” Consultant
  • 3. What’s Covered Motivation for this talk Ideal Workflows vs. Actual Workflows Tackling Monolithic JavaScript Modularization Ideas Making it Backcompat Cherry-picking some new frameworks Maintaining your sanity application
  • 7. Language Choices Ye olde JavaScript Ye Next JavaScript (ES6 and beyond) TypeScript CoffeeScript Dart OtherScript MyNewScript …
  • 9. How do choose? Blog posts Conference Talks Video tutorials Try it yourself Your friend/colleague recommended Framework X is most popular so it is best ANY OF THESE COULD BE VALID FOR YOU
  • 11. … reality sets in The codebase is not primed to accept ◦ bower ◦ browserify ◦ AMD modules ◦ Grunt Tasks, Gulp Tasks, Brocolli. ◦ … It definitely doesn’t support ◦ A full rewrite of all the things ◦ A fully single-page framework ◦ An entirely new workflow
  • 12. Workflow Divergence OR HOW TO ANGER YOUR ENTIRE TEAM
  • 13. Workflow.current Its been tested ◦ The team has been doing it for years ◦ The company is making money doing X for so long ◦ The developers understand it and have bought in ◦ Changing things wholesale will take some adjustment
  • 14. Workflow.next You can either A) Adopt wholesale the processes of someone you ◦ Have seen talk ◦ Read a blog about ◦ Uses Framework X B) Accept that you cannot change everything ◦ allow your process to evolve naturally ◦ adopting new or more modernized processes incrementally ◦ Make modernization an extension of your current work, not a replacement
  • 16. What is a Monolith? It can be anything that hinders the maintainability and stability of your front-end code - A single file for all logic (note: concatenated files on production don’t count) - jQuery bits thrown about on inlined script tags served separately from each server load
  • 17. How to break it up? Download React and everything will just work!
  • 18. How to break it up? … actually, It can be done in some simple, or at least manageable, steps.
  • 20. Take Inventory Do you need these to coexist ◦ API Wrapper ◦ Validation Calls ◦ Date Parsing ◦ Animation/UI hacks
  • 21.
  • 22. Split it out First step is to Split those into manageable chunks for development MyBigApp.validations.js MyBigApp.api.js MyBigApp.uihacks.js
  • 23.
  • 24.
  • 25. Next Step Take what you have and concatenate and minimize them Myapp.validations.js + Myapp.api.js + Myapp.uihacks.js => Myapp.min.js
  • 26. This is enough TO MAKE A MEASURABLE DIFFERENCE
  • 27. How? First! ◦ Your code is immediately more manageable ◦ Your code is immediately more maintainable Second ◦ Your code is minimized on the client
  • 28. I ALREADY KNOW THIS AND DO THIS
  • 30. Step One Concatenation and Minimization may not be enough Next ◦ Modularize better ◦ Do not include all the code all the time ◦ Load modules when needed
  • 31. Step One You already have your code broken apart ◦ Main.js, validations.js, uihacks.js, etc.js Make these load only when needed. There are a ton of ways to do this… I’ll show you a few
  • 32. Leverage jQuery jQuery’s extend method can allow you to merge objects easily
  • 33.
  • 34. Use AMD Modules Require.js is pretty great
  • 35.
  • 36. Using ES6 Using babel.io (or whatever) - https://babeljs.io/
  • 37.
  • 38.
  • 39.
  • 40. Or any number of others… TypeScript modules Browserify – http://browserify.org/ webpack - http://webpack.github.io/ … etc.
  • 41. Just one example - Browserify Using browserify you can utilize CommonJS modules -> require(“module”) like you see in Node.js Browserify creates the require function so you can easily implement this in the browser. You can run: $ browerify myDevFile.js -o bundle.js To get the output you want, or use a tool like watchify to watch a file || directory for changes and automatically create your bundle file. So you can write your code like the following slide and use it in the browser
  • 42.
  • 43. Webpack Similar to browserify, but can also do AMD modules along with CommonJS modules Pick your flavor and enjoy!
  • 44. Change Everything YOU HAVE NOW OPTIMIZED THE MONOLITH AND DECIDE TO CHANGE IT ALL
  • 45. Revisit and Refactor Modernize stale methods Revisit helpers, validators, etc that might not be needed any more Remove that old IE6, Opera (pre-Blink), and other hacks … But what happens when you know there are likely places in the code that are dependent on old hacks, functions, or objects …
  • 47. Deprecation Ideas First ◦ Keep deprecated code around for a release or two (or six) ◦ Educate your team about deprecation ◦ Educate your users about deprecation ◦ Give alternatives
  • 48. Log At least use console.log() console.warn() during dev Log using ajax Log using google analytics custom variables Log using some other method
  • 51. Convert date string What happens in some browsers when the dateStr === “2015-05-14”?
  • 53. IRL we fix this But what if we relied on this method somewhere or we are a third-party library where we have a set of users that rely on it. We might not be able to make a breaking change
  • 54. So we make a new method
  • 55. Backcompat First we need to log that the old function was called ◦ Log via ajax, or analytics ◦ Add a console warning for teammates Then we can call the new method or in this case .apply() the new method
  • 56.
  • 58. Try It Out Side Projects Freelance Gigs Hack time (if you get any)
  • 59. Try It Out You may not get the chance to try full-fledged apps, but at least go through the basic trivial solutions before you settle on one for production This lets you get a taste of how the development flow works with the different frameworks
  • 60. A tale of three apps One freelance gig building a new service ◦ Owner wanted a new front-end for solution X ◦ Thought “Knockout or whatever fits best” ◦ I built first prototypes with the existing jQuery, then Angular, and React
  • 61. Find the Fit This is where it gets difficult It is easy to think X framework is better than Y because it has factor Z If you honestly build a prototype with N number of frameworks, you will find the one that ◦ Fits best with your current solution ◦ Or… will be easy enough to build from scratch ◦ Or… will be able to be used for new development and integrate with the old
  • 62. Example Time SIMPLE USER SELECT IN $, ANGULAR, AND REACT
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68. Once You Choose Evangelize to other developers on your team Integrate with modern tools (more on that in a sec) Be happy o/
  • 69. Bottom Line THERE REALLY ISN’T A WRONG ANSWER FOR THE FRAMEWORK YOU CHOOSE AS LONG AS YOU MAKE AN INFORMED DECISION
  • 70. More Important THAN PICKING A NEW FRAMEWORK, OR ANYTHING ELSE REALLY
  • 71. TOOLS NOTHING HAS TO BE TOO FANCY…
  • 72. Testing PLEASE ADD AT LEAST ONE VALUABLE TEST
  • 74. Consistent Code Style ONE SHOULD NOT BE ABLE TO TELL WHO WROTE WHAT CODE
  • 75. Performance testing PERFORMANCE IS NOT A NICE-TO-HAVE FEATURE
  • 76.
  • 77.
  • 78.