Perhaps best known as the creator of Angular, Miško is on a fresh mission with Qwik. Recently reaching v1.0 and focusing on the ‘instant’ delivery of full-stack apps to end users, Qwik takes an interesting approach around ‘streaming’ JavaScript to the client only when needed.
Miško recently shared the full story of Qwik ▶️ on the Stack Overflow podcast, and we wanted to ask him a few questions here too:
What was the key inspiration behind Qwik?
I don’t think there was a “key” inspiration but an accumulation of things that made me realize the current approach doesn’t scale.
We did a lot of work making the Ivy compiler in Angular faster and more capable. While we had a lot of success, the speed wins were not obvious. While Ivy was optimized, the rest of the app was not, and at app startup the code ran without optimization because the VM hadn’t warmed up.
Google has an internal framework called WIZ that powers Google Search, Flights, and Photos. WIZ is great at not executing a lot of code on app startup, and it results in a better user experience.
The realization that code runs more slowly on app startup and that it’s proportional to the amount of JS to execute, is what led me to building a framework that would not need to execute code eagerly on startup. Qwik is the culmination of that goal.
What is Qwik’s biggest differentiator to other frameworks?
Qwik is resumable. Qwik can transfer its internal state from the server to the client, which means that the app can become interactive on the client without having to execute any app-related code eagerly.
Resumablity is at the heart of Qwik. Qwik apps can resume because Qwik knows how to serialize the state of the app and the framework. Other frameworks know how to serialize the app state but not necessarily the framework state.
(Editor’s note: Think Qwik goes into more detail on this.)
Some developers have strong opinions about the use of symbols like $
in names. Did you have any qualms and did you consider any alternatives?
Some people have visceral reactions to $
as it reminds them of jQuery or PHP.
Qwik needs a way to mark closures for extraction. JavaScript doesn’t have an easy syntax for doing this so we needed to come up with our own. $
communicates to the optimizer that it needs to perform code extraction at that location, and also communicates to the developer that special rules apply there too.
We chose $
as it’s one of the few non-alpha characters valid in function names and that does not change the pronunciation of the API.