web-dev-qa-db-fra.com

Combine la mise en file d'attente js sans affecter les dépendances

Je souhaite combiner de petits fichiers javascript tout en conservant les dépendances des autres scripts. Y a-t-il un moyen?


Détails:

Nouvelle version de BuddyPress mise en file d'attente 6-7 petits javascripts:

// Legacy
'bp-confirm',
'bp-widget-members',
'bp-jquery-query',
'bp-jquery-cookie',
// 2.1
'jquery-caret',
'jquery-atwho'

Par exemple, bp-confirm est juste un script d'une ligne:

jQuery(document).ready(function(){jQuery("a.confirm").click(function(){return confirm(BP_Confirm.are_you_sure)?!0:!1})});

C'est juste fou. Je veux combiner ceux-ci, mais malheureusement, certains autres fichiers javascript mis en file d'attente dépendent de ces petits fichiers js. Je ne pouvais pas penser à une solution pour cela. Des idées?

4
Ünsal Korkmaz

De ton commentaire ci-dessus je lis

C’est l’une des raisons pour lesquelles je cherche un moyen de dire à wordpress: "Hé, j’ai ajouté ces fichiers js, ne vous inquiétez pas". C'est tout le but de cette question

Je pense que c'est parfaitement juste, j'ai + 1ed votre Q mais le problème est que cette façon n'existe pas, ou mieux n'existe pas d'une manière propre et canonique.

Comment

  1. tout d'abord, vous devez examiner toutes les dépendances des 7 scripts et en prendre note pour une utilisation future.
  2. créer un seul fichier js combiné pour les 7 scripts
  3. hook wp_print_scripts avec une priorité tardive, probablement PHP_INT_MAX, et à l'intérieur du rappel raccroché, vérifiez si BuddyPress est installé et activé et si c'est le cas:
    1. retirer les 7 scripts
    2. mettre en file d'attente votre seul script, en utilisant comme dépendances toutes les dépendances des 7 fichiers (ceux que vous avez découverts au point 1)

Ce faisant, WordPress ajoutera votre seul script (qui contient les 7 scripts) et toutes les dépendances nécessaires et tout fonctionnera.

Si un plug-in BuddyPress tiers ajoute un script en utilisant l'un des scripts du tiers comme dépendance, par exemple.

add_action( 'wp_enqueue_scripts', function() {

  wp_enqueue_script( 'thirdparty-bp-script', $js_url, array( 'bp-jquery-query' ) );

} );

tout fonctionnera, car ce script est exécuté sur 'wp_enqueue_scripts' et, à ce moment-là, le script de tiers utilisé comme dépendance est mis en file d'attente; WordPress ne l'ajoutera donc pas à nouveau.

Problèmes

Qu'est-ce qui ne va pas avec ce workflow? Je ne pense rien au workflow lui-même, mais si vous souhaitez utiliser ce script pour un thème à partager ou à vendre, je souhaite vraiment vous décourager de le faire.

La raison en est que les scripts de BP ont probablement changé dans diverses versions du plug-in, tout en conservant le descripteur de script. Il vous faudrait donc revenir en arrière dans l’histoire de BuddyPress, consulter les scripts ligne par ligne, ajouter différentes versions de votre script combiné pour chaque version de partenaire et mettre en file d'attente le script approprié en vérifiant la version de ce dernier installée.

Bien sûr, les scripts peuvent changer à l'avenir, ou certains nouveaux scripts peuvent être ajoutés. Par conséquent, même dans les versions mineures, il est nécessaire de vérifier les scripts, y compris leurs dépendances, et d'ajouter une nouvelle version de votre script si nécessaire. Comme vous pouvez le comprendre, cela devient difficile à maintenir et vous pouvez parier que des problèmes se poseront pour vos utilisateurs.

IMHO ce genre d'optimisations, même si requis dans toute installation WordPress où les performances sont importantes (toutes?) Doivent être implémentées par le propriétaire du site, dans votre cas par des personnes qui installeront votre thème, et non par le développeur du thème.

Par exemple, qu’en est-il une personne qui voudra peut-être combiner tous les js mis en file d'attente sur le site, et pas seulement les onces utilisées dans votre thème, et utiliser un CDN pour cela?

En conclusion, si vous voulez faire cela pour votre propre site, suivez mes étapes, cela devrait fonctionner, mais si vous envisagez de partager/vendre votre thème, laissez les choses en l'état.

Si vous le souhaitez, vous pouvez ajouter une section dans la documentation de votre thème, dans laquelle vous expliquez comment combiner des scripts pour améliorer les performances, et laissez à vos utilisateurs le choix de le faire ou non.

4
gmazzap

À mon avis honnête, je voudrais {pas _ faire cela.

_ {PRO et CON}

_ {PRO'S Il n'y a vraiment pas de pro's ici, sauf pour avoir quelques fichiers de moins. Je ne pense même pas que vous gagnerez un temps de chargement significatif en combinant ces fichiers

LES INCONVÉNIENTS

Il y a beaucoup de soucis ici

  • Vous ne devez pas modifier directement les fichiers buddypress. Vous perdrez ce que vous avez fait lors de la mise à niveau

  • Cela signifie que vous devez créer un thème enfant ou un autre plugin pour désenregistrer et retirer ces scripts après qu'ils ont déjà chargés, puis créer un nouveau fichier js avec tout le code et le mettre en file d'attente.

  • Chargement inutile de scripts inutile. Je crois qu'il y avait une méthode à la folie en créant la quantité de fichiers js par les auteurs buddypress. Je ne connais pas le fonctionnement interne de buddypress, mais mon esprit logique me dit que cela a été fait en raison d'un chargement conditionnel

  • La combinaison de tous ces scripts peut casser d'autres choses, comme vous l'avez dit, les dépendances. Vous pourriez même vous retrouver avec un comportement inattendu sur certaines pages

  • Les scripts front-end et back-end étant chargés différemment, les scripts pour le back-end et le front-end ne doivent pas être mélangés.

Je pense qu'il y a des aspects que j'ai manqués, mais ce sont les points principaux très basiques. Je voudrais vraiment repenser tout ce processus et commencer par contacter les auteurs de buddypress avec les questions suivantes

  • Pourquoi la quantité de fichiers js, est-ce fait pour le fait du chargement conditionnel, des scripts pour front end et back end etc.

  • Est-il possible de combiner ces scripts dans les futures versions de buddypress s'il n'y a pas de raison apparente pour la quantité de fichiers js simples

1
Pieter Goosen

Pourquoi ne vous contentez-vous pas de désenregistrer ces descripteurs dans 6 fichiers différents et de les réenregistrer dans un seul fichier combiné?

Je pense que si vous avez 6 poignées différentes, pointant vers un fichier, WordPress enque ce fichier une seule fois.

Vous pouvez donc garantir que vos dépendances ne se dissolvent pas.

Est-ce une solution possible pour vous?

1
lippoliv