• dan@upvote.au
    link
    fedilink
    arrow-up
    2
    ·
    11 months ago

    Anyone that builds a SPA and breaks opening in new tab or history caching and back/forward nav isn’t a good frontend developer. These have been solved problems for a long time.

    • Ephera@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      11 months ago

      I mean, for sure, and this meme isn’t trying to say that all SPAs are bad. But defaults matter, even for experts.

      This meme was inspired after I had to use an SPA, which among those points in the meme, also broke using Alt+Left to navigate back. The normal back-button worked (even if it then had to load for ten seconds to re-display static content).

      Which is just a typical example to me. You don’t even need much expertise to figure out why Alt+Left is broken. But you have to think of testing Alt+Left, because it’s broken by default.

      • The Octonaut@mander.xyz
        link
        fedilink
        arrow-up
        0
        arrow-down
        1
        ·
        11 months ago

        My friend I’ve been using the Internet for 27 years and developing for it for most of that time and I can promise you I’ve never once hit Alt+Left

        • Ephera@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          ·
          11 months ago

          Yeah, I have no trouble believing that. It took quite a while before I learned of this shortcut and when I did, I was wondering why I would ever want to use it.

          But I generally work from my laptop these days, without an external mouse connected, so reaching from my touchpad, the Left key is right there.

          • llii@feddit.de
            link
            fedilink
            arrow-up
            1
            ·
            11 months ago

            You can probably go back by swiping two fingers to the right on the touchpad. Maybe it depends on the OS and browser.

            • Ephera@lemmy.mlOP
              link
              fedilink
              arrow-up
              1
              ·
              11 months ago

              Yeah, that works on my personal laptop, but not yet on my work laptop, because they insist on preinstalling an old, buggy OS. If that did work everywhere, I would probably be using that, but not breaking Alt+Left for whoever needs/wants it, would still be nice. 🫠

              • llii@feddit.de
                link
                fedilink
                English
                arrow-up
                0
                ·
                11 months ago

                Ok, that’s unfortunate. But I agree, the browsers default keybindings really shouldn’t be broken it’s really annoying. I hate it when middle click doesn’t work with some web pages. 😒

                • I Cast Fist@programming.dev
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  11 months ago

                  It really sucks when they break “open link in new tab”. I then have follow the stupid link, then middle click the back button to do what they broke.

          • Halosheep@lemm.ee
            link
            fedilink
            arrow-up
            1
            ·
            11 months ago

            Your reason for using it was exactly my question. “I have a mouse with a built in back button, why would I want to remove my hand from my mouse and navigate with the arrow key?”

            But your reason simply makes sense.

        • unalivejoy@lemm.ee
          link
          fedilink
          English
          arrow-up
          0
          ·
          11 months ago

          I started using alt+left when browsers started removing backspace. It was for the best.

        • NotJustForMe@lemmy.ml
          link
          fedilink
          arrow-up
          0
          ·
          11 months ago

          I have never heard of alt+left, and I’ve been using the Internet since Mosaic was all the rage. Shame on me, it seems to be implemented in all browsers. How could I have missed it?

          • Ephera@lemmy.mlOP
            link
            fedilink
            arrow-up
            1
            ·
            11 months ago

            It’s even implemented in many file managers and text editors and such. Pretty much the standard shortcut for navigating history. But yeah, hilariously it’s somehow also a rather well-kept secret.

    • Chenzo@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      11 months ago

      If your SPA website is done correctly the end user won’t even notice and none of the bad things listed in this meme happen.

      • Trarmp@feddit.nl
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        I maintain a couple of Wordpress installations for clients, where new link targets are the same page, as you’d expect.

        They still, somehow, manually check “link opens in new tab”. I don’t know why some of these boomers are allowed to use computers, I swear.

        • toastal@lemmy.ml
          link
          fedilink
          English
          arrow-up
          0
          ·
          11 months ago

          If you manage the WordPress installation, can’t you disable the ability or create/install a plugin that removes that ability? This hurts usability.

          • Trarmp@feddit.nl
            link
            fedilink
            arrow-up
            0
            ·
            11 months ago

            I could, good point. I do disable plugins for clients so they can’t beat up their own website too much.

            Still, there are legitimate uses for opening a site in a new tab; e.g. when it’s an external website. I don’t think I should automate that, since there’s a granularity in there.

            • toastal@lemmy.ml
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              10 months ago

              legitimate uses for opening a site in a new tab; e.g. when it’s an external website

              This is not a legitimate use—this breaks the default user agent behavior & completely removes the autonomy of opening in the current window (there are tons of ways to open in a new tab/window). Consider rechecking the article linked higher up the thread tree.

    • tsonfeir@lemm.ee
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      I’m guessing they aren’t using Vue, React, or similar, and they’re rolling their own for some reason.

      • dan@upvote.au
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        React doesn’t handle any of this stuff out-of-the-box; it’s just a UI library.

        • tsonfeir@lemm.ee
          link
          fedilink
          arrow-up
          0
          ·
          11 months ago

          It’s one install line ffs, how is this a conversation in 2024? It’s EASY.

        • unalivejoy@lemm.ee
          link
          fedilink
          English
          arrow-up
          0
          ·
          edit-2
          11 months ago

          Neither does vue. You need vue-router, which is required anyway to make an spa with multiple pages.

          The only thing that breaks is any component state isn’t saved. But this can be fixed by rendering <RouterView> with <KeepAlive>. How to do this is mentioned in the documentation.

          I assume it’s similar with react and react-router-dom.

    • sbv@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      0
      ·
      11 months ago

      You think your 13 megabyte parallax-ative home page

      Is parallax still a thing? I feel like ginormous hero images are more popular atm.

      • micka190@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        motherfuckingwebsite is pretty old at this point. I remember seeing it on Reddit like 10 years ago. Parallax was all the rage back then, when we called “hero” images “jumbotrons” (because Bootstrap called it that, I think?)

        • macniel@feddit.de
          link
          fedilink
          arrow-up
          0
          ·
          11 months ago

          Which was derived from those big as screens in sport stadiums or sport arenas. As it was over shadowing the actual stuff below.

  • toastal@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    11 months ago

    What some folks are missing is that SPAs are great for web applications & unsuitable for web pages. There is more nuance than “SPA bad”.

    Then dealing with a lot of dynamic content, piping thru a virtual DOM DSL is 100× nicer for a developer than having to manually manipulate the DOM or hand write XML where it’s easy to forget all the closing tags (XML is better as a interchange format IMO & amazing when you need extensibility… also JSX just makes it worse). That developer experience (DX) often can lead to faster iteration & less bugs even with a cost to the user experience (UX). But it’s not always a negative impact to the UX–SPAs can be used to keep things like a video or music player on while still browser & using the URL bar as a state reference to easy send links to others or remember your own state.

    It’s equally silly that a landing page whose primary purpose is to inform users of content takes 40s to load & shows “This applications requires JavaScript” to the TUI browser users & web crawlers/search indexers that don’t have the scale of Google to be executing JavaScript in headless browser just to see what a site has to say.

    The trick is knowing how & when to draw these lines as there’s even a spectrum within the two extremes for progressive enhancement. React isn’t the solution to everything. Neither is static sites. Nor HTMX. Nor LiveView. Nor Next/Nuxt/Náxt/Nüxt/Nœxt/Nอxt.

    • foobaz@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      I don’t agree with this hard split between SPAs and MPAs anymore (ie. SPAs for apps, MPAs for websites/content). In my opinion SPAs are simply a progressive enhancement for MPAs which allow even faster page navigation. All frameworks now come with SSR solutions and if a website still requires JS to show content that’s a skill issue.

      Looking at Astro the line between SPA/MPA is getting really blurry. Just slap a View Transition element on your page and you got a MPA which acts like a SPA when JS is enabled.

      • toastal@lemmy.ml
        link
        fedilink
        English
        arrow-up
        0
        ·
        11 months ago

        In my opinion SPAs are simply a progressive enhancement for MPAs which allow even faster page navigation.

        While I agree that there is a spectrum (hinting at that with the last paragraph), this is where I hard disagree. To construct something like this, you are making an application massively complex by trying to re-implement everything on both ends. Using something like Astro is only hiding that complexity but it’s still there, & probably full of bugs & tons of JavaScript that most developers wouldn’t even understand their stack or know how to jump into the Astro code. The amount of time saved is largely minuscule in most cases with the assets cached when navigating to a new page. In fact, I just tested two of their showcased sites which loaded slower with JavaScript enabled & the content was pretty obviously 95% static. There’s probably some niche use cases for this, but it’s not a good default IMO.

    • madcaesar@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      What is a web page vs web application? The web is so complex with features these days that pretty much everything is an application.

      • toastal@lemmy.ml
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        I admitted it was a spectrum, but this recent article in particular does a good job explaining the axes of static vs. dynamic : online vs. offline. I think you will appreciate it. :)

  • grue@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    11 months ago

    Building “applications” out of HTML documents – a single one or otherwise – is the sort of thing that belongs in one of those “stop doing X” memes, unironically.

    • ris@feddit.de
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      Why? I like that the Webplatform gives more Freedom to the Users.

      • VeganPizza69 Ⓥ@lemmy.world
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        11 months ago

        No. Users should be forced to install hundreds of apps, with two thirds of apps running simultaneously. And if they don’t have memory left on the device for that, they should uninstall apps and reinstall them when necessary.

        /s

  • intensely_human@lemm.ee
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    Every single page app should still be using the path to represent resources, so that history and linking work.

  • andrew@lemmy.stuart.fun
    link
    fedilink
    English
    arrow-up
    0
    ·
    11 months ago

    These things are true if you build a SPA wrong. Believe it or not there are lots of ways to build server side rendered pages wrong too.

      • andrew@lemmy.stuart.fun
        link
        fedilink
        English
        arrow-up
        0
        ·
        11 months ago

        There’s no one right way. Saying there are wrong ways doesn’t imply the existence of one right way, though.

      • tsonfeir@lemm.ee
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        There are a lot of standard practices like… using a router to load the content of your SPA according to the url.

        • grue@lemmy.world
          link
          fedilink
          English
          arrow-up
          0
          ·
          edit-2
          11 months ago

          What I’m saying is, there’s no right way to build a thing that is inherently wrong.

            • grue@lemmy.world
              link
              fedilink
              English
              arrow-up
              0
              ·
              11 months ago

              Even a perfectly-built SPA is a thing that should’ve been a different kind of program (a native app or even something like Java Web Start) instead.

              • tsonfeir@lemm.ee
                link
                fedilink
                arrow-up
                0
                ·
                11 months ago

                I strongly disagree, but I respect your opinion which was no doubt formed by different experiences with web technologies than I’ve had.

                • intensely_human@lemm.ee
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  11 months ago

                  Not that it’s inherently good or bad, but the heavier web apps get the more a browser represents a sort of virtualization environment that only runs one stack. I think that’s interesting.

      • Ephera@lemmy.mlOP
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        I don’t know what the hell you’re interpreting into this 15-word-meme, but I do. I’m not saying all SPAs are shit, I’m saying far too many are. And “far too many” being more than one that I can think of. Even the Lemmy webpage breaks history caching.

      • intensely_human@lemm.ee
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        I know what an SPA is, but I would be laughing so hard at this thread if I didn’t know what it meant.

        “Yeah man. Dude doesn’t know his SPAs!”

        Reminds me of that Saturday Night Live skit with the woodworkers comparing everything to working on the lathe.

  • TootSweet@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    11 months ago

    I was kindof chief architect for a project where I worked. I decided on (and got my team on board with the idea of) making it an SPA. Open-in-new-tab worked perfectly.

    (One really nice thing about it was that we just made the backend a RESTful API that would be usable by both the JS front-end and any automated processes that needed to communicate with it. We developed a two-pronged permissions system that supported human-using-browser-logs-in-on-login-page-and-gets-cookie-with-session-id authentication and shared-secret-hashing-strategy authentication. We had role-based permissions on all the endpoints. And most of the API endpoints were used by both the JS front-end and other clients. Pretty nice.)

    I quit that job and went somewhere else. And then 5 years later I reapplied and came back to basically the exact same position in charge of the same application. And when I came back, open-in-new-tab was broken. A couple of years later, it’s not fixed yet, but Imma start pushing harder for getting it fixed.

  • macniel@feddit.de
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    Remember when websites had a built-in loading indicator, and you didn’t have to implement it yourself via JavaScript?

    • Riskable@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      11 months ago

      I remember when the web didn’t have JavaScript.

      Honestly, though it was much worse back then. I prefer the variety and features of modern browsing over (mostly) plain text.

      What I wish we could do away with on the web is videos. Let’s go back to just images and text, thanks. Animations are fine though 👍

      • sbv@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        0
        ·
        11 months ago

        What I wish we could do away with on the web is videos. Let’s go back to just images and text

        Seconded. I really enjoyed pre-video Internet.

        • macniel@feddit.de
          link
          fedilink
          arrow-up
          0
          ·
          11 months ago

          I third that. Videos are so incredible inaccessible. Want an easy-to-follow tutorial or heck a searchable document? nah mate video is all you get, and ads with it!

          • sbv@sh.itjust.works
            link
            fedilink
            English
            arrow-up
            0
            ·
            11 months ago

            The ads make it even worse. I totally get the Gemini folks for wanting to simplify. But I do enjoy me a good webapp.

              • Ephera@lemmy.mlOP
                link
                fedilink
                arrow-up
                0
                ·
                11 months ago

                Well, you can link to images and individual clients can then choose to directly embed those images inline, where the link is placed.

              • micka190@lemmy.world
                link
                fedilink
                arrow-up
                0
                ·
                11 months ago

                I kind of get it.

                • No images is because they want it to work in a plaintext environment.
                • No tables because you just know someone is going to use it to format stuff that isn’t tabular data, though I guess there isn’t a way to actually render tabular data either…
                • macniel@feddit.de
                  link
                  fedilink
                  arrow-up
                  0
                  ·
                  11 months ago

                  Mhm I disagree with your second point. Since you can’t use any styling on Gemini objects, you won’t get table layout as we had in dark ages of Html. With tables like in Markdown you can just lay out tabular data in an actual table.

                  Mhm I guess with the plaintext environment we still can link to external resources like images and other multimedia or interactives.

          • NotJustForMe@lemmy.ml
            link
            fedilink
            arrow-up
            0
            ·
            11 months ago

            You do get searchable auto-transcripts of videos now, so that’s a good thing. Some people work better with videos and find them more accessible. Best of both worlds. As long as they are not auto-playing and pre-caching, I’m fine with them existing.

  • okamiueru@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    It’s fascinating how some SPAs come about. Often consultancies who win some bid to implement X features. Since “good user experience” is hard to quantify/specify, it ends up being a horrible end result.

    Zalaris is one such that I’m in complete awe of. Set up user flows that are expected to take 30 minutes to complete. Yet, don’t keep track of that state/progress withing your own SPA. Click the wrong tab within that SPA, and state is reset.

    It’s, just fascinating.

    • EnderMB@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      I used to work in a consultancy that was run by a designer, and this was painfully true. I had one memory of working for a big American client on a SPA for primary mobile use, and the SPA we designed for them had several animated videos in the background, had overlays for every product, and for “speed” we loaded it all in at the start - for the dozen or so languages supported

      In 2016, if someone were to tell you that visiting this product page on mobile would eat 80MB, you’d probably be fucking fuming once your data bill comes through. The designers and frontend engineers didn’t seem to care, because “it loads fine on our devices”, all hooked up to WiFi…

  • xmunk@sh.itjust.works
    link
    fedilink
    arrow-up
    0
    ·
    11 months ago

    As an elder developer… yea, we could use react to render complex web pages that erode expected functionality.

    Or, like, I’m happy to just go back to server-side rendering… it’s surprisingly cheap to build and dead fucking simple.

    • tsonfeir@lemm.ee
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      Elder developer here too, correctly making my SPAs has made my work significantly more efficient and maintainable now that my back end is basically a rest api and my front end requires very little network interaction after the initial load, which has been made pretty minimal.

      • Chenzo@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        11 months ago

        I too have been doing this for years and I whole hearty agree with this comment.

        For large complex sites, I ain’t never going back.

        Actually even for simple sites I’m not sure I’ll go back.

    • pixxelkick@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      11 months ago

      I prefer just writing my html, js, css, as is, and then transpiling to pack it down, treeshake, hash, cache bust, CSP, etc etc.

      The amount if headache, overhead, inversion of control, mess, and bloat involved in frameworks tends to make me spend way too much time on writing boilerplate.

      template and slot exist now, and modern js can do most of the shit fancy libs used to.

      There’s very little need for frameworks unless you meed a SUPER dynamic website that has tonnes of mutability.

      The amount if times i see people load in like 3 frameworks and 10mb of bullshit and ten js files to make a fucking static form that doesn’t even do anything fancy is insane.

      Just fucking write the like… 8 lines of normal code to populate the form, wtf? Why are we using routers at all, HTTP already exists and does that, why did we re-invent http?

      Front-end devs need to spend less time installing npm packages to try and magically solve their issues and just learn how to actually write code, SMH.

    • fidodo@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      11 months ago

      Elder developer too, you can easily render react server side and statically. Once you remove state, react simply becomes pure functions that output jsx nodes, it’s also dead fucking simple, but gives the the possibility to add hydration and state later if you need it.

      • xmunk@sh.itjust.works
        link
        fedilink
        arrow-up
        0
        ·
        11 months ago

        I’ve seen front ends that build queries that are blindly executed by the backend - I’ve seen GraphQL that allows the client to read arbitrary users’ passwords from the database - I’ve seen attack ships on fire off the shoulder of ori- whoops, wrong memory.

        Anyways, you can create vulnerabilities anywhere using anything - imo more server side logic might mean more vulnerabilities on the server but it means less vulnerabilities overall.