I built the same app 10 times: Evaluating frameworks for mobile performance

(lorenstew.art)

Comments

speedgoose 28 October 2025
> This isn’t a todo list with hardcoded arrays. It’s a real app with database persistence, complex state management, and the kind of interactions you’d actually build for a real product.

Can you also tell ChatGPT to fix the layout so the table just above this message is fully visible without horizontal scrolling?

panstromek 28 October 2025
This is great write up. I especially appreciate the focus on mobile, because I find it's often overlooked, even though it's dominant device to access the web. The reality of phones is brutal and delivering a good experience for most users in SPA-style archictecture is pretty hard.

"Slowness poisons everything."

Exactly. There's nothing more revealing than seeing your users struggle to use your system, waiting for the content to load, rage clicking while waiting for buttons to react, waiting for the animations to deliver 3 frames in 5 seconds.

Engineering for P75 or P90 device takes a lot of effort, way beyond what frameworks offer you by default. I hope we'll see some more focus on this from the framework side, because I often feel like I have to fight the framework to get decent results - even for something like Vue, which looks pretty great in this comparison.

0xblinq 28 October 2025
As somebody using Svelte for a real production application, I can only 100% agree with their recommendations regarding Svelte because of the overall dev experience is unmatched. It just feels right. Easy. Simple. And I'm not even considering performance here as another benefit.

I usually make the analogy of a video game, where you can pick the difficulty. Svelte/SvelteKit is working in the "easy" difficulty level. You can achieve the same end result and keep your sanity (and your hair).

jtrn 28 October 2025
In our small firm, we did a review of the usual suspects when deciding which of the big players would be the right horse to bet on for the future when planing to rewrite our core application.

We ended up with Vue vs. Svelte and landed on Vue/Nuxt since we agreed they have the most intuitive syntax for us, and it seemed like the one with the best trajectory, technologically speaking.

That was one year ago. It's not moving as fast as I would hope, but I still think Vue/Nuxt is a better choice than React at least. This article seems to support this somewhat.

Also, I did a review (with the help of all the big LLMs), and they seem to agree that Vue has the syntax and patterns that are best suited for agentic coding assistance.

The wins with regards to "First Contentful Paint" and "size" is not the most important. We just trust the Vue community more. React seems like a recipe for a bloated bureaucratic mess. Svelte still looks like a strong contender, but we liked the core team of Vue a lot, and most of us just enjoy Vue/Nuxt syntax/patterns better.

ChrisMarshallNY 28 October 2025
This is a really good article. It’s not my bailiwick, but it must be extremely useful for folks that work in this space.

> When someone’s standing in front of a potential buyer trying to look professional, a slow-loading app isn’t just an annoyance. It’s a liability.

I liked reading that. It’s actually surprising how few developers think that way.

> Mobile is the web

That’s why.

I know many people that don’t own a computer, at all, but have large, expensive phones. This means that I can’t count on a large PC display, but I also can reasonably expect a decent-sized smaller screen.

I’ve learned to make sure that my apps and sites work well on high-quality small screens (which is different from working on really small screens).

The main caveat, is the quality of the network connection. I find that I need to work OK, if the connection is dicey.

delbronski 28 October 2025
Before starting new projects I would always do research like this and try new things. But I’ve stopped looking at what is out there. I have landed on Django/React(vite). I have mastered this and can go from idea to app running in production in a matter of hours. I know there are better, faster, and more modern alternatives. But I just don’t care anymore. Maybe I’m just web framework jaded. I rather learn something else than look through the docs of yet another web framework.
CraigJPerry 28 October 2025
Ignoring the content of the post for a second (which IMO was excellent), the quality of the writing here is remarkable. This is a dry technical topic at heart and yet i enjoyed reading that entire report. It was as informative as i could hope for whilst still being engaging.

What a joy to read.

chanon 28 October 2025
The author noted that Solid is very similar to React but with a simpler mental model. This has been my experience as well. And its faster too.
Akhu117 28 October 2025
I am the only one shocked that no comparison or test or thinking of native development? Web dev are this closed to other languages? I came here for this kind of comparison because of the article. headline
evertheylen 28 October 2025
Interesting to see Marko and Solid topping the performance metrics. Ryan Carniato* was a core team member of Marko and started Solid. I wouldn't be surprised if SolidStart can eventually lower its bundle size further.

*) https://github.com/ryansolid

gethly 28 October 2025
I prefer to use whatever I'm more comfortable with than something that is measurably the fastest horse in the stable. Trading dev time, skill and comfort for few kb of memory and few ms of speed seems pointless to me.

By the way, my "horse" of choice is Quasar(based on Vue) and has been for years now.

grebc 28 October 2025
Thanks for posting, a lot of effort went into that and I think the quality shines through in the write up.

I write pretty lean HTML/vanilla JS apps on the front end & C#/SQL on the backend; and have had great customer success on mobiles with a focus on a lot of the metrics the author hammers home.

econ 28 October 2025
I believe the biggest performance hit lives in je inability to force reload a cached file with js (or even html(!)).

Setting a header only works if you know exactly when you are going to update the file. Except from highly dynamic or sensitive things this is never correct.

You can add ?v=2 to each and every instance of an url on your website. Then you update all pages which is preposterous and exactly what we didn't want. As a bonus ?v=1 is not erased which might also be just what you didn't want.

I never want to reload something until I do.

maelito 28 October 2025
If I trust this article, React is a (relative) catastrophe.

Can someone explain why ? What precisely would make React sooo slow and big compared to other abstractions ?

alex-moon 28 October 2025
I greatly appreciated this article and have found the data very useful - I have shared this with my business partner and we will use this information down the road when we (eventually) get around to migrating our app from Angular to something else. Neither of us were surprised to see Angular at the bottom of the league tables here.

