Spostare più logica sul client significa elaborazione limitata sul server , quindi puoi ottenere un server meno performante ma richiede client più potenti . A seconda del tipo di applicazione su cui stai lavorando, questa opzione potrebbe essere o meno un'opzione. Per un'applicazione con un numero significativo di utenti e funzionalità che richiedono una certa quantità di elaborazione, i risparmi derivanti dall'avere un maggior numero di elaborazioni da parte dei clienti si sommano rapidamente.
Con JS / CSS ottimizzati (in bundle e miniati) la quantità di richieste fatte è abbastanza limitata e non dovrebbe essere un problema. Ricorda che la memorizzazione nella cache lato client è un grande vantaggio e probabilmente dovresti solo avere la richiesta iniziale di scaricare il file JS / CSS. Detto questo, anche se premi per il rendering lato server hai ancora bisogno di una certa quantità di JS (per mantenere la tua applicazione reattiva in quanto vi sono alcune cose che non puoi o non dovresti fare completamente lato server) e hai ancora bisogno del CSS per lo styling in modo che non influenzino la tua decisione tanto.
Avere una buona API REST significa anche che puoi avere una gamma più ampia di consumatori per i tuoi dati. Non si è limitati a una singola applicazione e si possono integrare in altri sistemi (come un widget in un CMS) e creare esperienze utente migliori grazie alla creazione di applicazioni intorno alla piattaforma su cui devono essere eseguite (come un'app specifica per iOS che ha un aspetto e una sensazione il modo in cui gli utenti si aspettano).
Uno dei maggiori problemi che puoi aspettarti è mantenere il tuo JS in una piattaforma multipiattaforma . Più JS significa una maggiore possibilità di rompere in una libreria o funzionalità che non sono supportate in un browser più vecchio o più recente. Con il rendering serveride hai più controllo sull'HTML inviato. Più ti affidi a JS, più dovrai testare su una vasta gamma di dispositivi.
In fondo, con JS / AJAX puoi ottenere applicazioni più reattive che possono essere fatte funzionare su una gamma più ampia di dispositivi, a scapito della complessità perché ora stai supportando tutti questi dispositivi.