It is the most complicated NP hard problem that ever graced web development and literally stifling our progress on building a drop down box that updates all to other drop down boxes on the page.
Like, obviously your health bar is a separate component. But when your health bar updates, how does the other health bar over your characters head also reflect that change? Just drives me nuts, is there like a variable or something that they both subscribe to?
And if UE5 did solve this, why didn’t they even mention this technical feat in their demo? Web developers have entire conferences when this problem was discovered, but for UE5 to not even bring up this accomplishment makes me wonder, #conspiracy.
The DOM on the other hand is stateful, and is very slow to mutate, which is the core problem of high-level web dev and really not something developers have any control over.
This is not true or at least only deceptively so. If you think about "global state" in a game or more specifically in a rendering scene as "all of the objects in the scene" then the main difference is the lack of acceleration structures for the web. Most of the objects in a scene are never touched because AABB or some other structure allows you to cull large number of objects without ever actually touching them. If objects in the scene change, you definitely need to update those acceleration structures. Fortunately for games, those updates are quick and there are typically not that many of them.
This is why systems like Flutter, despite all their downsides, can be really snappy. They skip the DOM and all its baggage and just use their own "app-first" layout system.
Take css translate3d, it forces the browser to use gpu to handle those transitions.
At the risk of sounding even more ignorant, but could the DOM be pushed onto the gpu layer, where things happen so fast it doesn’t matter at all how often relayouts/reflows happen? Obviously it’s using the gpu to render, no doubt, but what is about website rendering that’s just that much slower than a 2d video game?
I guess I’m describing React’s circumvention of the browser to some degree. Ideally, we want something like React gone, and implemented at the browser level.
Some of it already is. The actual drawing-to-an-image happens on the GPU, so maybe that was a bit of a misnomer for me to point out in my last comment, but that's not the expensive part. Reflow is the browser deciding "here's everything on the page, here's all their CSS styles, and this one CSS style changed, or this new element got added, how does that affect everything else?"
Thing is, you're welcome to pull everything out of that reflow process! Through transforms and absolute-positioning, or the canvas, or WebGL, or whatever. And things will be a lot faster! But now you're taking on responsibility for a lot of stuff. Many of the benefits, in fact, that cause so many people to build on the web in the first place. The web has the most powerful and flexible and expansive UI layout system in the world. It's just that that comes with a cost.
The ideal scenario would be to have a "slimmed down" reflow mode that only does "app things" and doesn't get tripped up on "document things". However, that would be fundamentally incompatible with some parts of the web as we know it, and would fragment the platform. Here's an example of one of those weird pieces of baggage: https://wilsonpage.co.uk/preventing-layout-thrashing/. The browser doesn't know what you're going to do immediately after mutating the DOM, so it has to assume the worst in some cases.
Is it so hard? what gives?
Unpopular option but it's true. Binary protocols are both bandwidth efficient and processor efficient. Back in the day, when a 25 MHz processor and 8 MB RAM was the spec for a powerful UNIX workstation with GUI, stuff like XML and JSON was simply not an option.
Dom is too complicated. We really need a much simpler primitives pipeline optimized for performance.
The other demo that’s really impressive is Microsoft Flight Simulator 2020.
Perhaps there should be a fast alternative to the current web, where the biggest goal is to serve pages with lighting speed. It could be architected from ground up to come with built-in SPA support, that would load the pages in chunks while offering a smooth browsing experience. It could automatically adjust to the device and the network speed of the user, and have all the legacy cruft of the old web removed. So basically like AMP, but without Google's greedy fingers.
Yet the chances of that happening is probably zero, as where's the money in that. A secondary web just for power-users? Hmm, yeah let's see whose going to allocate resources maintaining that.
Edit: I just realised this is a parody website. Fair enough then, this is their editorial line!