web-dev-qa-db-fra.com

Qu'est-ce que CavalryLogger et en ai-je besoin?

Je fais une optimisation sur un site que j'ai récemment repris. J'ai trouvé un script que je ne reconnais pas: http://static.ak.fbcdn.net/rsrc.php/zo/r/V95Lkt_uLNB.js

Cela pourrait être une chose sur Facebook, et il y a un enregistrement des clés en cours (que je ne suis pas trop intéressé)

C'est sans aucun doute le plus gros fichier demandé sur un chargement de page (87kb) donc si je peux m'en passer, cela accélérera vraiment le chargement de la page.

Est-ce que quelqu'un sait:
A) De quoi s'agit-il
B) À quoi ça sert
C) Ce qu'il fait
D) Puis-je m'en passer

36
Andyh

D'accord, j'ai donc jeté un coup d'œil à la version embellie de ce code minifié et j'ai noté ce qui suit:

En soi, ce sont un tas de fonctions utilitaires.

CavalryLogger ne fait rien avec ce fichier car il n'existe pas et il n'est pas défini.

Le code en question concernant la liaison des clés:

function KeyEventController() {
  copy_properties(this, {
    handlers: {}
  });
  document.onkeyup = this.onkeyevent.bind(this, 'onkeyup');
  document.onkeydown = this.onkeyevent.bind(this, 'onkeydown');
  document.onkeypress = this.onkeyevent.bind(this, 'onkeypress');
}
copy_properties(KeyEventController, {
  instance: null,
  getInstance: function () {
    return KeyEventController.instance || (KeyEventController.instance = new KeyEventController());
  },
  defaultFilter: function (event, a) {
    event = $E(event);
    return KeyEventController.filterEventTypes(event, a) && KeyEventController.filterEventTargets(event, a) && KeyEventController.filterEventModifiers(event, a);
  },
  filterEventTypes: function (event, a) {
    if (a === 'onkeydown') return true;
    return false;
  },
  filterEventTargets: function (event, b) {
    var a = $E(event).getTarget();
    if (DOM.isNode(a, ['input', 'select', 'textarea', 'object', 'embed'])) if (a.type != 'checkbox' && a.type != 'radio' && a.type != 'submit') return false;
    return a.getAttribute('contentEditable') != 'true';
  },
  filterEventModifiers: function (event, a) {
    if (event.ctrlKey || event.altKey || event.metaKey || event.repeat) return false;
    return true;
  },
  registerKey: function (f, a, d, g) {
    if (d === undefined) d = KeyEventController.defaultFilter;
    var b = KeyEventController.getInstance();
    var c = b.mapKey(f);
    if (is_empty(b.handlers)) onleaveRegister(b.resetHandlers.bind(b));
    for (var e = 0; e < c.length; e++) {
      f = c[e];
      if (!b.handlers[f] || g) b.handlers[f] = [];
      b.handlers[f].Push({
        callback: a,
        filter: d
      });
    }
  },
  keyCodeMap: {
    '[': [219],
    ']': [221],
    '`': [192],
    LEFT: [KEYS.LEFT, 63234],
    RIGHT: [KEYS.RIGHT, 63235],
    RETURN: [KEYS.RETURN],
    TAB: [KEYS.TAB],
    DOWN: [KEYS.DOWN, 63233],
    UP: [KEYS.UP, 63232],
    ESCAPE: [KEYS.ESC],
    BACKSPACE: [KEYS.BACKSPACE],
    DELETE: [KEYS.DELETE]
  }
});
copy_properties(KeyEventController.prototype, {
  mapKey: function (a) {
    if (typeof (a) == 'number') return [48 + a, 96 + a];
    if (KeyEventController.keyCodeMap[a.toUpperCase()]) return KeyEventController.keyCodeMap[a.toUpperCase()];
    var b = a.toUpperCase().charCodeAt(0);
    return [b];
  },
  onkeyevent: function (i, c) {
    c = $E(c);
    var d = null;
    var g = this.handlers[c.keyCode];
    var b, f, a;
    if (g) for (var h = 0; h < g.length; h++) {
      b = g[h].callback;
      f = g[h].filter;
      try {
        if (!f || f(c, i)) {
          var node = null;
          if (window.Parent && Parent.byTag && c.getTarget) node = Parent.byTag(c.getTarget(), 'a');
          user_action(node, 'key', c);
          a = b(c, i);
          if (a === false) return Event.kill(c);
        }
      } catch (e) {}
    }
    return true;
  },
  resetHandlers: function () {
    this.handlers = {};
  }
});

Ce code vous permet de lier des clés à des rappels et inclut des noms plus lisibles par l'homme pour les clés communes. Prenez par exemple l'utilisation ici:

KeyEventController.registerKey('ESCAPE', Dialog._handleEscapeKey, a);

La touche ESCAPE est enregistrée pour faire disparaître les boîtes de dialogue. handlers est également vide par défaut, donc rien ne se passera jusqu'à ce que vous utilisiez registerKey ou que vous y ajoutiez manuellement. Notez que c'est la seule instance de registerKey appelée.

