web-dev-qa-db-fra.com

Avantages / inconvénients des applications Web "séparées"

Je suis en train de concevoir une application web PHP/MySQL plutôt volumineuse (qui devrait bientôt l'être). Je suis arrivé à un embranchement en ce qui concerne l'architecture interne; Je peux créer le site Web en tant qu’application Web "traditionnelle" dans laquelle, lorsque vous faites une demande, le serveur vous construit une page HTML, vous envoie la page entière et le navigateur l’a restituée, ou je peux le construire en tant que "fichier séparé". "application Web où la structure et le code HTML complets de l’application sont fournis au navigateur lors du chargement initial, et que l’application utilise des rappels JavaScript pour obtenir des données spécifiques ou émettre des commandes via une API unifiée. De plus, j’ai l’intention de créer plusieurs versions du site (ordinateur de bureau, mobile, iPhone/mobile Android, moteur de recherche convivial, etc.) et éventuellement, même des applications de bureau ou mobiles autonomes.

Quels avantages/inconvénients avez-vous, en tant que développeurs Web, avec chacune de ces architectures? Y at-il une raison claire pour laquelle je devrais aller avec l'un sur l'autre? Est-ce plutôt une question de préférence des développeurs?

3
Adam Maras

Premièrement, que vous utilisiez un site Web lourd asynchrone ou non aura peu d'incidence sur votre capacité à créer des applications iPhone/Mobile et de bureau, car cela n'a rien à voir avec elles. De toute façon, vous ne pourrez pas réutiliser votre code.

De plus, les sites asynchrones peuvent être aussi lents ou plus lents que les sites normaux. Généralement, ce type de fonctionnalité est ajouté pour une raison spécifique, en particulier pour une expérience utilisateur enrichie. L'utilisation de JavaScript a tendance à vous faire mal en matière de référencement, car les webcrawlers ne peuvent pas comprendre entièrement l'intention de JavaScript et l'ignorer pour la plupart.

Je pense que ce que vous recherchez est un moyen de réduire vos coûts de développement en n'écrivant qu'une seule fois votre niveau fonctionnel (intermédiaire) et en utilisant le même pour toutes vos applications. Dans ce cas, je pense qu’il ya de la valeur, mais franchement, ce type d’architecture est plus difficile à mettre en place et prend beaucoup de temps. Je pense que vous devriez développer votre site Web du mieux que vous pouvez et garder votre code de niveau intermédiaire aussi fort que possible. Ainsi, lorsque vient le temps d'ajouter une application iPhone ou tout ce que vous pourrez passer plus facilement à un modèle avec un niveau intermédiaire commun

Ce que je préconise vraiment ici, c'est faire des pas en avant. N'essayez pas d'écrire du code maintenant pour gérer des choses que vous ne connaissez pas encore. Écrivez simplement le code dont vous avez besoin et rendez-le aussi flexible que possible.

4
Ben Hoffman

Je pense que l'idée d'une application "séparée" qui repose beaucoup sur JavaScript/AJAX va vous causer beaucoup de problèmes. Quelques choses qui me viennent à l’esprit:

  1. Cela va être mauvais pour le référencement puisque Google aura du mal à indexer quoi que ce soit.
  2. Ça va être difficile de le rendre "bookmarkable"
  3. Vous aurez de la difficulté avec les appareils mobiles car beaucoup d'entre eux ont un support javascript très limité (ou cassé).
5
Eric Petroelje

Tout d’abord, n’offensez pas si cette réponse est trop évidente ou fondamentale. Votre utilisation de "séparé" au lieu de termes comme Ajax ou jQuery me fait supposer moins d'expérience avec ce sujet. Bien sûr, je pourrais mal interpréter la question, alors je m'excuse si c'est le cas.

Utilisez les deux, mais judicieusement

Pensez à votre choix de tâches côté serveur ou côté client en termes d’où et comment une tâche est exécutée le plus efficacement possible. Cela vous aidera à afficher rapidement les pages (sur le serveur), mais délègue le travail au navigateur dans les cas où il est judicieux de le faire. Et, il y aura des zones grises où il vous suffira de faire appel à votre jugement. Votre travail consiste à trouver une division intelligente du travail.

Qu'est-ce qui appartient au serveur?

(Ceci est un exemple extrême pour illustrer ce point.) Supposons que vous écrivez une application Web qui effectue un certain type de recherche. Vous n'écrivez pas de code JavaScript côté navigateur pour appeler un service Web PHP côté serveur afin de récupérer une base de données complète de 2 Go afin de "libérer votre serveur" et de décharger la recherche sur la machine de l'utilisateur. Ce que vous faites est de récupérer les termes de recherche auprès de l'utilisateur avec un formulaire, POST au serveur pour interroger directement la base de données, puis renvoyer les résultats du serveur au navigateur.

La logique est que la base de données elle-même sait comment effectuer la requête de manière optimale, le serveur est plus proche des données source et moins de données doivent être déplacées entre les composants. Le navigateur n'a besoin que de ce qu'il affiche, aussi ne l'envoyez pas au navigateur. (Sans parler de la performance linguistique relative.)

Qu'est-ce qui appartient au navigateur?

Le code côté navigateur est votre scénario "séparé" (si je comprends bien). Mais pour que le navigateur fasse le plus intelligent, il doit coopérer serveur.

D'accord, votre application de recherche fonctionne, mais vous voulez l'améliorer avec des pantalons fantaisie, Ajax. Écrivez un service Web PHP pour prendre quelques lettres et renvoyer les termes de recherche correspondants à la fonctionnalité de "suggestion de recherche" de Bing. , Google, etc. Ecrivez le code de votre navigateur pour ne suggérer que les termes après que l'utilisateur a saisi trois ou quatre lettres. Votre liste de suggestions est donc petite. De retour sur le serveur, indexez votre base de données sur ce champ pour que la recherche soit rapide, rapide, rapide.

Ici, on pense que "suggérer une recherche" est une fonctionnalité qui doit être partagée entre le serveur et le client. Le navigateur peut traiter rapidement des piles de données ciblées et de petite taille. Le serveur peut obtenir cette pile de données ciblée et réduite et la transmettre au client. Une mauvaise division consisterait pour le serveur à restituer une liste de monstres (par exemple 500 000 éléments) de valeurs de champs possibles sous la forme d'un îlot XML incorporé dans la page HTML, puis le navigateur effectuera une recherche en tapant l'utilisateur. (a) l'envoi de toutes ces données au navigateur est lent, (b) une recherche en Javascript ne sera jamais aussi rapide que de laisser la base de données le rechercher, et (c) vous risquez de faire exploser la machine d'un utilisateur en écrasant toutes ces données dans l'espace d'application de leur navigateur. D'autre part, vous devez vous assurer que l'appel Ajax au serveur, ainsi que la requête et le retour ultérieurs sont extrêmement rapides. Pas de dilly-Dallying autour.

Où est la zone grise?

Là encore, c'est un jugement. Ci-dessus, j'ai parlé du serveur effectuant la recherche, puis envoyant les résultats au navigateur. Mais, la question se pose, laissez-vous le navigateur soumettre les termes de recherche avec le formulaire et demandez au serveur de rendre la page de résultats, ou utilisez-vous Ajax/Javascript côté client pour envoyer les termes de recherche et récupérer les résultats, puis les restituer dans une DIV pour éviter une actualisation de la page? Les deux sont valables. Du point de vue des ressources, il n'y a aucun avantage réel de toute façon. La méthode Ajax peut fournir une meilleure expérience utilisateur mais, en fonction de votre application et des circonstances, peut présenter d'autres problèmes (par exemple, la sécurité).

Ligne de fond

Utilisez les deux de manière appropriée. Ne lésinez pas sur la réflexion et l'apprentissage sur les performances architecturales et l'efficacité. Déplacez moins de données, moins de fois. Vous allez alléger vos serveurs, vos bases de données et les navigateurs de vos utilisateurs.

2
b w

Afin de pouvoir réutiliser du code, vous pouvez toujours consulter XSLT pour la génération de pages de destination, puis disposer d'interfaces XML/JSON pour AJAX (en utilisant l'interface XML pour les pages de destination XSLT).

Vous autoriserez normalement le contenu et l'interaction à fonctionner sur une interface RESTful avec les préfixes/json/... et/xml/... et à héberger votre contenu principal, converti en balise via XSLT sur/...

De cette façon, les gens peuvent atterrir sur n’importe quelle page et avoir soudainement le site complet AJAX. Les araignées peuvent explorer votre site et vous vous êtes concentré avant tout sur le contenu/les interfaces - cela semble être une solution gagnante/gagnante.

Les sites Web mobiles ont parfois besoin de configurations différentes (des sites iPhone réservés à tout le monde?). Une simple conversion XSLT ici ou là pour différents utilisateurs peut permettre de réutiliser tout ce que vous avez fait jusqu'à présent.

N'oubliez pas de concevoir pour une sortie et une navigation HTML simples, les simplifications AJAX peuvent suivre.

PS - Faire le côté serveur de transformations XSLT

1
Metalshark