Table of Contents
Functionality deprecation in browsers for HTML/JS spec implementations
Framework performance issues as browser features changes and user experience expectations evolve
Proactive detection and fixes
for browser and security issues,
relying on and contributing to the community
Stay up to date with community efforts
Validate community work
Contribute to community
Must be proactive and dedicate time periodically
Create private patches and fixes as necessary
Close this presentation
Read on...
Complexity
How big is the project?
Is all of the functionality clearly defined in advance or are you expected to be flexible?
What capabilities do you need?
Are the domain model and business logic complex?
What platforms are you targeting? Web, mobile, desktop?
Do you need server-side rendering? Is SEO important?
Will you be handling a lot of real-time event streams?
Team
How big is your team?
How experienced are your developers and what is their background?
How will this change over time?
Longevity
How long is it going to be maintained?
How will team change over time?
How will the framework be maintained/supported over time?
Community
Are there any ready-made component libraries that you would like to use?
Rewrite
Dual Framework (ngJS & ng5+)
Upgrade Apps Concurrently
Upgrade Apps Independently
Angular
React
Polymer, Vue, etc
Framework Options
Approach Options
App Upgrade Options
Initial Cost | Risk | Code Quality | Performance |
---|---|---|---|
$ | Moderate | Low | Low |
Initial Cost | Risk | Code Quality | Performance |
---|---|---|---|
$$ | High | Moderate | Moderate |
Initial Cost | Risk | Code Quality | Performance |
---|---|---|---|
$$ | Moderate | High | High |
How much development is planned?
lots
Is the app
big and complex?
minimal
Don't upgrade
small &
simple
Consider
component-centric upgrading
big & complex
Consider
feature-centric upgrading
AngularJS
Angular2
Angular4
Angular5
Angular6
Angular7
AngularJS
Angular5
Angular6
Angular7
ngUpgrade
UpgradeModule
UpgradeModule
UpgradeModule
UpgradeModule
Fresh Rewrite
Incremental Rewrite
A major release every 6 months
1-3 minor releases for each major release
A patch release almost every week
All of our major releases are supported for 18 months.
6 months of active support, during which regularly-scheduled updates and patches are released.
12 months of long-term support (LTS), during which only critical fixes and security patches are released.
React 15 was released in April 2016
React 16 was released in September 2017
React 17 isn’t expected until 2019
As we change React over time, we try to minimize the effort required to take advantage of new features. When possible, we’ll keep an older API working, even if that means putting it in a separate package. For example, mixins have been discouraged for years but they’re supported to this day via create-react-class and many codebases continue to use them in stable, legacy code.
Over a million developers use React, collectively maintaining millions of components. The Facebook codebase alone has over 50,000 React components. That means we need to make it as easy as possible to upgrade to new versions of React; if we make large changes without a migration path, people will be stuck on old versions. We test these upgrade paths on Facebook itself – if our team of less than 10 people can update 50,000+ components alone, we hope the upgrade will be manageable for anyone using React. In many cases, we write automated scripts to upgrade component syntax, which we then include in the open-source release for everyone to use.
Roadmap milestones:
AngularJS The team at google and community took what was once a small internal project and pushed it to new frontiers like mobile and large enterprise applications. However, it was never intended or designed for these situations when Miško first created it. With every pull request we modified AngularJS the best we could to fit our needs.
2016: The Panic Period Developers and managers alike started to freak out. The complete rewrite meant a doomsday scenario for their current AngularJS projects running in production. “How can we support this application in 3, 5, or 6 years from now?!”
Even worse, their was no clear migration strategy to port an AngularJS 1.X application to the new Angular 2.0.
What they found was a lot of frustrating new concepts and breaking changes with every release. It was at this point teams quickly started to turn their back on AngularJS for libraries like React. Developers wrote break-up letters to their once beloved JavaScript project.
Fun Fact: Called "Angular" because of the <> in HTML
CROSS PLATFORM
Progressive Web Apps Use modern web platform capabilities to deliver app-like experiences. High performance, offline, and zero-step installation.
Native Build native mobile apps with strategies from Cordova, Ionic, or NativeScript.
Desktop Create desktop-installed apps across Mac, Windows, and Linux using the same Angular methods you've learned for the web plus the ability to access native OS APIs.
SPEED AND PERFORMANCE
Code Generation Angular turns your templates into code that's highly optimized for today's JavaScript virtual machines, giving you all the benefits of hand-written code with the productivity of a framework.
Universal Serve the first view of your application on Node.js®, .NET, PHP, and other servers for near-instant rendering in just HTML and CSS. Also paves the way for sites that optimize for SEO.
Code Splitting Angular apps load quickly with the new Component Router, which delivers automatic code-splitting so users only load code required to render the view they request.
PRODUCTIVITY
Templates Quickly create UI views with simple and powerful template syntax.
Angular CLI Command line tools: start building fast, add components and tests, then instantly deploy.
IDEs Get intelligent code completion, instant errors, and other feedback in popular editors and IDEs.
FULL DEVELOPMENT STORY
Testing With Karma for unit tests, you can know if you've broken things every time you save. And Protractor makes your scenario tests run faster and in a stable manner.
Animation Create high-performance, complex choreographies and animation timelines with very little code through Angular's intuitive API.
Accessibility Create accessible applications with ARIA-enabled components, developer guides, and built-in a11y test infrastructure.
"And what’s worse is [Angular] feels like I’m not even using javascript at all. It’s more like a different language altogether." [source]
class HelloMessage extends React.Component {
render() {
return <div>Hello <x-search>{this.props.name}</x-search>!</div>;
}
}
class XSearch extends HTMLElement {
connectedCallback() {
const mountPoint = document.createElement('span');
this.attachShadow({ mode: 'open' }).appendChild(mountPoint);
const name = this.getAttribute('name');
const url = 'https://www.google.com/search?q=' + encodeURIComponent(name);
ReactDOM.render(<a href={url}>{name}</a>, mountPoint);
}
}
customElements.define('x-search', XSearch);