什么是CavalryLogger,我需要它吗?

And*_*dyh 36 javascript optimization

我正在对最近接手的网站进行一些优化.我发现了一个我不认识的脚本:http: //static.ak.fbcdn.net/rsrc.php/zo/r/V95Lkt_uLNB.js

它可能是一个Facebook的东西,并且有一些关键的日志记录正在进行(我不太热衷)

毫无疑问,页面加载(87kb)上请求的最大文件是如此,如果我没有它,它将真正加快页面加载.

有谁知道:
A)它是什么
B)它是什么
C)它做什么
D)我可以没有它

ont*_*ia_ 32

好的,所以我查看了这个缩小代码的美化版本,并注意到以下内容:

这些是一堆实用功能.

CavalryLogger本身对此文件没有任何作用,因为它不存在,也没有定义.

有关密钥绑定的问题代码:

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 = {};
  }
});
Run Code Online (Sandbox Code Playgroud)

此代码允许您将键绑定到回调,并包含更多人类可读的公用键名称.以这里的用法为例:

KeyEventController.registerKey('ESCAPE', Dialog._handleEscapeKey, a);
Run Code Online (Sandbox Code Playgroud)

注册ESCAPE密钥以使对话框消失.handlers默认情况下也是空的,因此在您registerKey手动使用或附加它之前不会发生任何事情.请注意,这是registerKey被调用的唯一实例.

它还有很多AJAX实用程序功能.无论如何都无法从你的域发送任何东西到Facebook,因为相同的原始策略(除非你修改了安全权限,但那是你的错).与Cookie设置相同.

还有一个历史管理器,但它使用iFrame,因此无论如何它都无法从您的域中读取它.

最后,我找到的类似按钮代码是一个iFrame,所以它不需要JS包含,除非你使用javascript创建iFrame或其他东西.

考虑到这一点,我认为你不需要包括所有这些.


mwo*_*ton 11

看起来这与页面上的"喜欢这个"功能直接相关.您用来包含"赞"按钮的iframe似乎附带了几个"奖励"脚本.

如果你问我,这是没有Facebook集成的另一个好理由,它似乎是记录按键,这并不酷.


Fil*_*ipe 1

快速谷歌搜索并没有提供很多答案 - 这是 Facebook 的某种事件跟踪脚本,我看到一条推文和几个论坛帖子,人们提到禁用它并获得速度提升 - 我认为你可以安全得到摆脱它,至少值得尝试一下。