Hello!
Well, Matt - it seems you started quite the brouhaha. As you and Dave are making the same fundamental points, I will respond to you both inline. But first, Ganaraj is correct that the server and client controllers are different.
Dave said: "...along with many legacy round-trip dialogs we haven't converted yet..." Converting legacy applications to SPAs often take an incremental approach - and often rightfully so. But when starting from scratch, as Matt seems to imply he is doing, we wouldn't necessarily take the same approach, right? So I don't think this is an argument against SPAs per se.
Matt said: "It is cyclical in computers. The power bounces from server to client and back again, in a continuous cycle". Not so much, no. And even if that was true, what does that have to do with my point that browers can handle what we're asking of them?
Matt also answered my question about why he would keep logic on the server instead of the client in several bullets. I will now address each:
1) It is reusable between server-side code that offers web services. Yeah, but you're talking about _services_. Services are the backbone of any SPA. Of _course_ we should have reusability and our infrastructure should be service-oriented. Also, we should architect our SPAs to themselves have reusable components, which is a frequent topic in this group. I don't see what this has to do with what runs on the client versus what runs on the server.
2) It is hidden completely from curious users/hackers: A well-designed API should be able to be publicly distributed without fear of exploitation. If security and key validation are on the server (where they belong) what specifically are you afraid users will learn from your client-side code?
3) It is considerably faster for very complex data crunching: No one is suggesting that "complex data crunching", whatever that means, should be performed on the client. Usually in SPAs, that is left to the server, which is accessed through the service API. Here's a more fundamental question aimed at the premise of your question: why are you assuming offloading a complex calculation (or set of calculations, or even asynchronous job requests, etc.) would require a page reload on the client?
4) It can be reused by other sibling applications that may not even be webapps: This is the same as question one.
Now I want to spend a few minutes on a key point that it seems from both responses I was not clear enough in explaining. This is the most important point that I was making.
Dave said: "I just don't think you're right that web _apps_ do only a few things". If I had said that, I would be wrong. But what I said was actually that apps are "centered around one or a few fundamental goals". This is a key distinction. As a thought experiment, can you think of _any_ successful application (web or not) that does _not_ have one (or at most a few) fundamental goals? Right now I have Gimp open on another workspace; it contains many features and many dozens of dialogs and is scriptable through plugins, but it's goal is still one: manipulate raster images. LibreOffice is a suite of smaller applications, but even the entire suite has one goal: view and edit documents of a defined kind.
I worked as a project manager on a $20m marketing data warehousing (and accompanying web-based analytics application) initiative a few years ago; this was an organization-wide initiative supporting multiple lines of business, had dozens of customizable reports and special data tools, many dozens of incredibly varied and complex screens, all customizable based on the state of the application, etc. But it still had a fundamental goal: the presentation of a set of data (principally centered around KPIs) in a few key ways.
Complexity != many goals. As I said in my earlier response: "An app can have a lot of complex features and many routes and reach into 100k LoC, but it's still centered around one or a few fundamental goals." If your app is not, you are doomed to fail. Citations available upon request.
But all of this aside, I need to expose a logical fallacy underpinning your argument. If I was to boil your argument down its simplest form, I would summarize it as follows: This app I'm contemplating is just too big for SPAs. But when I press y'all for a reason, what I get are arguments from incredulity: Matt said "I cannot fathom" and "that would be insane." Dave said "do you really think it's optimal, or even reasonable". That you cannot imagine how it would work from your experience does not mean it doesn't work. You must prove _why_ it couldn't work (or at least wouldn't be optimal).
Finally, Matt said: "Perhaps you have not worked on significantly complex webapps" To which I must retort: perhaps you have not worked on sufficiently modern web apps. :-)
As I said, SPAs are emphatically _not_ right for every situation - yet. But I'll say again what I said before: we should be careful not to base our decision on what the Internet looked like a few years ago. It's just too different.
Hot damn that was long! But this is a great discussion. I hope you're having fun with it too. :-)
Josh