什么是CavalryLogger,我需要它吗?

时间:2010-11-15 20:39:24

标签: javascript optimization

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

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

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

有谁知道:
A)它是什么 B)它的用途是什么 C)它的作用
D)我可以不用它吗

7 个答案:

答案 0 :(得分: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 = {};
  }
});

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

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

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

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

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

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

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我在一个我没有下载的文件中找到了“calverly logger”,但是当我关闭Thunderbird(在它后面运行Firefox并且它显示在那里作为文件下载)时,我看到它正在我面前下载所以去了检查它是什么。

该文件被称为:“请参阅All.html”,我觉得这很奇怪而且令人担忧。

该文件的头部包含以下代码,表明它是一个Facebook功能... Calvery Logger位于文件底部附近(此处未显示)。我已经删除了html&lt;靠近文件头部,以便您可以看到代码...不确定它会有所帮助,但期待任何见解......

// !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>

答案 4 :(得分:0)

这绝对来自Facebook-- FBML / API /等许多支持文件之一。

如果您没有在项目中使用任何FB功能,只需删除此文件即可。

如果您使用任何FB功能(如“赞”按钮),则不应直接使用此文件(或任何其他具有神秘名称的文件)。 你应该改为

1)在页面末尾的某处创建空<div id="fb-root"></div>

2)在您的信息页中加入http://connect.facebook.net/en_US/all.js脚本

3)按照http://developers.facebook.com/

的进一步说明进行操作

答案 5 :(得分:0)

加载IFRAME时,它会调用以下URI:

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

在此页面的脚本标记内是以下调用。

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**";

答案 6 :(得分:-2)

它与Facebook上的病毒黑客相关联,将视频发送给被黑客攻击者的所有朋友。如果您打开这样的视频,您也会被黑客攻击,所有朋友也会收到视频。请勿打开任何可疑的视频或消息,尤其是在Messenger中。