It seems to be becoming a kind of tradition that at the end of the year I write up a brief summary of the developments in web technology that year. I've done it for 2014, 2015 and 2016. Welcome to the 2017 edition! It's a nice way to demonstrate how the web platform is continuing to advance. As with previous editions, this focuses mainly on technologies that affect Construct. There have been hundreds of changes across browsers and the web platform through 2017, so in this post I'm just focusing on a few that are important to us and our users.
Construct 3 is out!
By far the biggest news for us is that we released Construct 3 this year! We launched in late March and by December we fully launched out of beta. This has been a huge amount of work for us and is quite an achievement. However we've spent all year blogging about this so I'll not dwell on it too much more! Still, it's an incredible sign of the maturity of the web platform that we've been able to port the entire Construct editor to the web — and it works great.
WebGL 2
Probably the biggest technology upgrade we've seen this year is WebGL 2, which brings OpenGL ES 3 level rendering capabilities to the web. This is now supported in Chrome and Firefox, is in development in Safari, and Microsoft are considering it for Edge (apparently development is "likely for a future release").
WebGL 2 doesn't immediately bring any major performance benefits or new visual effects to Construct, but it does have a range of new capabilities which are useful (such as non-power-of-two texture support), and some extra features to ensure optimal use of textures, render targets and so on. We patched Construct 2's runtime to use it to allow non-power-of-two textures. We're using it much more widely in the Construct 3 editor and the new Construct 3 runtime will also fully support it.
So in short this is mainly a nice-to-have, but it helps ensure the technology underpinning Construct 3 is modern, capable and optimal. It's also a great sign of the health and robustness of the web platform. Don't forget we seamlessly fall back to WebGL 1 if WebGL 2 isn't supported, so we still have broad compatibility.
WebAssembly
Previously asm.js had demonstrated the potential for near-native performance on the web. WebAssembly upgrades this to a full binary executable format for the web, with performance even closer to native. Amazingly, all major browsers shipped support for it this year — so it's gone from experimental to widely supported in just 12 months! This is a great achievement by all browser vendors and shows what's possible and how quickly things can move when everyone's on the same page.
We're not planning on rewriting our entire engine in WebAssembly (see this blog post for our rationale). We believe we can still get a lot more performance out of hand-written JavaScript, and the development process is much easier and faster, which is also a critical consideration. However this is another great tool to have at our disposal. We're already using WebAssembly modules in Construct 3 for audio encoding and decoding, and our measurements show these are more or less equivalent to native speed. There is also scope to use WebAssembly to accelerate components like physics, compression and more. With WebAssembly the gap between the web and native has closed considerably. Performance-critical cases like physics simulation can now run with little performance difference to native.
JavaScript performance improvements
WebAssembly doesn't mean JavaScript is done. As ever, all browser vendors are working hard to keep improving JavaScript performance. However one particularly notable milestone was Google's release of TurboFan — an entirely new JavaScript optimizer which shipped in Chrome this year. This took years of development and can now optimise JavaScript code even better, and has the architecture to bring even bigger improvements in future. JavaScript performance certainly hasn't been standing still!
Cordova export improvements
Cordova is the technology behind Construct's Android and iOS mobile exports. This year we launched our own mobile app build service in Construct 3, so you can build an APK directly from Construct 3 without needing any other third-party services. You can also use this to build Construct 2 Cordova exports. We also upgraded the Cordova export so you can do your own local builds with the Cordova CLI, providing an offline build option. Finally as ever, you can still use third-party services like PhoneGap Build if you prefer. These all provide extra options and flexibility, especially considering the Intel XDK build service shut down in the summer.
Construct 2 and Construct 3 now also support Android 5.0+ by default. This covers 80% of devices (and still increasing), and means the app can be powered solely by the built-in web view. This means we don't need to bundle Crosswalk any more, resulting in smaller APK files. Finally Construct 3 now only supports the faster WKWebView on iOS, guaranteeing your iOS apps are as fast as possible.
Other improvements
Here's a run-down of some other improvements we've seen this year:
- Chrome and Firefox now fully support the Opus audio format. Edge sort-of supports it, and hopefully Safari will add support too. Consequently we've moved to using WebM Opus exclusively in Construct 3, rather than needing dual-encoding like Construct 2 does.
- Firefox Quantum was released, with a radically improved architecture and huge performance gains. Browsers certainly haven't been standing still either!
- Safari gained support for WebRTC and Gamepads, so now supports multiplayer, remote preview and gamepad input!
- All major browsers now support or are working on Service Workers — a modern replacement for AppCache which allows web apps to run offline (including Construct's HTML5 exports).
- Both Chrome and Firefox now ship 64-bit browsers by default, ensuring maximum performance, reliability, security and of course access to a lot more memory.
- Cheap single-board computers like the Asus Tinker Board are getting good enough to run Construct games pretty well, and even Construct 3 itself.
- We shipped Xbox Live support in both Construct 2 and Construct 3, allowing HTML5 games to be published to the Xbox One. We'd never have dreamed of console support when we started in 2011!
- Adobe officially announced that Flash will be retired in 2020. The future is HTML5!
Looking to 2018
Our next big project is a rewrite of the runtime for Construct 3. We've got a keen eye on OffscreenCanvas, a new technology that allows rendering to WebGL from a Web Worker. This makes it much more viable to move the entire runtime in to a Web Worker, where it runs separately to any other work the browser does. It effectively removes the overhead of the browser, since the engine can keep running even if the browser is busy on the main thread. This is an intriguing possibility we'll be researching more throughout 2018, and we'll post more about it nearer the time depending on what we find.
Finally I think it's interesting to note that mobile hardware is now getting about as good as laptops. For example the iPhone 8 can beat a 7th-gen Core i5 Macbook Pro. For years mobile has been seen as a weaker platform that needs more attention for optimising, but it looks like with modern devices that's no longer the case. I think throughout 2018 people will start to recognise this. It may emerge that the slowest platform to deal with are low-end laptops with integrated Intel GPUs. These devices have always been woefully underpowered, and it's a low bar for mobile to beat.
It's going to be an exciting year and I can't wait to see where the web platform goes next. Happy new year!