Now, let's talk about the comments, particularly the top comment. I have to say I find the kneejerk backlash against "AI style" incredibly counter-productive. These comments are creating noise on HN that greatly degrades the reading experience, and, in my humble opinion, these comments are in direct violation of all of the "In Comments" guidelines for HN: https://news.ycombinator.com/newsguidelines.html#comments

Happy to change my mind on this if anyone can explain to me why these comments are useful or informative at all.

mrasong 28 October 2025
This post made me open up the Svelte docs again.
gloosx 28 October 2025
> when I built the first implementations and started measuring, something became clear: the issues I was seeing with Next.js weren’t specific to Next.js. They were fundamental to React’s architecture.

So here some obscure Next.js issues magically become fundamental React architecture issues. What are these? Skill issues?

samwillis 28 October 2025
This is a great comparison, but it depends so much on what sort of website or web app you are building. If you are building a content site, with the majority of visitors arriving without a hot cache bundle size is obviously massively important. But for a web app, with users regularly visiting, it's somewhat less important.

As ever on mobile it's latency, not bandwidth, that's the issue. You can very happily transfer a lot of data, but if that network is in your interactive hot path then you will always have a significant delay.

You should optimise to use the available bandwidth to solve the latency issues, after FCP. Preload as much data as possible such that navigations are instant.

willsmith72 28 October 2025
> 40ms round-trip time

In that case how can you possibly get 35ms FCP? Am I missing something?

ozim 28 October 2025
Let’s be honest: “desktop-only” is usually an excuse to skip performance discipline entirely

No, it is excuse not to invest money in places where users won't pay.

For questions about mobile - yeah we get requests for showing it on mobile but app in app store is hard requirement, because of discoverability. People know how to install app from app store and then they have icon. Making PWA icon is still too much work for normal people.

I would need "add to home screen" button in my website that I could have user making icon with single click, then I could go with PWA.

hi_hi 28 October 2025
I'd be interested in seeing React Native in this comparison.

I'm not overly familiar with it, but we use it at work. I've no idea if I should expect it to be quicker or slower than something like Next.

efilife 28 October 2025
> This isn’t just an inconvenience. It’s technofeudalism.

> This isn’t a todo list with hardcoded arrays. It’s a real app with database persistence (appears twice)

this article was written by ChatGPT. I'm tired

oulipo2 28 October 2025
Interesting, in my case I'm using Capacitor (since I need bluetooth and it's not well supported across browsers), and I want the app to be able to work offline too for some features, so I don't really care about the bundle size (it ships with the native app) and I prefer SPA than MPA so I can build it once and ship it with the code
forrestthewoods 28 October 2025
Great post. Im moderately annoyed that on Safari mobile it has an incorrect and super annoying horizontal scroll.
todotask2 28 October 2025
Reference to SpeedCurve, they have a skip link on their home page yet nowhere id="main" was found.
pu_pe 28 October 2025
Excellent work, I love experiments like these. Unsurprisingly the site is also lightning fast to load.
ale 28 October 2025
Comparing something like next.js to other frameworks doesn’t make much sense anymore given that most webdevs choose DX and easy deployment above anything else. Vercel’s growth is proof of that.
ochre-ogre 29 October 2025
Any reason the url is '10-kanban-boards'? I noticed this when I copied the url to share.
kburman 28 October 2025
Any reason to not include native application given how important mobile experience was.
IlikeKitties 28 October 2025
> The web is mobile. Build for that reality.

Ugh. That thinking is what gets you things like mandatory login via apps for your desktop. And not every application makes sense on a phone. And some Web Applications just require low latency high bandwidth internet to work properly.

RayFrankenstein 28 October 2025
The guy is such a web zealot that he refuses to make the sensible engineering tradeoff that favors speed and offline capabilities over platform ubiquity. Most sane people would write a native app for this sort of thing if money was on the line.
koolala 28 October 2025
Can Marko run static without a server? Can any of these?
antiloper 28 October 2025
> ... all deliver instant 35-39ms performance. The real differentiator? ...

Thanks ChatGPT for your valuable slop. Next article.

muzani 28 October 2025
I'm surprised there's no mention of Flutter. If the goal is mobile performance, Flutter would be top of mind - you can build to both native apps and web.
h33t-l4x0r 28 October 2025
150kb downloads almost instantly, even on 3G. Most websites have an image bigger than that somewhere on their homepage. It's not worth changing how I work.
pbreit 28 October 2025
Seems overly concerned with bundle size which I'm not sure really ever matters? Certainly smaller is better but is it that big of an impact?
bschwindHN 28 October 2025
(I'll be that guy since the article emphasizes a good mobile web experience so hard)

You might want to fix your horizontal scroll on mobile. I should basically never have a full page horizontal scrollbar on a page that is mostly just text.

tripu 29 October 2025
“Next-gen frameworks [Marko, SolidStart, SvelteKit, Nuxt] deliver instant performance. […] The real performance story isn't splitting hairs over 3ms differences, it's the massive gap between next-gen and React/Angular.”
Mashimo 28 October 2025
This made me look at our current app, it's a whooping 10MB just to get on the landing page. Build with Angular.

.. creating a maintenance issue right now.

android521 28 October 2025
it doesn't matter. in 10 years, few people will access websites directly.
t00 28 October 2025
Am I missing something here? The mobile SPA app can be deployed using tools like capacitor to a device and the framework along with all static content is loaded into the app bundle. In such case it makes no (realistic) difference which framework is selected and it matters more how the background/slow transfers are handled with data-only API requests, possibly with hosted images. With the background workers PWA can be built as well, streamlining installation even more.