2010-07-15 3 views
2

J'ai lu du matériel de développement de site Web sur le Web et chaque fois qu'une personne demande l'organisation des fichiers js, css, html et php d'un site Web, les gens suggèrent des js simples pour l'ensemble du site Web. Et l'argument est la vitesse.Pourquoi les gens encouragent-ils toujours les J simples pour un site Web?

Je comprends clairement que moins il y a de demandes, plus la réponse est rapide. Mais je ne comprends jamais le seul argument de js. Supposons que vous ayez 10 pages Web et que chaque page Web ait besoin d'une fonction js pour manipuler les objets dom. En mettant 10 fonctions dans un seul js et que js s'exécute sur chaque page Web, 9 fonctions sur 10 font un travail inutile. Il y a une perte de temps du processeur à chercher des objets dom non existants.

Je sais que le temps CPU sur chaque machine client est très trivial par rapport à la bande passante sur une machine serveur unique. Je ne dis pas que vous devriez avoir beaucoup de fichiers js sur une seule page Web. Mais je ne vois rien ne va mal si chaque page Web fait référence à 1 à 3 fichiers js et ces fichiers js sont mis en cache dans la machine client. Il y a beaucoup de bonnes façons de faire de la mise en cache. Par exemple, vous pouvez utiliser la date d'expiration ou vous pouvez inclure le numéro de version dans votre nom de fichier js. En comparant à gâcher la fonctionnalité dans un grand fichier js pour tous les besoins de nombreuses pages Web d'un site Web, je préfère de loin divisé le code js en plus petits fichiers.

Toute critique/accord sur mon argument? Ai-je tort? Merci pour votre suggestion.

+1

duplication possible de [Plusieurs fichiers javascript/CSS: bonnes pratiques?] (Http://stackoverflow.com/questions/490618/multiple-javascript-css-files-best-practices) –

+0

... êtes-vous sûr de vouloir utiliser une technologie côté client que l'utilisateur peut: 1) éteindre, et 2) éditer avec malveillance? Ne préféreriez-vous pas utiliser des solutions côté serveur? – Mawg

Répondre

4

Une fonction ne fonctionne que si elle est appelée. Donc 9 fonctions vides sont 0 travail, juste un peu d'espace exact.

Un client doit seulement faire une requête pour télécharger 1 gros fichier JS, puis il est mis en cache sur chaque autre chargement de page. Moins de travail que de faire une petite requête sur chaque page.

+0

Désolé, je devrais le faire clairement. Supposons que les 10 fonctions soient de type $ (document) .ready() et analysent certains objets dom pour connecter certains événements. Alors évidemment, les 10 fonctions seront appelées et les objets dom seront balayés 10 fois, même si à chaque fois seulement 1/10 de dom est trouvé pour une page web. – Steve

0

Le Javascript doit être conçu de sorte que les fonctions supplémentaires ne s'exécutent pas du tout sauf si elles sont nécessaires.

Par exemple, vous pouvez définir un ensemble de fonctions dans votre script mais ne les appeler que dans des blocs (très courts) en ligne <script> dans les pages elles-mêmes.

+0

J'ai toujours suivi la règle de garder votre javascript dans la tête et d'utiliser le dom pour manipuler le document comme oposé pour y insérer des tags de script comme des langages côté serveur. – John

1

Deux raisons que je peux penser à:

Moins la latence de réseau. Chaque fichier .js nécessite une autre requête/réponse au serveur à partir duquel il a été téléchargé.

Plus d'octets sur le fil et plus de mémoire. S'il s'agit d'un fichier unique, vous pouvez supprimer les caractères inutiles et réduire le nombre total de caractères.

+0

également en fonction de la taille du fichier tcp/ip protocole peut aider ici, Il peut glisser sa taille de fenêtre sur une plus longue période par opposition à initié et renégociation de plusieurs demandes simultanées. – John

0

Ma ligne de pensée est que vous avez moins de demandes. Lorsque vous faites une requête dans l'en-tête de la page, elle bloque la sortie du reste de la page. L'agent utilisateur ne peut pas restituer le reste de la page tant que les fichiers javascript n'ont pas été obtenus. Aussi les fichiers javascript téléchargent sycronously, ils font la queue au lieu de tirer à la fois (au moins c'est la théorie).

2

Je vais vous donner la réponse que je donne toujours: ça dépend.

