HEY’s UI is 100% HTML
twitter.com
twitter.com
In contrast, with a single-page application everything is asynchronous. Have you handled all possible error cases and race conditions? Have you thought about all of the possible immediate states (e.g. one remote call being super slow might cause the UI to be inconsistent/confusing)? And all of this logic is running on the client. And that client might also be out-of-date (if they left the tab open). So much complexity!
Another side-effect of server-side rendering is that it forces you to make it performant. I've seen so many SPA with a mind set of "oh, this data isn't critical so it doesn't matter that it takes 2 seconds to load; we'll just put it behind a spinner". Over time this has a tendency to cause applications which does massive amount of slow remote calls to different servers/services and multiple spinners in all components. Good luck trying to use these on a mobile phone in transit… Once you put all of the content inside a single call to the server you can't get away with this and you preemptively need to care and focus about performance.
There are of course many advantages to using SPA, but for me I don't think it will ever give me the same calmness as with server-side rendering where I can see all requests in the last 24 hour being successfully responded in <X ms.
His full thread contradicts the headline[1]. They heavily use several JS libraries, including Turbolinks.
As far as I can tell, they actually mean that pages are fully server-rendered, rather than having presentation and data served separately and assembled in the browser (i.e. what people now call Jamstack).
1. https://mobile.twitter.com/sstephenson/status/12726081176043...
"HEY’s UI is 100% HTML over the wire"
Obviously if JS is disabled, this will just navigate to a new URL and load an entirely new page.
But if JS is enabled and the new <body> tag does not contain any <script> tags, then the only thing going over the wire is HTML after the page loads the first time.
My assumption is that Hey can support offline mode using some clever pre-fetching, but it may not yet in v1.
You also get more control over what the browser looks like while the next page is loading (e.g. loading animation instead of blank white interstitial screen).
But there are a lot of areas where interaction with JS shines over form posts.
For example a form where a choice determines the next steps in the form.
This could be done with simple form posts but then you loose your scroll position or at least it will jump because anchors are not at the same position as your scroll position.
I believe JS is overused and most of the time Single Page applications could be Multiple Page applications with JS where it is needed.
It's basically an email provider, but with different features and interesting ideas on how to manage emails. Don't understand why they can't provide an actual elevator pitch on the landing page, but have you read their long-winded message and then you still have to click on "How it works", scroll some more and read some paragraphs just to get an understanding of what it's all about...
So it’s some stuff that I didn’t know I wanted in email (I do appreciate some of the features), with no information on what I’ve always wanted from email.
I saw a cookie-wall built with React recently. That's just wrong in my opinion.
Is it feasible to work as - let's say - solo developer in the startup?
I would love for someone with more experience to to answer your question.
Its actual aim is to provide SPA like experience without modern JS complexity which is ideal for solo devs/small teams.
Also, it is worth noting that they are using Stimulusjs framework with Turbolinks.
Every time, I want it to work but you as you mentioned there's a few gotchas here and there that catch me unaware that cause me to shy away.
In the rails JS camp though is StimulusJS. I swear by this for developers that want a bit of JS sugar but don't need the full suite of Vue or React.
I was one of many devs that would always setup new Rails projects without Turbolinks. Last year, I started a new product at work with a slim team and an eye on simplifying our tech and processes. This included giving Turbolinks and Stimulus a try.
Long story short, it was simple and straightforward and has a notable impact on perceived performance after the initial page load. We had a great experience with it.
These days with Turbolinks 5 it’s quite straightforward. There are some gotchas, but the readme covers various edge cases pretty thoroughly.
Since that project, I’ve gone solo and am working on my own commercial endeavor - and while I’ve been building large scale SPAs since before they were called RIAs, my new product is sure enough using Turbolinks (+ Stimulus).
My understanding is that Turbolinks 6 is coming soon that should be better, still.
However, one practical problem with this approach is that HTML forms currently only support POST and GET, although PUT and DELETE were needed in many scenarios. Without JavaScript the only solutions are using POST for everything or using POST + hidden form field with the desired HTTP method and rewriting the request on the server side.
Nowadays??
- Java swing: Java is pretty straightforward but I could never get the layouting engine to do what I wanted.
- .NET windows forms. Same as above except using c/c++/c#
- web development. The modern build pipeline with transpilation, gulp, nodeJS etc is way too complex. Perhaps plain HTML + plain CSS + plain JS would be possible to grasp by a kid.
- Android?? In theory we get an integrated entry into developing full stack applications in pretty much one language (Java / Kotlin) + some XML. The layouting is problematic again. Easy tings that can be done with visual editor + mouse are achievable. More custom layouts quickly enter into the same layouting engine magic we had in Swing, CSS.
If you don't need extremely complex UIs everything can be Elixir, HTML, and CSS.
For writing a GUI app, look to Python and TK or wx. Those are not too awful to get started with(well, TK particularly, wx is cluttered with boilerplate). Or for a form-editor approach, Lazarus - the current open-source successor to the Pascal lineage.