Modern Script Loading
jasonformat.com
jasonformat.com
At my previous job we imported our Google Analytics data into caniuse.com [1] and noticed that >99.9% of our app users were in modern browsers. Same for the public facing website. There was one single visit from someone using IE, but the application wouldn't load for him anyway.
Using those stats we were able to also remove a bunch of polyfills. The next step we were planning was either using a CDN for dependencies or something like Pika [2].
Unfortunately both Vue.js and React/Preact [3] require a compilation step for a good experience IMO. Otherwise I'd just skip the compilation step altogether and write JS like in the old times.
[1] https://caniuse.com/feed/116
[2] https://www.pika.dev/about/
[3] https://preactjs.com - a library made by the TFA author :)
Node.js backend uses Pug for templating, each template includes a script template file. These template files are built with Make and load either a minified bundle (made with terser) or just a bunch of plain JS depending on the value of NODE_ENV.
Works great :)
I also tried DomZ, which is neat too [1]
We actually had full support for older browsers and even tested for them before that.
This was our SaaS-like application, btw, which was closed to the public. Btw, the public website also had a number of modern browsers close to 99%.
Trust me, if we actually needed extra support our sales team would have made us well aware ;)
EDIT: Also, this is sort of a statement. I'd rather let old browsers die. I think it's ok to say "no" to customers sometime. I want the web to evolve, might as well play a part on it, forcing people to upload their browsers, or letting their IT department know their outdated browsers are getting in the way of their productivity.
> There was one single visit from someone using IE, but the application wouldn't load for him anyway. (source https://news.ycombinator.com/item?id=21097946)
You can write tomorrow's JS and CSS today while explicitly supporting whichever of yesterday's browsers you know you need to, and have the delivered code improve over time as older browsers are phased out without you having to rewrite it.
<script nomodule src="https://polyfill.io/v3/polyfill.js?flags=always&features=default,fetch"></script>
to load polyfills only for browsers that need it- babel compiles async/await down to regenerator when using modules: true (at least for now) - the definition of “modern” browsers will change eventually and module/nomodule detection will not be relevant
Which is why I’d use ua sniffing: https://github.com/KidkArolis/jetpack/blob/master/docs/07-di...
For `babel-preset-env` specifically, it compiles whatever syntax is not natively supported by the browser versions you told it to target.
So, compiling `async/await` and compiling ES module syntax are separate things.