L'utilizzo di AJAX migliorerebbe notevolmente le prestazioni del server?


10

Chiaramente AJAX migliora l'interfaccia utente, ma ciò riduce anche il carico del server? Penserai che lo faccia perché non sarà necessario pubblicare l'intera pagina ogni volta, ma forse ci sono altre variabili che non sto prendendo in considerazione.

Risposte:


14

Dipende da cosa stai facendo e da come lo stai facendo.

  • Se stai sostituendo i caricamenti di pagina intera con richieste AJAX (ovvero effettuando chiamate AJAX solo quando un utente fa clic su quello che sarebbe stato un caricamento di pagina intera), AJAX ridurrà il carico del server perché (presumibilmente) stai eseguendo meno elaborazione e restituendo meno dati.

  • D'altra parte, se si aggiunge l'aggiornamento automatico di tipo AJAX che esegue il polling del server ogni pochi secondi, ciò potrebbe aumentare il carico a seconda dell'utente (potrebbe non aumentare il carico del server se l'utente continua a premere F5 per aggiornare comunque manualmente, ma la maggior parte delle persone generalmente non lo fa per ore)

  • Un'altra ottimizzazione AJAX consiste nel caricare solo più dati durante lo scorrimento. In tal caso, se l'utente non scorre fino in fondo, questa è un'elaborazione sprecata.

Naturalmente, in realtà l'implementazione può distorcere i risultati in entrambi i modi, questi sono risultati tipici che presuppongono implementazioni ragionevolmente buone.


La vera domanda qui è cosa cambia quando si passa a un modo AJAX di fare le cose? Sei in grado di eliminare il lavoro che era stato sprecato prima passando ad AJAX o semplicemente suddividendolo in pezzi più piccoli? (e aggiungendo overhead nel processo)
SplinterReality

3

Ovviamente serve per ridurre il carico del server. Guarda questa presentazione @ jsconf'09 - per come Facebook ha usato Ajax per farlo.

Ajax è asincrono. comunicazione server - e puoi usarla in una miriade di modi. Le persone lo usano per caricare JSON semplice sul Web in tempo reale e tutto il resto.

Ricorda: la vera sfida è l' equilibrio tra client e server. Sforzati di fare in modo che ciascuna parte faccia il proprio lavoro in modo tale da ottimizzare il sistema e ottenere evidenti vantaggi di reattività percepita e velocità reale.


3

Ci sono altri fattori che non stai prendendo in considerazione: nella maggior parte dei casi, AJAX aumenterà il carico del server. In uno scenario tipico, non ajax, un utente carica una pagina grande ogni pochi secondi o pochi minuti. Sì, quella singola pagina è un po 'più impegnativa per il server, ma ha un sacco di tempo tra le richieste di recupero e di servire altre richieste. In uno scenario AJAXified, il caricamento di una singola pagina è ora decine di piccoli hit, martellando costantemente il server e aspettando risposte.

È un po 'come la morte di 1000 tagli - nessuna delle richieste è così grande di per sé, ma il peso totale è un assassino. Soprattutto quando inizi a considerare che queste piccole richieste sono altrettanto costose da servire come richieste a pagina intera. In entrambi i casi, probabilmente stai eseguendo un'intera pipeline di applicazioni Web, colpendo un database e aspettando una risposta mentre sei seduto su una preziosa connessione HTTP.

Ecco un esempio di come Ajax può diventare brutto sul server molto velocemente. Prendiamo una tipica "dashboard direzionale" che presenta 4 slot per i widget. Supponiamo che al CEO piaccia un rapporto sulle vendite completo nella parte destra, una lista dei primi 10 dei guadagni nel mezzo e un rapporto sui prezzi delle azioni della società sulla destra. E diciamo che lo faremo tramite semplici richieste remote Ajax. Senza tenere conto dei fogli di stile, delle immagini e di altre risorse, la tua pagina ora richiede 4 round trip HTTP (pagina principale, ciascuno dei rapporti del dashboard) sul server. Ognuno di questi richiede uno stack web completo per essere eseguito - stai per colpire database e renderizzare HTML usando il tuo framework web, giusto? Ora moltiplica il singolo CEO per 2000 utenti remoti, alcuni dei quali hanno connessioni imprevedibili.

Al contrario, è possibile disporre di un'unica pagina lato server che esegua e restituisca uno scheletro HTML nonché i dati (inclusi in JSON in-page) per eseguire il rendering dei report. Connessione singola, più grande, ma meno battuta sul server web in totale perché non stai gestendo 4 richieste e fai girare 4 pipeline, ecc.


