[HN Gopher] A Real World React - Htmx Port ___________________________________________________________________ A Real World React - Htmx Port Author : mpweiher Score : 65 points Date : 2022-10-15 20:43 UTC (2 hours ago) (HTM) web link (htmx.org) (TXT) w3m dump (htmx.org) | endisneigh wrote: | serve side rendering is ideal, but at the end of the day what | matters these days is developer productivity. a better question | is how long it takes to make something like gmail with htmx vs. | say react. you might say most apps are not gmail, and you'd be | correct. so then you say, ok what about something like wikipedia? | easy enough. then you start adding all of this javascript and it | becomes a mess. | pen2l wrote: | One reason I prefer doing React is that retrofitting existing | React stuff for React Native is better/easier than embarking on | React Native from scratch. | samwillis wrote: | I would argue that most "apps" built with React Native don't | need to be apps at all, they are better as websites. | | The majority of these apps are about placing the existing | product into the App Store for discoverability, and encouraging | users to be "locked" into the app at the expense of a worse | customer experience. | | A web app, in a browser, automatically has support for opening | multiple pages as multiple tabs, bookmarks, sharing pages. You | can't do that with 99.9% of apps. | | I will also argue strongly that, again, react native is | unnecessary even if you do want to package a native app. | WebView based apps perform as well as a react native app, and | most of the time with significantly less additional code. It | also forces you to up your "mobile website" UX. In general the | minuet you build a mobile "app" the mobile web experience gets | neglected. | recursivedoubts wrote: | TLDR: | | - Took 2 months (21K LoC, mostly JavaScript) | | - No reduction in user experience | | - Reduced LoC by 67% (21,500 LoC to 7200 LoC) | | - They increased python by 140% (500 LoC to 1200 LoC), good if | you prefer python to JS | | - Reduced JS dependencies by 96% (255 to 9) | | - Reduced web build time by 88% (40s to 5) | | - First load time-to-interactive was reduced by 50-60% (from 2-6 | seconds to 1-2 seconds) | | - Much larger data sets were possible than react could handle | | - Memory usage was reduced by 46% (75MB to 45MB) | | These are spectacular numbers that reflect that the application | in question is highly amenable to the hypermedia approach. | | I wouldn't expect everyone to see this level of improvement, but | at least some web apps would. | [deleted] | keizo wrote: | Speed is the big one for me. 2-6+ seconds is insanity for | anything. | funstuff007 wrote: | I hear you, but YouTube takes 6+ seconds for me to load and | it does not seem to hold them back. For most, not all, | optimizing page load time is time probably best spent | elsewhere. This is is no way to impugn htmx, because with | htmx you seem to kill many birds with one stone. | recursivedoubts wrote: | Speed is definitely a big one. | | I also am glad to see that everyone on the dev team became | full stack developers, because I think the back-end/front-end | split is often detrimental to development velocity. It's | often better when a developer can fully realize an entire | feature, with no front-end/back-end friction. | keizo wrote: | Oh for sure. For me programming is a hobby, so I can only | get something made if I do it all. | samwillis wrote: | Love htmx and this talk is a brilliant run down of where it works | well. | | But as always it's about choosing the right tool for the job. | Server rendered pages/fragments solve so many issues around | security and time to develop a product, however it only gets you | so far. | | Ultimately I think the decision when choosing a stack comes down | to how much state you need to managed in browser. The vast | majority of sites needs very little client side state management, | htmx and other tools such as Alpine.js are perfect for this. But | eventually as you reach a more "app like" experience with | multiple layers of state control on the front end you need to | reach for a front end JS framework. | | Now that doesn't always mean going all in on a full SPA covering | the whole of your product. It could just be a small fragment that | requires that level of interaction. | | Point is, don't pick a tool because it's "in vogue", pick one | because it lets you build the best possible product as | efficiently as possible. For 80% of websites that could be htmx, | and for the next 15% htmx probably works for 90% of their pages. | It's the 5% where htmx is not one of the right choices at all. | recursivedoubts wrote: | I am in 100% agreement with you: pick the right tool for the | job. | | My hope is that, with htmx, HTML/hypermedia is that right tool | for more jobs. | andy800 wrote: | > as you reach a more "app like" experience with multiple | layers of state control on the front end you need to reach for | a front end JS framework | | I think that if you fully embrace HTMX's model, you can go far | further than anticipated without a JS framework. Do you really | need to be managing state on the client? Is it really faster to | communicate via JSON, or protobuf, whatever, rather than atomic | data and returning just small bits of replacement HTML -- | inserted seamlessly that it's a better UI than many client-side | components? Why have HTML elements _react_ to changes in data | or state, rather than just insert new HTML elements already | updated with the new state? | | I think you're describing a, let's do React in HTMX mindset, | rather than let's go all in on the HTMX model. And I might be | giving HTMX too much credit, but it has totally changed how I | go about building web applications. | samwillis wrote: | Oh, I completely agree with you. The vast VAST majority of | sites don't need that level of client side state management. | | I'm currently working on a bio-informatics data modelling web | app where htmx would not have been the right choice. But it's | in that 1-5% where that is the case. That's kind of my point. | | Outside of that project, I'm all in on the the HTMX model of | server side rendered fragments. | dhucerbin wrote: | Listing template dependencies as event names that can change | underlying data seems very brittle (hx-trigger for favorite | articles). You would need at least integration tests to get some | confidence! Can't we infer used state in template and setup | triggers for developer? LiveView gives better DX in this case. | quickthrower2 wrote: | It is a cliche but probably true: Second rewrite will be better | by those sort of metrics even without a tech change. Lessons | learned get applied. Domain is fully known. | | I definitely believe in fewer LOC with any not-react due to all | the hooks, memo, etc. boilerplate though! | recursivedoubts wrote: | This wasn't a complete rewrite, it was a feature-for-feature | rewrite of the front-end, moving from react to htmx, mainly as | a proof of concept at first. Note that the amount of python | actually increased, as logic was moved back to the server. | | While I'm sure there were a few places where better decisions | were made, I think it's reasonable to assume that the majority | of the reduction in code is due to the different approach to | front end development. | gardenhedge wrote: | I consider this an alternative development approach neither | better or worse than what it is trying to replace. The winner in | recent approach, imo, is Remix Run. | recursivedoubts wrote: | Reducing a code base by 2/3rds isn't better than what it | replaced? | | At least in some sense? ___________________________________________________________________ (page generated 2022-10-15 23:00 UTC)