Apprenez à maîtriser le langage réseau sur lequel repose la plupart des jeux web!

Status code

Chaque réponse HTTP fournit un code de statut, qui indique si la requête s’est bien déroulée. Ce code est capital, car il fournit un moyen standardisé de dire si une action s’est bien déroulée côté serveur, ou d’indiquer au navigateur ce qui a échoué (une erreur de saisir du client? un problème du serveur?). En fonction de ce statut, le navigateur pourra alors ou bien proposer à l’utilisateur de corriger son erreur (dans le cas d’un formulaire mal rempli par exemple) ou bien indiquer à l’utilisateur que le site est indisponible. De même, les moteurs de recherche seront capables de comprendre le jeu bien plus facilement, et les développeurs qui utilisent peut-être votre site comme une API sauront ce qui a foiré dans leur appel. Enfin, il vous sera facile d’installer des outils tiers comme un reverse-proxy ou des statistiques par code HTTP. Il ne faut donc surtout pas retourner ce statut dans le contenu de la page web (par exemple, bannissez les réponses JSON contenant

{ success: false, errorMessage: 'Usine introuvable' }

).

Le bon code HTTP vous permettra d’identifier facilement le type de réponse, et de dresser des statistiques pertinentes sans effort.

Optimisation

Compression

La compression peut se faire soit à la volée via AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript soit statique en créant un .gz de vos JS et CSS puis en les servant avec le header Content-Encoding: gzip ou en laissant Apache faire grâce à l’envvar RewriteRule ^ - [E=no-gzip:1]. Evitez toutefois de compresser les pages servie via HTTPS, car il peut exister des failles de sécurité (mais celles-ci sont marginales et peuvent être ignorées dans un jeu web).

N’hésitez pas à compresser statiquement (sous la forme de fichier *.gz) les ressources de votre jeu, pour éviter de toujours devoir les compresser à la volée.

Cache

Enfin, dites au navigateur de garder les ressources du jeu en cache le plus longtemps possible via Cache-Control (public, max-age=... pour une ressource identiques à tous les joueurs, et private, max-age=... pour une ressource spécifique à un joueur: le 1er autorise les proxies intermédiaires à cacher la réponse, alors que le 2nd n’autorise que le client final [le navigateur] à faire cette mise en cache). Le navigateur téléchargera nettement moins de données, et il ne sollicitera même plus votre serveur, accélérant énormément le temps de chargement des pages du jeu (par exemple, sur Isometry, le cache divise par 5 le temps de chargement des pages!). Pour forcer la mise à jour du cache, il faudra néanmoins modifier l’URL de la ressource, en rajoutant par exemple un paramètre ?t=... correspondant au timestamp de la dernière mise à jour (ou à la version de la ressource, ou à sont ETag ou à son MD5).

# Code Apache de cache
ExpiresActive On
ExpiresDefault "access plus 1 hour"

Header Accept-Language

Ce header est envoyé par le navigateur et lu par Apache via %{HTTP:Accept-Language} (ou par PHP via $_SERVER['HTTP_ACCEPT_LANGUAGE'] ou Locale::acceptFromHttp). Il décrit les langues que l’utilisateur souhaite recevoir. Cela vous permettra donc de servir à vos joueurs la bonne traduction de votre jeu web.

Liens utiles