The beginning of ActiveUI
Seven years ago, Quartet FS made a decision to build a front-end for ActivePivot, its in-memory analytical platform. Prior to this, it was only possible to connect to, and interact with, ActivePivot using Excel and employing the MDX query language. We needed a lightweight client, a user interface with which we could connect to ActivePivot from any workstation without prior installation.
This requirement led to the creation of ActiveUI, developed in GWT (Google Web Toolkit).
Screenshot of ActiveUI version 3
After all, ActivePivot is developed in Java, therefore developers and consultants could easily develop for both the front end and the server application. Also, some of our clients, especially those in the banking sector, were still using old versions of Internet Explorer such as IE6, IE7, or IE8, because of internal policy constraints.
Moving away from GWT
Although an ideal choice initially, GWT became less appropriate as time went by. In 2012, Google announced that GWT would be transformed from a Google project into a fully open-source project. As the release pace decreased and release dates kept being postponed, the technology became less up-to-date with its environment.
The rise of Node.js
- Manage project dependencies with tools like npm
- Configure projects’ workflows with builders such as Gulp
- Package the final application with bundlers like webpack
Rolling weekly downloads of npm packages – Credit: http://blog.npmjs.org/post/143451680695/how-many-npm-users-are-there
At the beginning of June 2016, the number of packages stored in the npm registry reached approximatively 288.000 packages with about 330 new packages added daily. In comparison, the 11-year old and popular Maven Central repository for Java has around 146.000 packages with an average of 80 new packages added daily. Since 2014, npm has become the largest repository across all languages and it is increasing its dominance at an astonishing pace.
Module counts Repository comparison – Credit: http://www.modulecounts.com/
Google Chrome’s dominance
Providing incremental updates and a major release every 6 weeks, Chrome has rejuvenated the browser scene and became widely adopted. Backed by the Google V8 engine, it surpassed Internet Explorer’s share during 2012.
W3C browser monthly usage share – Credit: https://www.w3counter.com/trends
Internet Explorer has become much less popular and by the end of 2015 the older versions of Internet Explorer (such as 6, 7 and 8) had become almost completely obsolete.
Internet Explorer and Microsoft Edge Usage share – Credit: https://www.w3counter.com/trends
The limits of GWT
The technology itself, in the context of our project, has some drawbacks. With more than 170.000 lines of Java code (excluding blanks and comments), it takes the application about 15 minutes to fully run the necessary tests and compile all the browser permutations with 16GB of RAM and 4 hyperthreaded cores (Intel i7). Debugging in Dev Mode is slow, supported only by old browsers and it quickly triggers ‘out-of-memory’ errors. The newly introduced “super dev mode” has a lot of incompatibilities and bugs when used with Internet Explorer or Firefox. This was making it harder to “sell” the technology to developers.
Finally, the architecture that was selected to build ActiveUI was not optimal. It required to have a server that ran specifically for the application. Any call would transit through this server. This meant that a request from the browser to ActivePivot or its response had to be serialized, sent through the network and deserialized twice, creating unnecessary overhead and latency and increasing the probability of a memory issue or network problem.
A Complete Rewrite
For all the above reasons, we decided to completely rewrite the ActiveUI application, changing not only the architecture of our product but also the technology stack.
Look out for the next article in this series, where I will share the challenges involved in choosing a new framework when so many options are available and explain how we ended up choosing the right one!