Est-il préférable de mettre le code JS sur le fichier html ou dans un fichier externe?

16

Si je conçois un site Web d'une page, est-il préférable de créer un fichier externe pour mon code JS, ou simplement de le mettre dans le code html? Le mettre sur la page est-il plus rapide à charger? Puis-je modifier les autorisations pour refuser les demandes des utilisateurs pour le code, mais la page html peut toujours appeler le code?

AqeelAT
la source

Réponses:

26

Vous devez mettre votre code JS dans un fichier séparé car cela facilite le test et le développement. La question de savoir comment vous servez le code est une question différente.

  • Servir le HTML et le JS séparément a l'avantage qu'un client peut mettre en cache le JS. Cela vous oblige à envoyer des en-têtes appropriés afin que le client n'émette pas de nouvelle demande à chaque fois. La mise en cache est problématique si vous souhaitez effectuer une mise à jour et donc invalider les caches client. Une méthode consiste à inclure un numéro de version dans le nom de fichier, par exemple /static/mylibrary-1.12.2.js.

    Si le JS est dans un fichier séparé, vous ne pouvez pas restreindre l'accès à celui-ci: il est difficile (techniquement: impossible) de dire si une demande à un fichier JS a été faite parce que vous l'avez référencé sur votre page HTML, ou parce que quelqu'un veut le télécharger directement. Vous pouvez cependant utiliser des cookies et refuser de servir des clients qui ne transmettent pas certains cookies (mais ce serait idiot).

  • Servir le JS à l'intérieur du HTML augmente la taille de chaque page - mais c'est OK si un client a peu de chances de voir plusieurs pages. Étant donné que le client n'émet pas de demande distincte pour le JS, cette stratégie charge la page plus rapidement - pour la première fois au moins, mais il existe un point d'équilibre où la mise en cache est meilleure. Vous pouvez inclure le JS par exemple via PHP.

    Ici, le client n'a pas besoin d'un accès séparé au fichier JS, qui peut être masqué si vous le souhaitez. Mais n'importe qui peut toujours voir le code JS à l'intérieur du HTML.

D'autres stratégies pour minimiser les temps de chargement incluent

  • Minification JS qui réduit la taille du fichier JS que vous servez. Comme la minification ne se produit qu'une seule fois lors du déploiement du code, il s'agit d'une méthode très efficace pour économiser des octets. OTOH cela rend votre code plus difficile à comprendre pour les visiteurs intéressés.

    Liée à la minification est la pratique de combiner tous vos fichiers JS dans un seul fichier. Cela réduit le nombre de demandes nécessaires.

  • Compression, qui ajoute une surcharge de calcul pour chaque demande sur le client et le serveur. Cependant, le temps passé (dé) compressé est généralement inférieur au temps passé à transmettre les données non compressées. La compression est généralement gérée de manière transparente par le logiciel serveur.

Ces techniques s'appliquent également à d'autres ressources comme les images.

  • Les images peuvent être insérées en HTML ou CSS avec des URL de données. Cela n'est pratique que pour les petites images simples, car l'encodage base64 gonfle la taille. Cela peut toujours être plus rapide qu'une autre demande.
  • Plusieurs petites images (icônes, boutons) peuvent être combinées en une seule image, puis extraites sous forme de sprites.
  • Les images peuvent être réduites par le serveur à la taille dans laquelle elles sont réellement utilisées sur le site Web, ce qui économise de la bande passante. Comparez les images miniatures.
  • Pour certains graphiques, les images textuelles comme SVG peuvent être beaucoup plus petites.
amon
la source
"Test et développement plus faciles", je ne suis pas sûr qu'il soit toujours utile d'avoir JS dans son propre fichier à cet effet. Dans un projet, j'utilise de très petits fichiers HTML, et il est en fait plus organisé pour les inclure dans le HTML. En ce qui concerne la mise en cache, cela peut améliorer les vitesses sur plusieurs visites (peut-être), mais pour le premier chargement de page, il sera toujours plus rapide d'inclure le javascript directement dans le HTML.
YungGun
5

Je conçois un site Web d'une page

Si vous n'avez qu'une seule page, alors oui, il est préférable (du point de vue des performances) de tout servir dans un seul fichier ... des feuilles de style, du JavaScript et même des images (petites images alignées avec des URI de données). Cela élimine les demandes HTTP supplémentaires nécessaires pour récupérer des ressources externes qui sont relativement lentes.

Le fichier résultant doit être compressé avant de servir, ce qui réduira considérablement la taille de la réponse en texte intégral.

Vous devez toujours envisager d'avoir de grandes images externes à la page, car il y a des limites à la taille des URI de données et à la compatibilité du navigateur. (Par exemple, IE8 a une limite de 32 Ko, ce qui équivaut à une taille de fichier réelle d'environ 23 Ko en raison de la nature de l'encodage base64.)

Puis-je modifier les autorisations pour refuser les demandes des utilisateurs pour le code, mais la page html peut toujours appeler le code?

Non. Au mieux, le code peut être obscurci afin de le "cacher" à l'observateur occasionnel, mais il n'offre aucune protection réelle.

