L'utilisation d'AJAX améliorerait-elle considérablement les performances du serveur?

10

De toute évidence, AJAX améliore l'interface utilisateur, mais cela réduit-il également la charge du serveur? On pourrait penser que c'est le cas car la page entière n'aura pas à être servie à chaque fois, mais il y a peut-être d'autres variables que je ne considère pas.

codeur
la source

Réponses:

14

Cela dépend de ce que vous faites et de la façon dont vous le faites.

  • Si vous remplacez des chargements de pleine page par des demandes AJAX (c'est-à-dire que vous ne faites des appels AJAX que lorsqu'un utilisateur clique sur ce qui aurait été un chargement de pleine page), AJAX réduira la charge du serveur car vous faites (vraisemblablement) moins de traitement et renvoyez moins Les données.

  • D'un autre côté, si vous ajoutez un type de mise à jour automatique AJAX qui interroge le serveur toutes les quelques secondes, cela pourrait augmenter la charge en fonction de l'utilisateur (cela pourrait ne pas augmenter la charge du serveur si l'utilisateur continue d'appuyer sur F5 pour actualiser manuellement de toute façon, mais la plupart des gens ne le font généralement pas pendant des heures)

  • Une autre optimisation AJAX consiste à ne charger que plus de données lors du défilement. Dans ce cas, si l'utilisateur ne fait pas défiler vers le bas, c'est un traitement inutile.

Bien sûr, l'implémentation peut fausser les résultats dans les deux cas, ce sont des résultats typiques en supposant des implémentations raisonnablement bonnes.

Davy8
la source
La vraie question ici est ce qui change lorsque vous passez à une façon AJAX de faire les choses? Êtes-vous capable d'éliminer le travail qui était auparavant gaspillé en passant à AJAX, ou simplement en le décomposant en plus petits morceaux? (et ajout de frais généraux dans le processus)
SplinterReality
3

Bien sûr, cela sert à diminuer la charge du serveur. Regardez cette présentation @ jsconf'09 - pour savoir comment Facebook a utilisé ajax pour ce faire.

Ajax est asynchrone. communication avec le serveur - et vous pouvez l'utiliser de multiples façons. Les gens l'utilisent pour charger du JSON simple sur le Web en temps réel, et tout le reste.

N'oubliez pas - le véritable défi est l' équilibre entre le client et le serveur. Efforcez-vous de faire en sorte que chaque partie fasse son travail de telle sorte que le système soit optimisé et que vous obteniez des avantages évidents de réactivité perçue et de vitesse réelle.

treecoder
la source
3

Il y a d'autres facteurs que vous ne considérez pas - dans la plupart des cas, AJAX augmentera la charge du serveur. Dans un scénario typique non ajax, un utilisateur charge une grande page toutes les quelques secondes ou quelques minutes. Oui, cette page unique est un peu plus de travail pour le serveur, mais elle a beaucoup de temps entre les demandes pour récupérer et servir d'autres demandes. Dans un scénario AJAXified, ce chargement de page unique est maintenant des dizaines de petits hits, martelant constamment le serveur et attendant des réponses.

C'est un peu comme la mort de 1000 coupures - aucune des demandes n'est si grande en soi, mais le poids total est un tueur. Surtout lorsque vous commencez à considérer que ces petites demandes sont à peu près aussi chères à servir qu'une demande pleine page. Dans les deux cas, vous parcourez probablement tout un pipeline d'applications Web, frappez une base de données et attendez une réponse tout en étant assis sur une précieuse connexion HTTP.

Voici un exemple de la façon dont ajax peut devenir laid sur le serveur très rapidement. Prenons un "tableau de bord exécutif" typique qui comprend 4 emplacements pour les widgets. Disons que le PDG aime un rapport de vente complet à droite, une liste des 10 meilleurs salariés au milieu et un rapport sur le cours des actions de l'entreprise à droite. Et disons que nous allons le faire via de simples requêtes à distance ajax. Sans prendre en compte les feuilles de style, les images et autres actifs, votre page nécessite désormais 4 allers-retours HTTP (page principale, chacun des rapports du tableau de bord) contre le serveur. Chacun d'eux nécessite une pile Web complète pour s'exécuter - vous allez frapper des bases de données et afficher du HTML à l'aide de votre infrastructure Web, non? Multipliez maintenant le PDG unique par 2000 utilisateurs distants dont certains ont des connexions irrégulières.

À l'inverse, vous pouvez avoir une seule page côté serveur qui exécute et renvoie un squelette HTML ainsi que les données (incluses dans le JSON intégré) pour rendre les rapports. Connexion unique et plus importante, mais moins de battements sur le serveur Web au total, car vous ne gérez pas 4 demandes et ne faites pas tourner 4 pipelines, etc.

