Le temps de démarrage d'une application Web est-il vraiment si important?

11

A eu une conversation avec quelqu'un au sujet de l'ajout d'un code d'initialisation au démarrage de l'application et il s'est plaint que cela provoquait une augmentation du temps de démarrage. Il ne pouvait pas vraiment donner de raison (sentiment d'intestin ou quelque chose, je ne sais pas). Ce n'est pas une application à usage intensif et démarre dans environ une minute environ, nous déployons quelques fois par an.

Je me souviens avoir lu ces conseils sur les questions sur SO il y a quelque temps, les gens conseillant d'initialiser au démarrage plutôt qu'à l'accès à la page avec le timbre "si vous pouvez vous permettre la pénalité".

J'ai travaillé avec des applications Web qui ont commencé de 30 secondes à 4-5 minutes, mais une fois en ligne, elles ont basculé.

Alors qu'est-ce qui me manque? À moins que ce soit une application vitale comme ... je ne sais pas ... pour le marché financier, les applications médicales, l'exploration spatiale, etc., est-ce vraiment si important le temps de démarrage?

PS Je me réfère strictement aux applications Web, les applications de bureau vont commencer à éclater rapidement.

JohnDoDo
la source
Existe-t-il une exigence non fonctionnelle définie pour le démarrage de l'application ou s'agit-il simplement d'une discussion en cours de développement?
StuperUser
@StuperUser: aucune exigence, juste une discussion jusqu'à présent.
JohnDoDo
Il y a en fait un site d' expérience utilisateur où cela serait mieux demandé.
Cyclops
@Cyclops: En fait, je suis plus intéressé par les raisons du côté serveur de la clôture, pas du côté utilisateur.
JohnDoDo

Réponses:

18

Cela peut être un facteur important pendant le développement: si votre plate-forme ne prend pas en charge le changement de code dans une application en cours d'exécution, le temps de démarrage fait alors partie de votre cycle de rétroaction, et là, même 30 secondes sont douloureuses et menacent la productivité.

Pour l'environnement de production, cela n'a vraiment pas d'importance; Soit un petit temps d'arrêt est acceptable et 5 minutes ne sont toujours pas beaucoup, soit ce n'est pas le cas et vous devez implémenter une sorte de basculement en direct.

Michael Borgwardt
la source
Oui, je pensais autant au cycle de développement, mais ce n'est pas comme si nous modifions une virgule, déployons, modifions un nom de variable, déployons etc. Je déploie personnellement sur le développement un maximum de 10 fois / jour. Une minute de démarrage ou 1.2 n'est pas si différent.
JohnDoDo
7
@JohnDoDo: Quelle part de cela est un flux de travail vraiment naturel et combien évite-t-il habituellement un long déploiement? Un cycle de rétroaction rapide peut énormément améliorer la productivité. Parfois, vous avez besoin d'apporter de petits changements incrémentiels et de voir immédiatement le résultat. Il y a 50 ans, les gens écrivaient des programmes sur papier, les soumettaient à un opérateur et obtenaient un résultat imprimé le lendemain - parfois juste une erreur de compilation. Cela ne vous semble-t-il pas une manière horriblement inefficace de travailler? Eh bien, pour de nombreux programmeurs, vos 10 déploiements par jour semblent être comme ça.
Michael Borgwardt
1
Si possible, évaluez la possibilité de faire un "faux" init, ou d'avoir les structures sérialisées sur disque avec des données de test pour accélérer les temps de démarrage pendant le développement.
Vinko Vrsalovic
Je suis d'accord avec Vinko, existe-t-il un moyen de désactiver les fonctions init () coûteuses lors de la construction en mode débogage? Ne vous embêtez pas si ce que vous initialisez vous donnera des résultats différents sur le développement et la production.
AndyMcKenna
4

Je crois que c'est le cas lorsque le célèbre principe dialectique de Hegel de transition de la quantité à la qualité fonctionne réellement.

Vous voyez, le timing est toujours important. Je suis d'accord avec les mots de Michael Borgwardt sur l'importance d'une construction rapide pendant le développement / test, mais j'insiste sur le fait que (peut-être d'une autre manière) c'est également très important pour la production.

Chaque développeur qui a déployé du mauvais code en production sait que le correctif fourni en 5 minutes et en 1 minute est vraiment très différent.

shabunc
la source
2

La vraie question est de savoir si l'application fonctionnera sans l'initialisation. Nous avons de nouvelles recrues qui sont obsédées par la «performance», ma réponse courante est que je me fiche de la rapidité avec laquelle vous donnez les mauvais résultats. À mon humble avis, couper les algorithmes parce que "ce sera plus rapide de cette façon" et d'autres bonnes idées n'introduisent que des bugs.

Si l'initialisation est requise, faites-le. Combien de temps sera perdu lorsque les utilisateurs finaux obtiennent les mauvais résultats, finissent par comprendre que l'application Web est incorrecte, vous appellent et se plaignent, et vous devez revenir en arrière et déboguer / corriger / tester / redéployer? demandez maintenant à votre collègue comment vous avez gagné du temps. (et je parie que les cœurs de votre serveur sont inactifs à 99% de toute façon)

jqa
la source
2

Cette question ne concerne aucune plateforme particulière. Il existe des plateformes sur lesquelles le temps de démarrage est vraiment très important.

Par exemple, sur Google App Engine; si votre page n'est pas consultée (ou plutôt, qu'elle est consultée moins fréquemment qu'une autre application sur le même nœud), elle sera déchargée de temps en temps.

Ainsi, si vous êtes dans les 99% de la fréquence d'accès au site, le temps de démarrage est le temps d'accès; votre application est redémarrée à presque tous les accès. si vous êtes dans le 1% supérieur, votre application démarre sur de nombreux nœuds, et bien que de nombreux accès aux pages reviennent à partir d'une instance déjà démarrée, certains ne le seront toujours pas, et vous aurez donc des temps d'accès longs et intermittents .

Cette même chose est vraie sur de nombreux autres environnements d'hébergement. Les fuites dans les bibliothèques tierces, ou même dans votre propre code qui ont simplement échappé à la découverte, pourraient signifier que le seul moyen fiable d'exécuter votre service Web est de le faire recharger toutes les requêtes (souvent entre 100 et 10 000), etc. le temps de démarrage est payé fréquemment. L'utilisation de ce modèle est acceptable lorsqu'une application fuit, mais démarre rapidement; cela ne fonctionne pas lorsque l'application prend plus de quelques secondes pour démarrer.

SingleNegationElimination
la source
1

Vous courez le risque que votre application soit considérée comme inférieure aux normes ou pire encore, votre capacité de développement. Maintenant, cette application peut faire gagner tellement de temps à quelqu'un et / ou effectuer une tâche si nécessaire que les utilisateurs reconnaissants peuvent regarder au-delà du long démarrage.

La programmation peut prendre plus de temps pour charger l'application paresseusement, mais seules les parties prenantes peuvent déterminer si cela en vaut la peine. J'ai eu un rapport qui a fonctionné en 55 secondes. et nous sommes descendus à 35. Personne ne l'a remarqué. Bien que j'aie passé deux fois plus de temps à passer de 35 à 18 ans, tout le monde a remarqué et était reconnaissant et impressionné. Passer de 5 à 3 minutes pour une application utilisée plusieurs fois par an n'est pas un problème. Les utilisateurs auront juste moins de temps à consacrer à Facebook ou à prendre un café.

La perception est la clé. Si la société n'est pas satisfaite des équipes de développement en général et de cette application en particulier, vous voudrez peut-être créer de la bonne volonté et accélérer la chose.

JeffO
la source
Cependant, le temps de démarrage de l'application Web ne devrait pas affecter les utilisateurs normaux. L'autre développeur est ennuyé car il redémarre personnellement l'application plusieurs fois par jour dans le cadre d'un développement régulier.
AndyMcKenna