MrWhite
la source
1
Pourquoi le vote négatif? Bien qu'il soit préférable pour les sites de développement et les pages multiples d'avoir des fichiers séparés / externes, l'OP dans ce cas demande spécifiquement un "site Web d'une page" et s'il est "plus rapide à charger". La minimisation des requêtes HTTP devrait être une priorité dans cette instance. Vous pouvez (et devez) continuer à développer avec plusieurs fichiers, mais ce n'est pas la question qui se pose.
MrWhite
En plaçant les js, css et images dans des fichiers séparés, vous autorisez le navigateur à mettre en cache les fichiers. Donc, si le contenu de la page change, seul le code HTML devra être rechargé.
Thierry J.3
@ThierryJ. D'accord, vous pouvez mettre en cache les fichiers mais au premier chargement de page (ce qui est très important pour acquérir de nouveaux utilisateurs), il est encore beaucoup plus rapide d'inclure tous les fichiers car la mise en cache n'est pas en vigueur. En outre, l'ordinateur doit toujours charger le fichier mis en cache, une étape qui est complètement ignorée si vous incluez le fichier dans le code HTML. Il sera probablement plus rapide d'avoir simplement le fichier inclus dans le HTML en premier lieu dans presque tous les cas. Vous devrez de toute façon recharger le code HTML, et la partie javascript ne peut pas dépasser les cent Ko, c'est négligeable.
YungGun
4

Le code JS côté client doit être vu par le navigateur (c'est-à-dire si la page doit utiliser JS directement) - cela signifie qu'il doit être téléchargé par le navigateur.

Un navigateur ne peut pas utiliser JS sur la page s'il ne peut pas le télécharger.

À cet égard, cela ne fait aucune différence si vous insérez le JS ou le placez dans un fichier, bien que la pratique courante consiste à utiliser un fichier JS (séparation des préoccupations pour un).

Si vous avez du code que vous ne souhaitez pas exposer au navigateur, vous devrez utiliser du code côté serveur (par exemple, node.js, php, perl, asp.net, jsp - il y a tellement d'options) et interagir avec lui depuis le navigateur - soit lors du chargement initial de la page, soit en utilisant AJAX .

Oded
la source
2

Eh bien, cela dépend de la quantité de code et de votre sérieux en tant que programmeur / ingénieur logiciel par rapport à un simple codeur. J'ai travaillé avec un tas de designers qui ont mis de courts extraits de code directement en HTML, et pendant que je grincais des dents - cela a réellement fonctionné.

Bien que ce ne soit pas quelque chose que je ferais moi-même, et si vous voulez connaître les meilleures pratiques de développement logiciel, je vous conseille fortement de tout mettre dans un *.jsfichier externe et de le charger via des <script>balises.

En ce qui concerne votre deuxième point, non, vous ne pouvez pas refuser à un utilisateur ou à un navigateur de voir votre code, il y a quelque chose appelé obfuscationqui rendra votre code plus difficile à lire, mais les performances se dégraderont.

David Sergey
la source
1

est-il préférable de créer un fichier externe pour mon code JS, ou simplement de le mettre dans le code html?

Il est préférable de créer un fichier externe pour votre code JS. Il est également préférable d'avoir un ou deux fichiers que vous servez au client. Mais, il est également préférable d'avoir votre code JS divisé en plusieurs fichiers pour des problèmes de maintenabilité. Pour ce faire, vous pouvez utiliser des préprocesseurs comme Gulp qui combineront vos différents fichiers JS en un seul fichier.

Servir moins de fichiers est meilleur car le client aura moins de requêtes HTTP à gérer.

Le mettre sur la page est-il plus rapide à charger?

Oui, évidemment, c'est plus rapide puisque vous ne faites qu'une seule demande pour le HTML, alors que vous feriez plusieurs demandes (au moins 2) avec votre code JS en tant qu'externe. C'est seulement si votre code JS n'est pas minifié des deux côtés, et cela ne prend pas en compte la difficulté de maintenir votre code s'il est tout dans une seule page HTML.

Puis-je modifier les autorisations pour refuser les demandes des utilisateurs pour le code, mais la page html peut toujours appeler le code?

Non tu ne peux pas. Le code JS, comme le code CSS et le code HTML, est un contenu statique. Cela signifie qu'une fois qu'il est dans le navigateur, le client peut le télécharger entièrement et son contenu. Chaque fichier, image, script est ouvert pour être téléchargé. Mais , vous pouvez minimiser / uglifier votre code afin qu'il soit plus difficile pour un être humain de l'utiliser. Ce n'est qu'une conséquence de l'ugification, qui a d'abord été faite pour les performances.

Steve Chamaillard
la source
0

De nombreux avantages de séparer le contenu html et javascript dans des fichiers séparés:

  • augmente la lisibilité des fichiers de cours individuels
  • comme le code javascript n'est plus confiné dans un fichier html, les autres fichiers ou bibliothèques html et javascript peuvent utiliser votre code javascript
  • de même, le code javascript placé dans un fichier séparé peut facilement utiliser d'autres fichiers et bibliothèques avancées pour effectuer des calculs complexes (apprentissage automatique, graphiques 3D, framework, etc. bibliothèques)
  • javascript peut être mis en cache côté client et grâce à cela, seul le contenu html doit être rechargé lors de l'actualisation de la page
  • de bonnes / modernes pratiques d'ingénierie logicielle peuvent être appliquées plus facilement à un fichier / module / bibliothèque javascript séparé (modèles de conception, lecture de dactylographie / babel, etc.)
  • le code javascript peut être facilement masqué ou «caché» aux visiteurs de la page Web par minification / uglification
  • les fichiers javascript peuvent être regroupés dans un seul fichier / module via gulp, webpack, etc.
agarwal de Shubham
la source
1
cela ne semble pas offrir quoi que ce soit de substantiel par rapport aux points avancés et expliqués dans les 6 réponses précédentes
gnat