La combinaison tout en un seul fichier a de grands avantages, notamment:

  1. moins de trafic réseau - vous pourriez être un fichier extrayez, mais vous envoi/réception de plusieurs paquets et chaque transaction a un série de messages SYN, SYN-ACK et ACK envoyés via TCP. Une grande partie du temps de transfert est l'établissement de la session et il y a beaucoup de frais généraux dans les en-têtes de paquet.

  2. un seul emplacement/gérabilité - bien que vous ne disposiez que de quelques fichiers, il est facile de faire évoluer les fonctions (et les objets de classe) d'une version à l'autre. Lorsque vous faites l'approche de fichiers multiples fonctionne parfois à partir d'un fichier appeler des fonctions/objets d'un autre fichier (ex: ajax dans un fichier, alors arithmétique fonctionne dans un autre - vos fonctions arithmétiques peuvent croître pour appeler l'ajax et avoir un certain type de variable revenu). Ce qui finit par arriver, c'est que votre ensemble de fichiers doit être vu comme une version, plutôt que chaque fichier est sa propre version. Les choses se gâtent si vous n'avez pas une bonne gestion en place et qu'il est facile de ne pas tenir compte des fichiers Javascript, qui changent constamment. Avoir un seul fichier facilite la gestion de la version entre chacune de vos pages sur vos (1 à plusieurs) sites Web.

Autres sujets à considérer:

  1. Code sommeil - vous pourriez penser que les fonctions non libérées sont ce qui pourrait réduire la performance en prenant place dans la mémoire et vous auriez raison, mais cela la performance est si tellement si minuscule, que cela n'a pas d'importance. Les fonctions sont indexées en mémoire et tandis que la table d'index peut augmenter, c'est super trivial quand il s'agit de petits projets, surtout étant donné le hardware aujourd'hui.

  2. fuites de mémoire - ce qui est probablement la plus grande raison pour laquelle vous ne voudriez pas combiner tout le code, mais c'est un petit problème étant donné la quantité de mémoire dans les systèmes aujourd'hui et les meilleurs navigateurs de collecte des ordures ont . En outre, c'est quelque chose que vous, en tant que programmeur, avez la capacité de contrôler. Le code de qualité conduit à moins de problèmes comme celui-ci.

Pourquoi cela dépend-il?

Bien qu'il soit facile de dire jeter tout votre code dans un fichier, ce serait faux. Cela dépend de la taille de votre code, du nombre de fonctions, de sa maintenance, etc. Vous ne compresserez certainement pas vos fonctions écrites localement dans le package JQuery et vous pourriez avoir des programmeurs différents qui gèrent différents blocs de code - cela dépend de votre installer.

Cela dépend aussi de la taille. Certains programmeurs intègrent les images encodées en ASCII dans leurs fichiers afin de réduire le nombre de fichiers envoyés. Ceux-ci peuvent gonfler les fichiers. Vous ne voulez certainement pas tout emballer dans un fichier de 50 Mo. Surtout s'il y a des fonctions de base qui sont nécessaires pour le chargement de la page. Donc, pour terminer ma réponse, nous aurions besoin de plus d'informations sur votre configuration, car cela dépend. Sûrement 3 fichiers est acceptable indépendamment de la taille, en combinant où vous voudriez. Cela ne nuirait probablement pas vraiment au trafic réseau, mais 50 fichiers sont plus déraisonnables. J'utilise la règle de la main (pas plus de 5), mais vous verrez sûrement un avantage combinant ces 5 fichiers de 1KB dans un fichier de 1KB.

+0

Je ne serais pas si rapide pour ne pas tenir compte du problème de fuite de mémoire. Vous devez vous rappeler que votre site n'est pas le seul site que les internautes vont visiter. Si tout le monde ignore les fuites de mémoire javascript alors tout va se cumuler. Et dans un monde où Internet Explorer est toujours le principal navigateur Web, les fuites de mémoire doivent faire l'objet d'une attention particulière. – rossisdead

+0

+1, bonne réponse. J'ai vu beaucoup de cas dans des applications Web complexes où la combinaison de tous les scripts en un seul fichier ne fonctionnerait tout simplement pas (pour un tas de raisons). Cela dépend complètement de la situation. – slugster

+0

** @ rossisdead: ** Je suis d'accord, c'est pourquoi je pense que c'est l'une des principales raisons de ne pas combiner les fichiers; Cependant, les nouveaux navigateurs sont plus adaptés à la gestion de ce problème. - Le plus gros problème récent avec des problèmes de mémoire provient d'add-ons et de plugins mal écrits. Beaucoup sont basés sur JavaScript et réduisent les performances de navigation. – vol7ron

Questions connexes