Creator of https://rpgplayground.com here, which features game tech running in the browser, so I definitely disagree with this statement :).
Here is a list of benefits that I see:
1. One build runs everywhere, Windows, Linux, Mac, Chromebook (used a lot in schools), Android, iOS, I even have someone running it on an XBox web browser.
2. No download and install, so barrier to entry is way lower. Also great for locked down systems. "Wanna play my game? Play it here"
3. Everyone runs the latest version.
4. Easy update scheme: I update the website, and everyone gets the latest version.
5. Not giving away % of revenue to platform owners.
I code in Haxe, so I could easily build a native version for any platform. But I am a one man shop, and maintaining all those versions and updates is way more work.
The world is all about trade-offs, and claiming PWA's are either superioir or inferior is a very naive way of decision making.
This also exists outside of web development (e.g. Qt)
>2. No download and install
The client must download the source code, same as any other platform. The installation part occurs when the user had to first install a web browser before being able to use your software. Outside of a monstrous application, installation is almost instantaneous these days.
>3. Everyone runs the latest version.
Nothing new here. For instance web browsers: They download in the background and silently install upon next restart. Also, running the latest version isn't necessarily an advantage, especially if it wasn't the end user who installed that latest version or otherwise has no control over whether it gets installed or when.
>4. Easy update scheme: I update the website, and everyone gets the latest version.
This might be the only advantage. Though, if such deployment is a requirement, setting up the necessary servers to facilitate the communication with the client isn't nearly as difficult or complex as it was even 5 years ago.
>5. Not giving away % of revenue to platform owners.
Unless you're talking about an iPhone app, then this isn't a requirement.
For games, sure, native is much better. But for any other app, which doesn't require a lot of rendering and simulation, PWAs are actually a great option.
You can have one codebase for both platforms. Through the use of Cordova you can actually use native apis very easily. Also, using PWAS gives you access to the thousands of useful packages in the npm ecosystem. How about the tens of thousands of themes you can use to enhance your app? Or things like Vuetify or TailwindUI to quickly craft attractive UIs
If you're not making an app which needs a lot of computational power I would say a PWA is a great option.
You as much as glance at a web page, and it causes a repaint and reflow of the page.
Everything else stems from that.
I mean, there ARE downsides to using web tech, but as a flexible layout system that can gracefully describe very large ranges of targets I have not found it's equal.
You probably mean literally every native system. Because it's not like native toolkits didn't exist on the same systems as HTML+CSS.
> a flexible layout system that can
There's significantly more that's required of UI than just layout. And HTML+CSS are horrendously bad for anything beyond a static page of text with images.
For layouts, I've used various toolkits including Qt, Java AWT and SWING, and Visual Basic way back when. Creating a GUI that scales gracefully on these, in my experience, is time consuming and highly difficult. Most everyone favors static layouts because of the challenges. Learning responsive design on a web page takes a bit of time but it has the tools to reasonably manage a variety of layouts on a wide range of screens.
I would even accept an individual native system's layout manager as a counter argument of something that is at least competitive. It really isn't an easy problem.
These facts are obvious to anyone who has seen anything else besides just HTML+CSS.
Adding a simple box shadow on an element will trigger reflow in most browser engines [1] Efficiently animating anything that as much as breathes at layout is impossible. Efficiently displaying anything beyond a few hundred elements on a page? Equally impossible (and there are no virtual lists on the web).
But the actual argument is this: given "the most advanced and powerful layout system in the world that has no parallels anywhere else, it's so unique", why is it that most CSS frameworks struggle to implement anything beyond the most basic of controls (buttons, links, may be tabs)?
> Creating a GUI that scales gracefully on these, in my experience, is time consuming and highly difficult.
Ah yes. "Scales". Because this is the area that only HTML and CSS have to deal with. Because, you know, resizing windows didn't ever exist since the earliest days of GUIs.
However, being able to work at different sizes isn't what "scaling a GUI" means, or should mean. Desktop apps have been able to work at different sizes for close to 40 years now.
https://news.ycombinator.com/item?id=27576937
Opening it up, fresh, it's taking 49.9MB of memory for me. For a tab I've had open for a while, of the same page, it's doing 60MB. And that's despite it not being a "web application": it's barely a web page! So here I am, doing exactly what everyone claims I should be doing, and using a web browser for my web content. And one of the most spartan sites on the internet, Hacker News, has mildly-active threads that take up 60MB of memory. For the tab. Not for the browser, for the individual tab.
The best Electron application I've ever came across launched with 100MB of memory consumption and pegs a CPU core. That's not even getting into how nearly every single Electron application puts 150MB+ on your hard disk, because that in particular isn't incredibly relevant.
I'm sure there are many like you who want applications to be frugal with memory and cpu consumptions, but I think most users don't really give a damn.
There are bloated web apps that should be improved for sure, but they also exist with "native" languages.
The issue has always been runtime computations, PWAs are perfomant if you keep them low.
I wrote myself an ebook and webnovel reader PWA which tracks progress by pixels and percentage amongst other things. There is no noticeable difference between fbreader (native) and this angular app. I get the same amount of drain per hour as I repeatedly verified when I switched.
I can only applaud Apple. Please do that Cordova stuff on your own phone. There are enough frameworks that aren’t that bloated if you really don’t want to develop for a platform
All things which you can implement in a pwa. Do you have any experience building native, hybrid or pwa apps?
Slack and Spotify are both resource-hungry applications that would benefit immensely from being native applications. Yet we are stuck with the worlds laggiest IRC client and an application that you’re actually better off running in the browser so it doesn’t destroy your SSD (again).
Electron packages up its own browser and something akin to a node process along with your code. There is effectively no sandbox on Electron. Last I played with it the minimum bundle size is ~80MB, depending on the platform and feature set and it runs somewhat larger on disk after install.
A PWA uses the existing browser on your device and must abide by the browser's sandbox and limitations. It's basically running as a page tab but skinned to look like a native application.
For both Slack and Spotify, I would prefer a PWA over electron. They work fine within the sandbox and then it's simply smaller/faster and your browser, the one major dependency, updates separately. That's less bandwidth to keep everything up to date, less resources both on disk and in ram. Given you advocate using the browser for Spotify, it seems that you would prefer it to be a PWA as well.
There are pros and cons to both approaches, but from a resource perspective, PWAs are potentially quite lean. The last PWA I published has a download footprint of about ~800k, uses ~3MB on disk, and ~30-50MB of ram when running, and ~1s load time on my phone. It's pretty much a big ball of javascript, light on pics or media other than the icon set - but runs an inventory system and allows some modest camera assist from the device. Contrast that to a React-Native application I produced of the same complexity at a previous employer, it was 30MB download, 50MB on disk, and even more ram, and 3 s load time on my phone. PWAs potentially open faster than similarly complex native app if the browser is already running and in memory - which is a common case.
Ideally I’d like us to stop trying to force every single application into the browser when they don’t belong there. I prefer to use Spotify on web over the electron app only because it’s only marginally less-bad there, I’d prefer it more if it was a native application like Apple Music is because all my music is on disk anyways.
https://news.ycombinator.com/item?id=27601802
On a whim, I also opened the front page of reddit (again, in my web browser that's already opened) and the tab is taking 140MB fresh.
[0] I'm aware of web apps that use local storage and other strategies to keep user data out of a silo, but these are the exception not the norm
Apple controls the iPhone ecosystem. That's how they're worse. It's the single most dictatorial move our industry has seen, and it's damaged our industry to the point we have to go through a single company to reach consumers.
The minute native Rust/WASM with custom painted UI and the ability to call device APIs lands, it's game over for app stores. Or it would be, if Apple would allow this stuff to exist on their platform. (They won't.)
You can't blame every single problem on "the iPhone ecosystem."
I certainly don't like the iPhone or its software; this doesn't mean that it's somehow responsible for PulseAudio being bad. Not everything can be tied to the iPhone. Really!