Wyatt Barnett
la source
1
Pouvez-vous donner un exemple d'une petite demande dont vous auriez besoin dans AJAX dont vous n'auriez pas besoin autrement?
jhocking
1
Bien sûr - avez-vous déjà remarqué comment, sur ce site, il peut vous dire si quelqu'un a déjà répondu à une question? Cela se fait via une petite requête ajax. . .
Wyatt Barnett
@WyattBarnett AJAX ne signifie pas nécessairement un sondage. Vous pouvez simplement remplacer les chargements de page complète par des chargements de page partiels. Dans de nombreux cas, cela peut augmenter la charge du serveur, mais je ne pense pas que ce soit vrai dans "la plupart des cas".
Davy8
hm, eh bien, cet exemple me semble plus comme quelque chose que vous pouvez faire dans AJAX que vous ne pouvez pas autrement, plutôt que quelque chose qui nécessite plus de requêtes serveur qu'autrement. Je suppose que l'OP n'était pas clair s'il voulait dire "plus de performances en faisant exactement la même chose" ou s'il voulait dire "plus de performances en tirant pleinement parti d'AJAX"
jhocking
1
Notez que l'interrogation / l'interrogation longue sont un simple sous-ensemble d'AJAX (comme indiqué ici), également appelé «comète» . Les Websockets, qui permettent une «vraie» poussée sans interrogation ou AJAX côté serveur (à l'initiative du serveur) réduiront considérablement le gaspillage de ressources requis pour ce type de fonctionnalité.
Alan H.
2

Si vous utilisez AJAX pour remplacer le travail que le serveur ferait autrement, alors oui, cela améliorera les performances du serveur. Cependant, vous avez peut-être conçu des choses pour que le serveur en fasse toujours autant et maintenant tout ce qui se passe avec AJAX est au-dessus de ce que le serveur faisait déjà.

Il s'agit principalement d'interface utilisateur, car vous ne devriez rien faire d'autre côté client. Fondamentalement, tout ce que le serveur faisait pour prendre en charge l'interface utilisateur (par exemple, recharger la page avec une mise en page différente en réponse aux entrées de l'utilisateur) le fait avec JavaScript à la place.

jhocking
la source
0

Si le rendu HTML est une partie importante du profil de performances de votre serveur d'applications, le déplacement du rendu HTML vers le client peut être un gain de performances sur le serveur d'applications.

Cependant, si le rendu HTML ne représente qu'une petite partie du profil de performances de votre serveur d'applications, plus de demandes signifieront généralement plus de déplacements dans la pile, plus de requêtes, plus de tout sur le serveur d'applications, une perte de performances.

Bien sûr, la seule façon de savoir dans votre cas particulier est de l'essayer.

yfeldblum
la source
1
J'ai du mal à penser à des exemples où l'utilisation d'AJAX entraînerait plus de demandes que de faire la même chose sans AJAX. Pouvez-vous donner un exemple?
jhocking
1
Le HTML est toujours rendu côté client.
Jonas
1
Vraisemblablement, il a mal parlé et voulait dire «manipulation» et non «rendu»
jhocking
À partir de la vue / du modèle, en le combinant avec des variables et en rendant le HTML brut à partir de celui-ci.
yfeldblum
AJAX provoquerait plus de demandes que de faire la même chose sans AJAX dans des cas comme: votre disposition principale a des "trous" mais est livrée avec ces trous au navigateur, et ces trous sont "remplis" en utilisant AJAX. Voir par exemple Facebook.
yfeldblum
0

Vous devez considérer la meilleure façon de mettre en œuvre votre solution. Une forme simple non dynamique n'a pas besoin d'ajax et l'ajouter peut en fait nuire à la performance. Si votre problème est une mauvaise requête, toute l'optimisation ajax dans le monde ne vous apportera pas une augmentation des performances qui sera acceptable.

Si votre serveur est surchargé, vous devez comprendre pourquoi.

Si vous obtenez beaucoup de hits, ajax ne va pas résoudre ce problème, vous avez besoin de plus de capacité. L'ajout d'ajax ne fera qu'augmenter le nombre de demandes que votre serveur doit gérer.

Si vous avez une page compliquée, vous devriez voir s'il y a quelque chose que vous pouvez faire côté client pour réduire la charge sur votre serveur. Si votre page est dynamique mais a vraiment une mise en cache de paquet de données limitée, cela peut être plus avantageux pour l'ajustement côté client.

Et parfois Ajax vous aidera. Lorsque vous avez des formulaires complexes avec des données dynamiques, ajax gagne la journée. Mais si vos requêtes sont compliquées et prennent du temps à s'exécuter, ajax ne résoudra toujours pas votre problème.

SoylentGray
la source