News for hackers. Stuff that matters.
Re:Virtual DOM is pure overhead (2018) by madeofpalk on Tuesday June 29, 2021 @10:04AM (#27675904)
> this article categorizes virtual DOM as a “meme” that is “pure overhead” that only wins against a “strawman”

The part that I think the article misses is that VDOM is just an implementation detail of React. No one actually really cares about it, and its not the reason why people use React.

Re:Virtual DOM is pure overhead (2018) by jchw on Tuesday June 29, 2021 @10:14AM (#27676033)
That’s the weird part. I agree with you, but then at the end, they say the important part:

> It's important to understand that virtual DOM isn't a feature. It's a means to an end, the end being declarative, state-driven UI development.

I find this bewildering because it makes me feel like the article does actually understand React. It realizes it was faster than frameworks it initially competed against, it understands that virtual DOM is a means to an end. But then at the same time it is classified as a meme that only wins in performance against things nobody would ever do.

In a way, writing it like this makes it harder to critique.

Re:Virtual DOM is pure overhead (2018) by vinnymac on Tuesday June 29, 2021 @10:22AM (#27676154)
Strangely, after having read the article, now I am wondering why the React team can't just borrow some of these optimizations. It would take a massive overhaul, but it's not like React has ever stood still, it's constantly evolving and changing. I wouldn't be surprised if the under the hood stuff continues to change in a huge way, just like it did when React Fiber was completed.

At the end of the day, I've never spoken to a developer who was using React because it was fast, but because it was easy to use and understand.

Re:Virtual DOM is pure overhead (2018) by chrismorgan on Tuesday June 29, 2021 @10:58AM (#27676738)
React’s changes over time have always been broadly compatible, and the same under the hood, just presented and manipulated a different way at the surface. Migrating to anything like Svelte would be a radical and extremely incompatible change on multiple fronts. It’s never, ever going to happen; the closest you’ll get will be another layer on top of React that embeds something like Svelte—such as https://github.com/Rich-Harris/react-svelte.

Svelte’s approach requires detailed knowledge of the structure of state, and requires compilation: components’ <script> blocks are not written in JavaScript, but rather a language with the same general syntax but different semantics, and some places where JavaScript is too flexible to be tractable get replaced with special template syntax (like {#each} instead of for-loops or Array.prototype.map). Svelte cannot be implemented as a JavaScript library (I disqualify eval()). Svelte is also deliberately severely limited in what it can express in various places, whereas React gives you the full power of JavaScript (for better and for worse).

You could perhaps implement an optimising compiler for a small subset of React components that avoid problematic patterns and are written in TypeScript with proper specifications of the types of state and props; but if you considered it unacceptable for this compiler to change the component’s semantics, I think you’d be surprised at how little serious React code in the wild could actually be supported. Even simple loops might be out of reach. The Svelte approach can’t be a progressive enhancement, it’s an all-or-nothing (at the component level).

Re:Virtual DOM is pure overhead (2018) by dmitriid on Thursday July 01, 2021 @06:42AM (#27697889)
> <script> blocks are not written in JavaScript, but rather a language with the same general syntax but different semantics

One could argue that React's hooks are the same: they look like JS but change JS semantics.

However, your point is still valid.

Re:Virtual DOM is pure overhead (2018) by chrismorgan on Thursday July 01, 2021 @05:38PM (#27705193)
Nah, React hooks are still JavaScript—they’re library functionality, executed directly as JavaScript.
Re:Virtual DOM is pure overhead (2018) by engineeringwoke on Tuesday June 29, 2021 @10:53AM (#27676654)
I was quite involved in the project around 2017-2018, and this is just what I feel, but I think the API is pretty much hardened at this point. Context was a disaster. Hooks are useful but more difficult to reason about compared to classes. They have said straight out that JIT optimizations don't work well when the main pattern was to heavily manipulate a singular state object, and that was a culture that I think they failed to change with Hooks.

If Facebook comes up with something else, I think it will be something new. Maybe that is Reason, or something that abuses WASM/Rust in the core architecture. Who knows. The project has a lot of tech debt, and the ecosystem has changed quite a bit as well.

Re:Virtual DOM is pure overhead (2018) by handrous on Tuesday June 29, 2021 @11:58AM (#27677749)
Context and hooks both feel very much like "I'm being paid to work on this but it's basically done... so... guess I'll find something to do" additions. The latter especially.
Re:Virtual DOM is pure overhead (2018) by alserio on Tuesday June 29, 2021 @05:52PM (#27682207)
Hooks are a big shift towards a more fine grained reactive programming in terms of API. However even vdom vs reactivity systems is not an obvious choice, since they have their tradeoffs. The same conflict is much more visible in vue. Thankfully, there are a lot of alternatives that explore this problem space
Re:Virtual DOM is pure overhead (2018) by cwillu on Tuesday June 29, 2021 @10:11AM (#27675995)

    It's important to understand that virtual DOM isn't a feature. It's a means to an end, the end being declarative, state-driven UI development. Virtual DOM is valuable because it allows you to build apps without thinking about state transitions, with performance that is generally good enough. That means less buggy code, and more time spent on creative tasks instead of tedious ones.

    But it turns out that we can achieve a similar programming model without using virtual DOM — and that's where Svelte comes in.
Re:Virtual DOM is pure overhead (2018) by dceddia on Tuesday June 29, 2021 @12:23PM (#27678108)
> No one actually really cares about it, and its not the reason why people use React.

This is probably true today, especially for newcomers, but the article is from 2018 and the context of the time period is significant here, I think.

Having used React since around 2015, there definitely was an aire of "React is fast because of the Virtual DOM!" and it was one of its big selling points early on. I can remember reading this article and nodding along, but reading it now evokes more of a sense of "I remember when VDOM mattered". I think around that time was maybe the tail end of VDOM being a big selling point, and this article might've even precipitated that, to a degree.

As React's usage has grown, I think the significance of VDOM as a feature has fallen by the wayside in favor of things like "everyone uses React so we use React too." The competition between frameworks at the moment seems less about performance and more about their approaches and tradeoffs.

Re:Virtual DOM is pure overhead (2018) by fosefx on Tuesday June 29, 2021 @10:16AM (#27676058)
> The part that I think the article misses

The article is about VDOM and nothing else. It does not "miss" the part about why react is popular, it simply does not discuss it.