Skip to content

Instantly share code, notes, and snippets.

@Infocatcher
Created April 16, 2016 17:42
Show Gist options
  • Save Infocatcher/11ac22882a6bd470db710c26fb2fd569 to your computer and use it in GitHub Desktop.
Save Infocatcher/11ac22882a6bd470db710c26fb2fd569 to your computer and use it in GitHub Desktop.
function getVKChar(vk) {
// Firefox doesn't have string representation for some codes...
// https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent#Virtual_key_codes
if(/^VK_(?:NUMPAD)?([\d+A-Z])$/.test(vk))
return RegExp.$1;
switch(vk) {
case "VK_SPACE": return " "; //32
case "VK_COLON": return ":"; //58
case "VK_SEMICOLON": return ";"; //59
case "VK_LESS_THAN": return "<"; //60
case "VK_EQUALS": return "="; //61
case "VK_GREATER_THAN": return ">"; //62
case "VK_QUESTION_MARK": return "?"; //63
case "VK_AT": return "@"; //64
case "VK_MULTIPLY": return "*"; //106
case "VK_ADD": return "+"; //107
case "VK_SUBTRACT": return "-"; //109
case "VK_DECIMAL": return "."; //110
case "VK_DIVIDE": return "/"; //111
case "VK_CIRCUMFLEX": return "^"; //160
case "VK_EXCLAMATION": return "!"; //161
case "VK_DOUBLE_QUOTE": return '"'; //162
case "VK_HASH": return "#"; //163
case "VK_DOLLAR": return "$"; //164
case "VK_PERCENT": return "%"; //165
case "VK_AMPERSAND": return "&"; //166
case "VK_UNDERSCORE": return "_"; //167
case "VK_OPEN_PAREN": return "("; //168
case "VK_CLOSE_PAREN": return ")"; //169
case "VK_ASTERISK": return "*"; //170
case "VK_PLUS": return "+"; //171
case "VK_PIPE": return "|"; //172
case "VK_HYPHEN_MINUS": return "-"; //173
case "VK_OPEN_CURLY_BRACKET": return "{"; //174
case "VK_CLOSE_CURLY_BRACKET": return "}"; //175
case "VK_TILDE": return "~"; //176
case "VK_COMMA": return ","; //188
case "VK_PERIOD": return "."; //190
case "VK_SLASH": return "/"; //191
case "VK_BACK_QUOTE": return "`"; //192
case "VK_OPEN_BRACKET": return "["; //219
case "VK_BACK_SLASH": return "\\"; //220
case "VK_CLOSE_BRACKET": return "]"; //221
case "VK_QUOTE": return "'"; //222
}
return undefined;
}
var getVKCharMap = {
VK_SPACE: " ", //32
VK_COLON: ":", //58
VK_SEMICOLON: ";", //59
VK_LESS_THAN: "<", //60
VK_EQUALS: "=", //61
VK_GREATER_THAN: ">", //62
VK_QUESTION_MARK: "?", //63
VK_AT: "@", //64
VK_MULTIPLY: "*", //106
VK_ADD: "+", //107
VK_SUBTRACT: "-", //109
VK_DECIMAL: ".", //110
VK_DIVIDE: "/", //111
VK_CIRCUMFLEX: "^", //160
VK_EXCLAMATION: "!", //161
VK_DOUBLE_QUOTE: '"', //162
VK_HASH: "#", //163
VK_DOLLAR: "$", //164
VK_PERCENT: "%", //165
VK_AMPERSAND: "&", //166
VK_UNDERSCORE: "_", //167
VK_OPEN_PAREN: "(", //168
VK_CLOSE_PAREN: ")", //169
VK_ASTERISK: "*", //170
VK_PLUS: "+", //171
VK_PIPE: "|", //172
VK_HYPHEN_MINUS: "-", //173
VK_OPEN_CURLY_BRACKET: "{", //174
VK_CLOSE_CURLY_BRACKET: "}", //175
VK_TILDE: "~", //176
VK_COMMA: ",", //188
VK_PERIOD: ".", //190
VK_SLASH: "/", //191
VK_BACK_QUOTE: "`", //192
VK_OPEN_BRACKET: "[", //219
VK_BACK_SLASH: "\\", //220
VK_CLOSE_BRACKET: "]", //221
VK_QUOTE: "'", //222
__proto__: null
};
function getVKChar2(vk) {
// Firefox doesn't have string representation for some codes...
// https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent#Virtual_key_codes
var chr = getVKCharMap[vk] || null;
if(chr)
return chr;
if(/^VK_(?:NUMPAD)?([\d+A-Z])$/.test(vk))
return RegExp.$1;
return undefined;
}
function getVKChar3(vk) {
// Firefox doesn't have string representation for some codes...
// https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent#Virtual_key_codes
var map = getVKCharMap;
if(vk in map)
return map[vk];
if(/^VK_(?:NUMPAD)?([\d+A-Z])$/.test(vk))
return RegExp.$1;
return undefined;
}
var c = 100e3;
var codes = ["VK_SPACE", "VK_PLUS", "VK_F", "VK_NUMPAD8", "VK_QUOTE"];
var i = c + 1, t = performance.now();
while(--i)
codes.forEach(getVKChar);
var dtOld = performance.now() - t;
var i = c + 1, t = performance.now();
while(--i)
codes.forEach(getVKChar2);
var dtNew1 = performance.now() - t;
var i = c + 1, t = performance.now();
while(--i)
codes.forEach(getVKChar3);
var dtNew2 = performance.now() - t;
alert(
"Old: " + dtOld.toFixed(2)
+ "\nNew 1: " + dtNew1.toFixed(2) + " x" + (dtOld/dtNew1).toFixed(1)
+ "\nNew 2: " + dtNew2.toFixed(2) + " x" + (dtOld/dtNew2).toFixed(1)
);
@Infocatcher
Copy link
Author

For var c = 300e3; in Firefox 45.0.2:

Old: 182.09
New 1: 124.86 x1.5
New 2: 198.63 x0.9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment