Alternatives

Published: September 02, 2019
Edited: September 02, 2019

It is tempting to just use a major HTML framework that you already know – for example React, Angular or VueJS. But when you are targeting hardware with limited resources this is not often a good idea.

We at Metrological have been working with major parties that all fell into this trap. Their development teams had chosen something they already knew from web app development and started developing on their local machine. After a while (and being too far in) they tried running it on a Smart TV or settopbox and experienced:

  • Poor performance
  • Memory leaks
  • Out Of Memory crashes
  • Stability issues

We've often been asked to help out. Sometimes we were able to improve the situation slightly, but to be honest when you get to this point it's usually too late. The result of those projects failed to reach expectations.

In our opinion, HTML DOM is a bit of a black box when it comes to all of these issues. Lightning in contrast, has the benefit of using WebGL – almost directly speaking to the GPU. GPU memory usage is predictable at all times, and CPU memory usage is also more predictable if we are only dealing with javascript heap memory - not with HTML DOM Elements. The framework by itself offers amazing performance, but on top of that the framework allows to understand the performance of a page, allowing you to consider trade-offs for low-end devices. Please consider the following downsides of well-known alternatives.

React / Angular

  • HTML DOM rendering is too slow
  • HTML DOM is a black box when it comes to memory and performance
  • Virtual DOM by itself is slow as well (unless you tune it to perfection)
  • Lacks in terms of animations

React Native

  • Great performance, but not portable enough (WebOS, Tizen only support web-based apps)

PixiJS

  • Lacks CPU performance optimizations
  • Unsure about memory leaks/management
  • Lacks vital features, such as a good layout engine and an animation engine
  • Not a 'framework', only a render tree