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集成的另一个好理由,它似乎是记录按键,这并不酷.
快速谷歌搜索并没有提供很多答案 - 这是 Facebook 的某种事件跟踪脚本,我看到一条推文和几个论坛帖子,人们提到禁用它并获得速度提升 - 我认为你可以安全地得到摆脱它,至少值得尝试一下。
| 归档时间: |
|
| 查看次数: |
55378 次 |
| 最近记录: |