Register
Angular 2 vs React: Choosing a Javascript GUI framework

sirepo-srw-young-small.png

Sirepo ( detailed image) is a GUI for software simulations. What you're looking at is Young's Double Slit Experiment, which demonstrates the wave and particle characteristics of light. Sirepo fronts three different accelerator physics codes: Elegant, SRW, and Warp.

The bummer is that we started with Angular 1, which unfortunately is going to become obsolete. There are many issues in Angular 1, which have been resolved in Angular 2. Unfortunately, the transition to Angular 2is non-trivial. Given our declarative design, I'm pretty confident it wouldn't be too terrible, but it still would be a lot of work.

So I've been looking at other frameworks. The obvious one is React, which isn't a framework according to many people, and that's the problem. React applications require a lot of work, which is disappointing. Many articles talk about how React is easier to understand, because there's no "magic" like Angular 2. I consider React's JSXto be magic. The other magic item is that you can't simply do the obvious with data flows. That would be a mess, and so you have to get a "state container", like Reduxor Flux.

Many people say React is faster than Angular 2, but when you look at the data, the opposite is true. The most comprehensive web benchmarks can be found at Stefan Krause'sblog: JS web frameworks benchmark - Round 5. Angular 2 is faster than React, but they are not the fastest, which currently is Inferno.

The important thing about the benchmarks to me is that Angular 2 is demonstrably faster than Angular 1. We are starting to see lag in tab switching, and that's annoying. That's another reason why we're considering switching to another framework.

Architecture

The reason people call React a "library" instead of a framework is that React's data model is primitive. React is fast because it uses "one way binding", which basically means you can only bind value from the app's data to the template renderer, but not reverse. If someone wants to update a field, they have to do it manually:

React doesn't directly bind

Netflix did. And, that's the rub with React.

Via Rob 01/29/2017