Дзен-трансгуманист, да ты мастер обфускации ))
Скрипты наверно эффективнее через тебя пропускать, нежели через какой-нибудь компрессор-минификатор :) |
Цитата:
Насколько мне известно применение побитовых операций в js не приводит к увеличению скорости, а скорее наоборот. Поэтому ты добавил тормоза в программу и оправдываешь их инженерным образованием. |
Цитата:
function test1(defs) { return {1:0, 2:2, 4:1}[defs]; } function test2(defs) { return (defs & ~1) % 3; } function test3(defs) { return [0,0,2,,1][defs]; } var lastTime=(new Date()).getTime(); for(var i = 0; i < 100000; i++) { test1(i & 1); } alert("Время заняло с использованием объекта (ms): " + ((new Date()).getTime()-lastTime)); var lastTime=(new Date()).getTime(); for(var i = 0; i < 100000; i++) { test2(i & 1); } alert("Время заняло с использованием битов (ms): " + ((new Date()).getTime()-lastTime)); var lastTime=(new Date()).getTime(); for(var i = 0; i < 100000; i++) { test3(i & 1); } alert("Время заняло с использованием массива (ms): " + ((new Date()).getTime()-lastTime)); Opera 12.13: Время заняло с использованием объекта (ms): 61 Время заняло с использованием битов (ms): 17 Время заняло с использованием массива (ms): 20 |
пример с массивом и битами работают почти с одинаковой скоростью... Хотя если позапускать несколько раз, то видно что идентичны.. Но вот с объектами все намного хуже.
Можно провести тест со свитчем: function test1(defs) { switch(defs) { case 1: return 0; case 2: return 2; case 4: return 1; deafult: return 0; } } var lastTime=(new Date()).getTime(); for(var i = 0; i < 100000; i++) { test1(i & 1); } alert("Время заняло с использованием switch (ms): " + ((new Date()).getTime()-lastTime)); Opera 12.13 Время заняло с использованием switch (ms): 15 |
Цитата:
|
Цитата:
function test7(x) { return x !== 2 ? x >> 2 : 2; } var lastTime=(new Date()).getTime(); for(var i = 0; i < 100000; i++) { test7(i & 1); } alert("Время с использованием x !== 2 ? x >> 2 : 2 (ms): " + ((new Date()).getTime()-lastTime)); return (e.button & ~1) % 3; // 1. ~1 // 2. e.button & x // 3. x % 3; Цитата:
Цитата:
Если принимать во внимание, что события мыши могу обрабатываться довольно часто, то решение с объектом, пускай и наглядным, приведет к лишним задр*чкам и в без того медленном IE. Впрочем, надо тестировать... |
Цитата:
Цитата:
Цитата:
|
Цитата:
Ну, а Gozar он добрый и пушистый (особенно когда не бреется). Только тщательно это скрывает :) |
Object.create() IE9,10 bug
Bug
var obj = Object.create({}.constructor.prototype); //var obj = Object.create(Object.getPrototypeOf({})); //var obj = {}; obj['0'] = null; obj['1'] = null; alert(obj.hasOwnProperty('0')); // IE9,10 - false alert(obj.hasOwnProperty('1')); // IE9,10 - false Fix var obj = Object.create({}.constructor.prototype); //var obj = Object.create(Object.getPrototypeOf({})); //var obj = {}; obj['0'] = null; obj['1'] = null; obj['x'] = null; // fix alert(obj.hasOwnProperty('0')); // true alert(obj.hasOwnProperty('1')); // true |
Жесть… я только начинал верить в IE :( в 11 версии не исправили
------------ причем, если сразу же удалить fix, то баг останется, поэтому вот такой декоратор для Object.create не прокатил: //IE9-11 Object.create bug fix (function () { var object = Object.create({}); object[0] = null; return object.hasOwnProperty(0); //→ false in IE9-11 }()) || (Object.create = new function () { var create = Object.create; return function (prototype, properties) { var object = create(prototype, properties); object[0] = null; object.fix = null; delete object[0]; //delete object.fix; //нельзя удалять! return object; }; }); придется фиксить так: //IE9-11 Object.create bug fix (function () { var object = Object.create({}); object[0] = null; return object.hasOwnProperty(0); //→ false in IE9-11 }()) || new function () { var create = Object.create; Object.create = function (prototype, properties) { function NOP() {} NOP.prototype = prototype; //Object.defineProperties fixes a bug return properties ? create(prototype, properties) : new NOP; }; }; |
Часовой пояс GMT +3, время: 19:23. |