34 votes

Les SPA (Single Page Applications) conviennent-elles aux sites destinés aux mobiles ?

J'ai l'intention de créer un site web avec environ 20 vues/pages différentes, principalement pour les téléphones mobiles.

Si je veux que l'expérience de l'utilisateur soit très réactive (c'est-à-dire rapide) lorsqu'il passe d'une page à l'autre, est-ce une bonne idée de créer le site en tant qu'application à page unique ?

Je sais qu'il existe de nombreuses astuces pour améliorer les performances globales d'un site Web mobile :

http://www.slideshare.net/blazeio/mobile-web-performance-optimization-tips-and-tricks

Mais je crains surtout que le JavaScript côté client (tel qu'AngularJS) ne réduise les performances, lorsqu'il doit effectuer des requêtes AJAX et afficher/cacher/créer des éléments de manière dynamique, par rapport à la création d'une requête HTTP traditionnelle pour obtenir la page et son contenu et les afficher directement.

Des ressources ou des commentaires qui pourraient m'aider à comprendre quelle architecture serait plus adaptée aux sites mobiles ?

37voto

o.v. Points 11173

En résumé, les applications à page unique requièrent une plus grande attention au niveau de leur architecture, en particulier si vous faites migrer les fonctionnalités d'un site Web existant (les projets de friches industrielles sont difficiles).

Un argument commun en faveur de l'APS porte sur moins de contenu téléchargé . Bien que techniquement correct, il est moins pertinent sur une connexion cellulaire à forte latence. Alerte spoiler : toutes les connexions cellulaires ont une latence élevée .

  • La différence entre le téléchargement de 10KB et de 15KB est négligeable, c'est l'établissement de la connexion qui enlève toute joie à l'expérience mobile.

  • Vous pouvez rarement influencer latence (bien que l'utilisation d'un CDN et l'hébergement dans le nuage le permettent), mais vous pouvez en compenser l'impact. Ressources Regroupement et minification est efficace, et les concepts sous-jacents sont applicables quel que soit l'environnement utilisé.

  • Vous devriez gzipper votre contenu de toute façon, et le mode de fonctionnement dégonfle encore (haha) l'argument de la taille. En fait, il se concentre sur les séquences de caractères répétées et est plus efficace pour des choses comme ballonné le balisage HTML plutôt que maigre JSON. Cela devient ridicule pour le javascript compilé par Clojure.

  • C'est toujours un bon conseil, mais assurez-vous que votre contenu est servi avec des données valides. Content-Length en-têtes pour permettre les connexions persistantes .

D'un autre côté, un argument anti-SPA courant se présente comme suit : ZOMG tellement de javascript . Bien sûr, vous ne pouvez plus vous permettre d'avoir des fuites de mémoire comme vous le "pouvez" sur un site web traditionnel (la plupart sont corrigées dès que l'on passe à une autre page), mais écrivez un bon javascript et vous serez récompensé.

  • L'utilisation de jQuery sur un site mobile est parfois un mal nécessaire. Autant l'utiliser correctement .

  • Plus vous avez de javascript, plus l'incitation relative à l'utiliser est grande. pas ré-exécuté à chaque "chargement de page". Tout cadre que vous incluez dans une page doit être initialisé avant de pouvoir être utilisé, ce qui nécessite l'analyse et l'exécution de son code... sur chaque page, il est utilisé . SPA n'a besoin d'effectuer cette étape qu'une seule fois (néanmoins, cela ne constitue pas une excuse pour une mauvaise gestion des dépendances).

  • Cela s'applique également aux CSS. Lorsqu'un nouveau contenu est ajouté au DOM à la suite d'une interaction avec l'utilisateur, il y a moins de re-flux et de ré-impression qu'un nouveau chargement ; il n'est pas non plus nécessaire que le navigateur analyse à nouveau les feuilles de style.

La véritable force d'une application à page unique réside dans son performance perçue . Vous et moi savons que le fait de toucher un lien n'est pas résolu instantanément, mais l'utilisateur n'est pas obligé de le faire. Rendre le site réactif aux interactions de l'utilisateur en ajoutant des états tactiles et une fonction d'accélération bien programmée améliorerait considérablement l'expérience utilisateur. Bien sûr, vous pouvez toujours aller plus loin et récupérer à l'avance certains contenus. Peut-être serait-il judicieux de charger la page, l'élément ou la photo suivante en arrière-plan, dès que la page en cours est prête ?

Ne négligez pas le fait que les SPA sont à la mode, ni le facteur de motivation que représente le fait de pouvoir jouer avec des frameworks fascinants. Bien sûr, les utilisateurs finaux ne s'intéressent pas à ce genre de choses, mais vous avez l'occasion d'apprendre quelque chose de nouveau et un framework MVVM mature pourrait vous faire oublier ce satané ajax et vous permettre de vous concentrer sur d'autres aspects de l'application.

5voto

Tibos Points 12774

Le recours aux SPA offre deux grandes possibilités dont vous pouvez tirer parti pour améliorer l'expérience des utilisateurs :

Moins de contenu téléchargé

Si vous avez des pages HTML différentes pour chaque page de votre application, vous devrez télécharger chacune d'entre elles dans son intégralité. Si votre site partage un balisage commun entre les pages, il sera retéléchargé pour chaque page. Comparez cela avec un SPA où, au minimum, vous ne téléchargez que les modifications nécessaires pour passer de la page actuelle à la suivante. Dans certains cas, l'amélioration sera minime, dans d'autres, elle sera assez importante.

Un autre moyen d'améliorer l'efficacité des SPA consiste à séparer la logique de construction du balisage et les données. Prenons l'exemple d'une liste contenant 100 noms et scores :

Traditionnel :

<ul id="myList">
  <li><strong>Name 1</strong> score 1</li>
  <li><strong>Name 2</strong> score 2</li>
  <li><strong>Name 3</strong> score 3</li>
  ...
  <li><strong>Name 100</strong> score 100</li>
<ul>

SPA :

<ul id="myList"></ul>

var myData = { 
  "Name 1" : "score 1",
  "Name 2" : "score 2",
  "Name 3" : "score 3",
  ...  
  "Name 100" : "score 100"
}
var html = '';
for (var name in myData) {
  var html += '<li><strong>' + name + '</strong> ' + myData[name] + '</li>';
}
document.getElementById('myList').innerHTML = html;

Le modèle SPA peut économiser des octets même lors de la construction du DOM. De plus, la logique est réutilisable, donc si vous devez reconstruire la liste avec plus de contenu, il vous suffit d'ajouter des éléments à un objet et d'appeler une méthode.

Trouver l'équilibre parfait entre la taille du téléchargement et le traitement nécessaire est un problème très difficile qui dépend de nombreux facteurs, notamment des particularités de l'application, du périphérique, des autres astuces possibles, etc. Heureusement, une approche fondée sur le bon sens donne d'assez bons résultats la plupart du temps.

Transitions

À part quelques expériences avec IE, il est impossible de modifier les transitions entre les différentes pages dans le navigateur. Il s'agit d'un argument de vente important pour les SPA car, grâce à des transitions astucieuses, vous pouvez donner une impression de rapidité même si le site n'est pas si rapide. Même sans transitions, un SPA est bien mieux adapté qu'un site ordinaire pour donner un feedback à l'utilisateur pendant le chargement.

Il convient de noter que vous devez vous concentrer sur le chargement initial de la page pour qu'il soit le plus fluide possible (en ne chargeant que le strict minimum) et ensuite regrouper les demandes autant que possible. Un gros problème avec la latence mobile est que si l'appareil n'a pas besoin d'utiliser la radio pendant un certain temps, elle sera désactivée. Le fait de la rallumer entraîne une surcharge importante, c'est pourquoi les demandes doivent être groupées autant que possible.


Mon conseil personnel est que si vous pouvez aller au SPA, vous devriez le faire. Il y a très peu de choses qui peuvent être faites pour améliorer l'efficacité des sites HTML ordinaires, alors que je soupçonne que les SPAs continueront à être améliorés constamment dans le futur. Au minimum, vous pouvez attendre d'un SPA soigneusement construit des performances similaires à celles d'un site HTML classique, et les opportunités potentielles peuvent apporter de grandes récompenses.

2voto

James Ramirez Points 56

TL;DR : Oui, c'est faisable mais vous devez être discipliné et le bénéfice est sur la perception de la performance.

Au cours des derniers mois, j'ai travaillé sur la transition d'une application web traditionnelle centrée sur le serveur vers un SPA réactif. Plus précisément, nous avons choisi une conception MV* soutenue par un routeur médiateur et une extraction découplée avec AMD. Nous envisageons de passer à RVP .

J'ai inclus certains de nos principes de conception ci-dessous :

  • Décidez à l'avance dans quelle mesure votre plate-forme prendra en charge l'amélioration progressive. Moins il y aura de scripts nécessaires, mieux ce sera. Nous comptons sur notre processus de construction pour nous assurer que nous pouvons prendre en charge le HTML et d'autres contenus générés dynamiquement mais servis statiquement.
  • Construisez votre chaîne d'outils dès le début (minification, traitement d'images ou spriting, etc.).
  • Découpler autant que possible l'extraction des données des actions de l'utilisateur, en utilisant le stockage local et des techniques comme l'extraction préalable ou l'extraction prédictive.
  • Veillez à mesurer ce que font vos utilisateurs afin de pouvoir (si cela a un sens) récupérer progressivement la logique ou le contenu de l'application.
  • Soyez vraiment pointilleux sur les frameworks qui supportent le reste de votre architecture (plutôt que de les dicter).
  • Soyez vraiment pointilleux sur les composants et utilitaires tiers que vous utilisez. Évitez les frameworks dont vous n'utilisez pas une part importante des fonctionnalités (tout ce que vous n'utilisez pas représente un coût supplémentaire en termes de poids, de latence, de traitement sur l'appareil, etc.)

Vous pouvez trouver ceci comparaison des cadres utile

2voto

PW Kad Points 7796

Restez simple -

Oui, les applications monopages sont parfaitement adaptées au développement mobile. Les frameworks SPA tels que Durandal, Angular, Backbone, Ember, etc... ne nécessitent qu'un moteur JavaScript pour fonctionner efficacement. Ils sont compatibles avec tous les navigateurs et ne nécessitent rien de spécial pour fonctionner sur chaque taille d'écran, résolution ou appareil individuel, et tirent parti des moteurs puissants des appareils mobiles.

Qu'est-ce qui les rend si bien adaptés ?

Avec une application d'une seule page, vous pouvez mettre en place tous les crochets pour la liaison de données bidirectionnelle déclarative avec des bibliothèques telles que Knockout, Handlebars ou Angular qui remplaceront toutes les manipulations DOM jQuery que vous utiliseriez dans un site Web traditionnel. Cela favorisera l'utilisation de composants réutilisables tels que les directives et les gestionnaires de liens personnalisés, ce qui réduira la quantité de code nécessaire et facilitera les tests, puisque les liens seront réutilisés dans l'ensemble de votre application.

Qu'est-ce qui fait qu'ils ne sont pas si bons pour le mobile ?

Les applications monopages peuvent souvent s'engager sur la voie d'une conception médiocre dont il sera difficile de se remettre (comme pour tout autre développement). grand Le chemin à prendre pour créer une application évolutive et souvent les développeurs de SPA font des suppositions pour la première fois. Il est possible de remédier à ce problème en tirant parti des ressources (telles que le support payant, StackOverflow, etc.) ou en effectuant une révision approfondie du code dès le départ, autour des fondements de votre SPA.

Qu'en est-il des performances ?

Les applications à page unique sont rapides comme l'éclair dans la plupart des cas. L'idée de base est d'utiliser l'injection de dépendances et des bibliothèques comme Require.js pour charger les modules AMD, ce qui permet au développeur de ne demander aux clients de télécharger les fichiers HTML et JavaScript que rarement, lorsque des modifications sont apportées. En chargeant à partir du cache, vous réduisez essentiellement les appels de données au serveur. Ceci est conforme aux techniques de développement web RESTful.

1voto

Pandiyan Cool Points 2088

SPA est un bon choix pour les sites mobiles. Le modèle suivant semble avoir de bonnes performances sur les sites SPA mobiles.

Hottowel
(Aperçu)

Avec un temps de réponse plus court, vous pouvez obtenir de bonnes performances. J'ai essayé le modèle ci-dessus pour créer un site web qui supporte à la fois les navigateurs mobiles et les navigateurs web.

  1. Utilisez le jquery pour rendre le processus dynamique.
  2. Utilisez l'appel ajax pour effectuer les appels rapides aux données selon les besoins.
  3. L'architecture MV vous donnera une image claire pour mettre en œuvre vos concepts.
  4. HTML5 sera le meilleur choix pour le front-end
  5. Utilisez une API distincte pour traiter les données, ce qui augmentera vos performances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X