Hi Scotty, thanks for your response!
Covering all your points would probably be a new article, but I will try to at least dive into some of them.
“I’m a little skeptical about how much this will really increase performance.”
This is no theory-crafting. The neo.mjs framework is online and you can create your own benchmarks.
“how compiling JSX or angular templates is poor for user experience. That compilation happens at build time — it doesn’t effect the end-user at all.”
Correct, in current frameworks / libs this happens at build time. With the design goal that a new framework (at least the dev mode) should run directly as it is inside your browser, there is no build time at all. In this scenario, templates would really slow down the performance. There is one more benefit of not using them: when using templates, you basically need to create the union of all possible states. This can easily become a mess for big / complex components with a lot of if / else statements. In neo, you only define the intersection and add everything else dynamically as needed. This allows you to do really advanced dom structure changes at run time.
“you just assumed Deno will overtake Node and that everyone knows that”
Deno is getting developed by the same guys who created Node, because the former node team believed it was necessary. Since Deno favors sticking to Web Standards, it is a big deal (at least to me).
Regarding Dart: Google developed v1 in secret and everyone else was unhappy being excluded and said “nope!” (Apple, Mozilla, Microsoft), so it did not get popular at this point. Dart2 is a different story, since Flutter is build on top of it. The adoption of Flutter is increasing pretty fast (already outperformed React Native), so this leads to a new momentum of Dart: https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/
“You mentioned the React codebase relies on commonJS.”
The React code base itself is definitely not using the latest ES features. E.g. no JS classes (unless this changed, did not dive into the code for a while). I am not sure if there are any require() statements left, but the import statements are so called “bare module specifiers”. Meaning: no full paths, no file name extensions. Browsers can not resolve those on their own.
Example: import {getToStringValue, toString} from ‘./ToStringValue’;
It is definitely nice to use an enhanced version of the JS class system as well as “valid” import statements for a new framework.
Writing an article is easy, creating the neo framework is the real deal. In case you have time to dive into it, I would love more feedback!
Best regards, Tobias