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

(lorenstew.art)

Comments

speedgoose 11 hours ago
> 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 11 hours ago
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 13 hours ago
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 11 hours ago
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 11 hours ago
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.

CraigJPerry 11 hours ago
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.

delbronski 11 hours ago
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.
chanon 11 hours ago
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.
evertheylen 11 hours ago
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 11 hours ago
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 11 hours ago
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 10 hours ago
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.

alex-moon 8 hours ago
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.

Akhu117 11 hours ago
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
maelito 9 hours ago
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 ?

samwillis 10 hours ago
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.

ozim 9 hours ago
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.

mrasong 12 hours ago
This post made me open up the Svelte docs again.
hi_hi 12 hours ago
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.

gloosx 10 hours ago
> 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?

pu_pe 11 hours ago
Excellent work, I love experiments like these. Unsurprisingly the site is also lightning fast to load.
willsmith72 10 hours ago
> 40ms round-trip time

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

ale 11 hours ago
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.
todotask2 9 hours ago
Reference to SpeedCurve, they have a skip link on their home page yet nowhere id="main" was found.
muzani 9 hours ago
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.
koolala 12 hours ago
Can Marko run static without a server? Can any of these?
h33t-l4x0r 11 hours ago
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 11 hours ago
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?
forrestthewoods 11 hours ago
Great post. Im moderately annoyed that on Safari mobile it has an incorrect and super annoying horizontal scroll.
kburman 10 hours ago
Any reason to not include native application given how important mobile experience was.
antiloper 10 hours ago
> ... all deliver instant 35-39ms performance. The real differentiator? ...

Thanks ChatGPT for your valuable slop. Next article.

oulipo2 9 hours ago
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
bschwindHN 12 hours ago
(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.

Mashimo 9 hours ago
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.

efilife 11 hours ago
> 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

android521 10 hours ago
it doesn't matter. in 10 years, few people will access websites directly.
IlikeKitties 12 hours ago
> 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 10 hours ago
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.
t00 10 hours ago
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.