Il a également beaucoup de AJAX. Je ne peux pas vraiment envoyer quoi que ce soit à Facebook depuis votre domaine en raison de la même politique d'origine (sauf si vous avez modifié les autorisations de sécurité, mais c'est votre faute). Même chose avec le jeu de cookies.

Il y a aussi un gestionnaire d'historique, mais il utilise un iFrame donc il ne pourra pas le lire de votre domaine de toute façon.

Enfin, le code de bouton similaire que j'ai trouvé est un iFrame, il n'aurait donc pas besoin d'inclure JS à moins que vous n'utilisiez javascript pour créer l'iFrame ou quelque chose.

Dans cet esprit, je ne vois pas la nécessité pour vous d'inclure tout cela.

32
onteria_

Il semble que cela soit directement lié à la fonctionnalité "Like this" sur une page. L'iframe que vous utilisez pour inclure le bouton "J'aime" semble venir avec quelques scripts "bonus".

Si vous me demandez, c'est une autre bonne raison de ne PAS avoir Facebook intégré, il semble que vous enregistrez des touches, et ce n'est pas cool.

11
mwotton

Une recherche rapide sur Google ne fournit pas beaucoup de réponses - c'est une sorte de script de suivi des événements pour Facebook, et j'ai vu un Tweet et quelques messages sur le forum où les gens ont mentionné le désactiver et gagner en vitesse - Je pensez vous pouvez vous en débarrasser en toute sécurité, du moins cela vaut la peine de l'essayer.

1
Filipe

J'ai trouvé "calverly logger" dans un fichier que je n'ai pas téléchargé mais je l'ai vu télécharger juste devant moi quand j'ai fermé Thunderbird (exécutait Firefox derrière et il est apparu comme un téléchargement de fichier) alors je suis allé vérifier ce qu'il était.

Le fichier s'appelait: "See All.html", ce que j'ai trouvé étrange et inquiétant.

la tête du fichier contient le code suivant indiquant qu'il s'agit d'une fonction Facebook ... Le Calvery Logger est mentionné vers le bas du fichier (non illustré ici). J'ai supprimé le html <près de la tête du fichier afin que vous puissiez voir le code ... Je ne suis pas sûr que cela vous aidera, mais j'attends avec impatience toutes les informations ...

// !DOCTYPE html 
html lang="en" id="facebook" class="no_js"

head
meta charset="utf-8" />

meta name="referrer" content="Origin-when-crossorigin" id="meta_referrer" />

script> window._cstart=+new Date();</script><script>function envFlush(a)    {function b(c){for(var d in a)c[d]=a[d];}if(window.requireLazy){window.requireLazy(['Env'],b);}else{window.Env=window.Env||{};b(window.Env);}}envFlush({"ajaxpipe_token":"AXiYOZarFarwOff3","lhsh":"AAQFK_mp-","khsh":"0`sj`e`rm`s-0fdu^gshdoer-0gc^eurf-3gc^eurf;1;enbtldou;fduDmdldourCxO`ld-2YLMIuuqSdptdru;qsnunuxqd;rdoe-0unjdojnx-0unjdojnx0-0gdubi^rdbsduOdv-0`sj`e`r-0q`xm`r-0StoRbs`qhof-0mhoj^q`xm`r","timeslice_heartbeat_config":{"pollIntervalMs":33,"idleGapThresholdMs":60,"ignoredTimesliceNames":{"requestAnimationFrame":true,"Event listenHandler mousemove":true,"Event listenHandler mouseover":true,"Event listenHandler mouseout":true,"Event listenHandler scroll":true},"enableOnRequire":true},"shouldLogCounters":false,"timeslice_categories":{"react_render":true,"reflow":true}}); script> style> style>
0
Don

C'est définitivement de Facebook - l'un des nombreux fichiers de support pour FBML/API/etc.

Si vous n'utilisez aucune fonction FB dans votre projet, supprimez simplement ce fichier.

Si vous utilisez des fonctionnalités FB (comme le bouton "J'aime"), vous ne devez pas non plus utiliser ce fichier (ou tout autre fichier avec des noms cryptiques) directement. Vous devriez plutôt

1) créez un <div id="fb-root"></div> quelque part à la fin de votre page

2) inclure http://connect.facebook.net/en_US/all.js script dans votre page

3) suivez les instructions de http://developers.facebook.com/

0
Guard

Lorsque l'IFRAME est chargé, il appelle l'URI suivant:

https://www.facebook.com/plugins/like.php?api_key=[your_api_key]&channel_url=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D27%23cb%3Df39f390d40f7332%26domain%3D[your_TLD]%26Origin%3Dhttp%253A%252F%252F[your_TLD]%252Ff72f1f9bea899e%26relation%3Dparent.parent&colorscheme=light&extended_social_context=false&href=[your_share_URI]&layout=button_count&locale=en_US&node_type=link&sdk=joey&send=false&show_faces=false&width=100

Les balises de script de cette page contiennent les appels suivants.

PluginAsyncLoader.load("**https:\/\/fbstatic-a.akamaihd.net\/rsrc.php\/v2\/yq\/r\/CNRdIwfy3yI.js**");
PluginAsyncLoader.ondemandjs = "**https:\/\/fbstatic-a.akamaihd.net\/rsrc.php\/v2\/yH\/r\/muz85bheueJ.js**";
0
supert3d