Hacker News new | ask | show | jobs
by arghwhat 2538 days ago
> In data centers, loading data from networked server, where it's in memory, can be used over loading data from a disk, because disk is comparatively slow.

RDMA has no relevance to this discussion.

> A web app can load JavaScript assembler, which isn't much slower than a desktop app written in C.

This is incredibly wrong. An Electron app goes through many stages before code is executing with acceptable performance:

1. A full web browser loads.

2. JavaScript is loaded and parsed.

3. JavaScript runs interpreted, which is very slow. It is only here that the "application" starts.

4. After a while, the JIT may decide to compile some code. This is very resource intensive.

5. After compilation, you finally have some parts that have decent performance. However...

6. Gaurds fail (i.e. bad assumptions), and the code is deoptimized, running at slow speed again. JIT compilations may be tried again later with new assumptions, and if you're lucky, they might hold.

At #5, you have code that is as fast as it gets. It is nowhere near as fast as native code (any benchmarks you think of are synthetic and designed to show JavaScript as fast—it doesn't take a lot to shake out the issues).

For a native application, however, the process looks like this:

1. The application starts, and it runs.

Done. There is no parsing, interpreting, optimization. This single step is orders of magnitude faster than just #1 of the life of an Electron app.

> Bigger - and slower - parts of the web app can be loaded after the app starts interacting. So - at least in principle - no sizeable speed difference, which would blow somebody away.

We are talking a speed difference in orders of magnitude here. An electron application is not even done preparing Electron before a good native application is done loading.

And it's all fine and dandy that you can load heavy things later, but for a good native application has nothing to load later. It's done.

A fun comparison:

1. Slack cold-start on my machine: ~3 seconds before anything shows up, ~5 seconds until a main window with a loading indicator is visible, ~10 seconds till fully loaded and usable.

2. Telegram-desktop cold start on my machine: ~1 second till fully loaded and usable.

And telegram-desktop is a very slow native application! A speedy application starts in 250ms or less, and never waits after that.

> Advantage of web app is cross platform uniformity.

And the disadvantage is that they are are huge, resource intensive and pathetically slow.

We have very functional cross-platform toolkits, like Qt that telegram is based on.

1 comments

> At #5, you have code that is as fast as it gets. It is nowhere near as fast as native code (any benchmarks you think of are synthetic and designed to show JavaScript as fast—it doesn't take a lot to shake out the issues).

This. And to make matters worse, a lot of benchmarks start with something like, "To be fair to <the slower language>, let's cripple <the faster language> by implementing the programs using the paradigm favored by <the slower language>." If you want the real results, have an expert in each language implement the spec without looking at the other program.

Someone mentioned Photoshop being slow compared to Slack/VSCode. That is Apples to Oranges comparison if I ever saw one.

> And the disadvantage is that they are are huge, resource intensive and pathetically slow.

And don't work natively on any platform. You essentially program for the lowest common denominator and do not take advantage of any of the features provided by the platform -- especially accessibility. For example: Zoom In on any half-way decent editor increases the text size. Zoom In on VSCode (macOS) blows up the entire UI -- leaving little space for actual text. This is just one example -- I can line up many more.