1
Puoi dare un esempio di una piccola richiesta di cui avresti bisogno in AJAX e che altrimenti non avresti bisogno?
jhocking

1
Certo, mai notato come, su questo sito, può dirti se qualcuno ha già risposto a una domanda? Ciò avviene tramite una piccola richiesta Ajax. . .
Wyatt Barnett,

@WyattBarnett AJAX non significa necessariamente polling. Puoi semplicemente sostituire i caricamenti di pagina intera con caricamenti di pagina parziali. In molti casi può aumentare il carico del server ma non credo sia vero nella "maggior parte dei casi".
Davy8,

Beh, quell'esempio mi sembra più simile a qualcosa che puoi fare in AJAX che non puoi altrimenti, piuttosto che qualcosa che richiede più richieste del server che altrimenti. Suppongo che l'OP non fosse chiaro se intendesse "più prestazioni quando si fa esattamente la stessa cosa" o se intendesse "più prestazioni quando si sfrutta appieno l'AJAX"
jhocking

1
Si noti che il polling / polling lungo è un semplice sottoinsieme di AJAX (come indicato qui), noto anche come "cometa" . I websocket, che consentono il push "vero" senza polling o lato server (avviato dal server) AJAX ridurranno notevolmente lo spreco di risorse richiesto per questo tipo di funzionalità.
Alan H.,

2

Se si utilizza AJAX per sostituire il lavoro che il server farebbe altrimenti, sì che migliorerà le prestazioni del server. Tuttavia, potresti aver progettato cose in modo che il server stia ancora facendo altrettanto e ora qualsiasi cosa accada con AJAX è in cima a ciò che il server stava già facendo.

Principalmente si tratta di cose dell'interfaccia utente, dal momento che non dovresti fare nient'altro sul lato client. Fondamentalmente, tutto ciò che il server stava facendo per supportare l'interfaccia utente (ad es. Ricaricare la pagina con un layout diverso in risposta all'input dell'utente) fa invece JavaScript.


0

Se il rendering HTML è una parte importante del profilo delle prestazioni del server delle applicazioni, lo spostamento del rendering HTML sul client può essere una vittoria delle prestazioni sul server delle applicazioni.

Tuttavia, se il rendering HTML è una piccola parte del profilo delle prestazioni del server delle applicazioni, in genere più richieste significano più viaggi nello stack, più query, più tutto sul server delle applicazioni, una perdita di prestazioni.

Ovviamente, l'unico modo per sapere nel tuo caso particolare è provarlo.


1
Ho problemi a pensare a qualsiasi esempio in cui l'uso di AJAX causerebbe più richieste rispetto a fare la stessa cosa senza AJAX. Puoi fare un esempio?
jhocking,

1
L'HTML viene sempre visualizzato sul lato client.
Jonas,

1
Presumibilmente sbagliava e significava "manipolazione" e non "rendering"
jhocking

A partire dalla vista / modello, combinandolo con le variabili e rendendone HTML non elaborato.
yfeldblum,

AJAX causerebbe più richieste che fare la stessa cosa senza AJAX in casi come: il layout principale ha "buchi" ma viene consegnato con quei buchi al browser e quei buchi vengono "riempiti" usando AJAX. Vedi ad esempio Facebook.
yfeldblum,

0

Devi considerare il modo migliore per implementare la tua soluzione. Una semplice forma non dinamica non ha bisogno di Ajax e l'aggiunta può effettivamente danneggiare la prestazione. Se il tuo problema è una brutta domanda, l'ottimizzazione di Ajax nel mondo non ti consentirà un aumento delle prestazioni accettabile.

Se il tuo server è sovraccarico di lavoro, devi capire perché.

Se stai ottenendo molti successi, ajax non risolverà quel problema, hai bisogno di più capacità. L'aggiunta di Ajax aumenterà semplicemente il numero di richieste che il tuo server deve gestire.

Se hai una pagina complicata dovresti vedere se c'è qualcosa che puoi fare sul lato client per ridurre il carico sul tuo server. Se la tua pagina è dinamica ma ha davvero un pacchetto di dati limitato nella cache che per l'adeguamento sul lato client potrebbe ripagare meglio.

E alcune volte l'Ajax aiuterà. Quando hai forme complesse con dati dinamici ajax vince la giornata. Ma se le tue domande sono complicate e richiedono molto tempo per essere eseguite, ajax non risolverà il tuo problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.