Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Seeing Servo and full-fat Electron [1] both at 100 MB made me wonder if that's the minimum for an "Everything bagel" browser engine that does WebRTC, video playback, etc., etc.

How big is Ladybird?

[1] I believe you can make Electron smaller by cutting parts of Chromium out, but the default is around 100 MB



There are ways to slim it down, but WebRTC and video playback would probably be one of the first things I'd remove if I were looking to do that!

The other obvious target is the JS engine. IIRC V8 is 90mb just by itself. I don't think SpiderMonkey is quite so large but definitely still in the 10s of megabytes. A slower simpler JS engine (QuickJS, hermes, etc) could be quite a bit smaller.


That however would limit the browser to small audiences. Many users won't accept movies not playing and many sites require a JavaScript engine with all those optimisations, even SpiderMonkey loses too much in that space.

Binary size however is less of an issue for most users.


Yeah, I think these kind of setups don't make much sense for the main "browser application that end-users use" use case. They can make a lot of sense in the Electron "I'm wrapping a browser to use as an app framework" use case though.


Meanwhile Lua is under 200kb. Imagine if you could use it as a browser language, no more bloat and churn.


QuickJS is about 200kb as well and has similar performance to Lua, it's not about the language itself. V8 performance is closer to C in some areas.


It's not minimum. Custom WebKit builds could weight less, depending on features. Also Sciter is more lightweight.


Is some kind of a browser microkernel possible? Could you ship, say, JS Canvas support in a separate optional module?


I've done something like that in my TUI browser:

https://codeberg.org/bptato/chawan/src/commit/3f2fffd882ff47...

It just spins up a background process when a canvas context is created and sends drawing commands through IPC. As a result, you can rm the 970k canvas binary (most of it is just Unifont) and with some luck you will only break canvas rendering.

Of course this only works for things that are relatively self-contained. So you can add/remove image decoders or protocol handlers without recompiling (the main binary has zero networking code), but the JS API is still baked in.

(I imagine you could also implement some less performance-sensitive APIs in JS and load the bytecode on demand, but I haven't tried.)


A separate module that is configurable at build time would probably be doable. A separate module that is loaded at runtime probably isn't feasible.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: