File d’attente et historique
Le tableau adobeDataLayer comporte deux rôles. Avant le chargement de la bibliothèque ACDL (Client Data Layer) d’Adobe, file d’attente d’éléments attend d’être traités. Une fois la bibliothèque chargée, il s’agit d’un historique des données et des événements qui ont été transmis.
Avant le chargement de l’ACDL : une file d’attente queue
Jusqu’au chargement de la bibliothèque, adobeDataLayer est un tableau JavaScript brut et push() est la méthode de tableau standard. Chaque notification push ajoute l’élément à la fin du tableau et n’effectue aucune autre action. Pour cette raison, n’importe quel script peut transmettre des données, des événements et des fonctions à tout moment, même si la bibliothèque n’a pas encore été téléchargée.
Lorsque la bibliothèque se charge, elle effectue les opérations suivantes :
- Supprime tous les éléments en file d’attente du tableau.
- Ajoute les méthodes ACDL au même tableau, y compris sa propre version de
push(). - Envoie à nouveau les éléments en file d’attente, un par un, dans leur ordre d’origine. Chaque élément est traité comme s’il avait été envoyé après le chargement de la bibliothèque.
L’objet adobeDataLayer global reste le même tableau dans l’ensemble. Les références à celui-ci que les scripts enregistrés précédemment continuent de fonctionner.
Exécuter le code lorsque l’ACDL est prêt ready
Il est garanti que seul push() existe sur le tableau, car la bibliothèque n’a peut-être pas encore été chargée. Pour appeler d’autres méthodes, telles que getState() ou addEventListener(), poussez une fonction :
window.adobeDataLayer = window.adobeDataLayer || [];
window.adobeDataLayer.push(function(dl) {
console.log(dl.getState());
dl.addEventListener("click", handleClick);
});
Si l’ACDL a déjà été chargé, il appelle immédiatement la fonction . Si ce n’est pas le cas, la fonction attend dans la file d’attente et s’exécute lors du chargement de la bibliothèque, après les éléments qui ont été transférés avant elle. La fonction reçoit la couche de données en tant qu’argument et en tant que this.
Après le chargement de l’ACDL : un historique history
Une fois la bibliothèque chargée, le tableau conserve une trace de ce qui a été envoyé. L’ACDL ajoute certains types d’éléments au tableau et en supprime d’autres :
event et eventInfoL’historique contient les objets que vous avez intégrés, et non des copies. Si vous modifiez un objet après l’avoir poussé, l’historique affiche la modification, mais pas l’état calculé 🔗.
Vous pouvez examiner l’historique dans la Developer Console de votre navigateur en saisissant adobeDataLayer et en développant le tableau . Le nombre d’éléments dans l’historique est adobeDataLayer.length.
Ordre des éléments transmis par les écouteurs nested-order
Lorsqu’un écouteur d’événement transmet un élément, ACDL le traite avant de terminer le traitement de l’élément qui a déclenché l’écouteur. Par conséquent, l’élément envoyé par le programme d’écoute apparaît dans l’historique avant l’élément qui l’a déclenché.
Utilisation de l’historique par les auditeurs replay
Lorsque vous ajoutez un écouteur avec la past ou la all portée, l’ACDL l’appelle immédiatement pour chaque élément correspondant de l’historique, dans l’ordre. Cette relecture permet aux scripts qui se chargent tardivement, comme une bibliothèque de balises, de réagir aux événements qui se sont produits avant leur chargement.
La relecture utilise les éléments qui se trouvent dans le tableau lorsque le listener est ajouté. Si l’historique a été effacé, les éléments effacés ne sont pas relus.
Ne modifiez pas directement le tableau modify
Ajoutez des éléments à la couche de données uniquement avec push(). N’utilisez pas d’autres méthodes de tableau JavaScript qui modifient le tableau, telles que pop(), shift(), unshift(), splice(), sort(), reverse(), fill() ou copyWithin(). Ces méthodes contournent l’ACDL, de sorte que l’état calculé et les écouteurs ne reflètent pas la modification et les relectures pour les nouveaux écouteurs deviennent incohérentes.
Vous pouvez lire le tableau avec des méthodes qui ne le modifient pas, telles que filter() ou find().
Effacer l’historique clear
Chaque notification push conservée par ACDL ajoute un élément au tableau . Sur les pages qui restent ouvertes pendant longtemps, comme les applications d’une seule page, l’historique ne cesse de s’allonger. Vous pouvez l’effacer lors d’une pause naturelle, par exemple après chaque page vue virtuelle.
L’effacement de l’historique ne modifie pas l’état calculé et ne supprime pas les écouteurs. Elle affecte uniquement les éléments qui sont relus pour les écouteurs qui sont ajoutés ultérieurement avec la portée past ou all.
-
Si vous utilisez des balises, utilisez l’action Effacer l’historique de la couche de données dans l’extension de balise ACDL. Il peut conserver un instantané de l’état calculé actuel dans le tableau ou laisser le tableau vide.
-
Dans votre propre code, définissez la longueur du tableau sur
0après le chargement de l’ACDL :code language-js window.adobeDataLayer.push(function(dl) { dl.length = 0; });