рдмрд╛рд▓реНрдЯреА рдФрд░ рдХреЛрд░ рдирд╣реАрдВ

рдЬреЛ рдХрд┐ jq рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдмреБрд░рд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдПрдХреНрд╕ рддрддреНрд╡ рд╣реИрдВ, рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрдЧрд╛, рдЕрдХреЗрд▓реЗ рдирд╣реАрдВред


рд▓реЗрдЖрдЙрдЯред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрддреНрд╡ рд╣реИрдВ - рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬрдирд╛ред
<body> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> <div class="testDiv"></div> </body> 

// рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд▓рдЧрднрдЧред

рдЬреЗ рдПрд╕ред
рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗрдВ, рд╣реИрдВрдЧ рдХреНрд▓рд┐рдХ, рдкреНрд░реЛрд╕реЗрд╕ рдХреНрд▓рд┐рдХ, рдЪреЗрдХ - рдЕрдирдЪреЗрдХ, рдЪреЗрдХ рдирд╣реАрдВ - рдорд╛рд░реНрдХ

jQ
рдХрдиреЗрдХреНрдЯреЗрдб jQ
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди
 $(function(){ $('.testDiv').on('click', function(){ var vedroCache = $(this); if (vedroCache.hasClass('isActiveTestDiv')){ vedroCache.removeClass('isActiveTestDiv'); } else{ vedroCache.addClass('isActiveTestDiv'); } }); }); 


рдЬреЗ рдПрд╕
рдЬрдХ рдХреЗ рдмрджрд▓реЗ
 // тЙИ2тАФ3        (function(u){ var J = {}, W = window, D = document, intCache; WJ = J; // search elements if ('getElementsByClassName' in document){ J.$c = function(className, from){ return (from || D).getElementsByClassName(className); } } else{ J.$c = function(className, from){ var cache = (from || D).getElementsByTagName('*'), result = [], i = cache.length, j = -1; for (; i-- ;){ if (cache[i].className.indexOf(className) !== -1){ result[j += 1](cache[i]); } } return result; } } // events if ('addEventListener' in W){ J.eventAdd = function(object, eventName, callback){ object.addEventListener(eventName, callback); }; J.eventDel = function(object, eventName, callback){ object.removeEventListener(eventName, callback); }; } else{ var ieFixEventsNameObjectsCallbacks = [], ieFixEventsObjectsAndCallbacksLength = 0, ieFixEventsHandlers = {}, fixEvent = function(e){ e.preventDefault = function(){ e.returnValue = false; }; e.stopPropagation = function(){ e.cancelBubble = true; }; e.target= e.srcElement; return e; }, ieAddFixEvent = function(object, eventName, callback){ function fix(){ callback.call(object, fixEvent(W.event)); } intCache = ieFixEventsObjectsAndCallbacksLength; ieFixEventsNameObjectsCallbacks[ieFixEventsObjectsAndCallbacksLength] = eventName; ieFixEventsObjectsAndCallbacksLength += 1; intCache += ieFixEventsObjectsAndCallbacksLength; ieFixEventsNameObjectsCallbacks[ieFixEventsObjectsAndCallbacksLength] = callback; ieFixEventsObjectsAndCallbacksLength += 1; intCache += ieFixEventsObjectsAndCallbacksLength; ieFixEventsNameObjectsCallbacks[ieFixEventsObjectsAndCallbacksLength] = object; ieFixEventsObjectsAndCallbacksLength += 1; ieFixEventsHandlers[intCache] = fix; object.attachEvent('on' + eventName, fix); }, ieRemoveFixEvent = function(object, eventName, callback){ for (var i = ieFixEventsObjectsAndCallbacksLength; i-- ;){ if ((ieFixEventsNameObjectsCallbacks[i] === object) && (ieFixEventsNameObjectsCallbacks[i - 1] === callback) && (ieFixEventsNameObjectsCallbacks[i - 2] === eventName)){ ieFixEventsNameObjectsCallbacks[i] = ieFixEventsNameObjectsCallbacks[i - 1] = ieFixEventsNameObjectsCallbacks[i - 2] = u; i = i * 3 - 3; break; } i -= 2; } if (i !== -1){ object.detachEvent('on' + eventName, ieFixEventsHandlers[i]); ieFixEventsHandlers[i] = u; } }; J.eventAdd = function(object, eventName, callback, isNotNeedFix){ if (isNotNeedFix === true){ object.attachEvent('on' + eventName, callback); } else{ ieAddFixEvent(object, eventName, callback); } }; J.eventDel = function(object, eventName, callback, isNotNeedFix){ if (isNotNeedFix === true){ object.detachEvent('on' + eventName, callback); } else{ ieRemoveFixEvent(object, eventName, callback); } }; } // classes J.classHas = function(object, className){ return object.className.indexOf(className) !== -1; //  * }; J.classAdd = function(object, className){ if (!J.classHas(object, className)){ object.className += ' ' + className; } }; J.classDel = function(object, className){ if (J.classHas(object, className)){ object.className = object.className.replace(className, ''); //  * } }; //*    DOM   тАФ   () ! // fast bad ready J.ready = function(callback){ var callbacks = [callback]; function ready(){ var iMax = callbacks.length, i = 0; J.eventDel(D, 'DOMContentLoaded', ready); J.eventDel(W, 'load', ready, true); for (;i < iMax; i += 1){ callbacks[i].call(J); } ready = callbacks = null; J.ready = function(callback){ callback.call(J); } } if ('addEventListener' in W){ J.eventAdd(D, 'DOMContentLoaded', ready); } J.eventAdd(W, 'load', ready, true); J.ready = function(callback){ callbacks.push(callback); } }; }()); 

рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдирд╛
 J.ready(function(){ var J = this, elems = J.$c('testDiv'), i = elems.length; function clickListener(){ J[J.classHas(this, 'isActiveTestDiv') ? 'classDel' : 'classAdd'](this, 'isActiveTestDiv'); } for (;i--;){ J.eventAdd(elems[i], 'click', clickListener); } }); 


рдмрд╛рд▓реНрдЯреА рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ 350 divs рдФрд░ рдЕрдЧрд▓реЗ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрдореБрд▓реЗрд╢рди
 if (!('console' in window) || !('time' in console)){ (function(w){ var times = {}, C; if (!('console' in w)){ w.console = C = {}; C.log = function(data){ alert(data); } } else{ C = w.console; } C.time = function(name){ times[name] = new Date().getTime(); }; C.timeEnd = function(name){ if (name in times){ return new Date().getTime() - times[name]; } }; }(window)); } 

рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реБрдЖ
masinka
рдФрд░ рд▓реЛрдордбрд╝реА рдореЗрдВ 18.0.1
jQ ms16ms
рдЬреЗ ms2 рдореА

рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
рдХреЛрдб рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ред

рдмрдХреЗрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд

$ (/ * рдЬреЛ рдХреБрдЫ рднреА * *) ./ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЛ * /

рд╣рдо jq рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдХ рд╣реА рд╣реИред

рд╕рдм рдХреБрдЫ (рдмрдХреЗрдЯ) рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддреИрдпрд╛рд░ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рд╢реЗрд▓ рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ
 //    ,     $('.testDiv').on('click', function(){ var vedroCache = $(this); //             if (vedroCache.hasClass('isActiveTestDiv')){ vedroCache.removeClass('isActiveTestDiv'); } else{ vedroCache.addClass('isActiveTestDiv'); } }); console.log(console.timeEnd('divs')); }); 


рдХреЛрдИ рдмрд╛рд▓реНрдЯреА рджреГрд╖реНрдЯрд┐рдХреЛрдг (рд╕рдорд╛рдзрд╛рди рд╕реЗрдЯ)

/ * рд╕рдорд╛рдзрд╛рди рдХрд╛ рдирд╛рдо * / (/ * рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ :) * / /)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИред

 J.ready(function(){ var J = this, elems = J.$c('testDiv'), //   i = elems.length; function clickListener(){ J[J.classHas(this, 'isActiveTestDiv') ? 'classDel' : 'classAdd'](this, 'isActiveTestDiv'); // ,   } for (;i--;){ J.eventAdd(elems[i], 'click', clickListener); //     } }); 

рдЖрдк рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рд╕рдм рдХреБрдЫ рджрд┐рдП рдмрд┐рдирд╛, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред

рдкрд░рд┐рдгрд╛рдо

рд╕рдВрдкрд╛рджрд┐рдд рднрд╛рдЧред
рдЙрдиреНрд╣реЛрдВрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред
рдореИрдВ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
1. рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ред
рдпрд╣ рд╕реЛрдЪрдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдмреБрд░рд╛ рд╣реИред

рдореИрдЬрд┐рдХ рдмреЙрдХреНрд╕, рдпрд╣рд╛рдБ рдореЗрд░рд╛ рддрддреНрд╡ рд╣реИ рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реЗ 5 рд╡реЗрдВ рд╕реНрддрд░ рдХреЗ рд╕рдкрдиреЛрдВ рдХреА рдХреНрд░рд┐рдпрд╛ рд╣реИред
рдЬрдм рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдпрд╣реА рдХрд╣рддреЗ рд╣реИрдВ
$ ('myElement')ред doDoingOfMyDrem (5);
рдмреЙрдХреНрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрд╕рд╕реЗ рдХреНрдпрд╛ рдкреВрдЫрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЖрд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛рдПрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ:
рдореЗрд░реЗ рд╕рдкрдиреЛрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдПрдХ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рдХрдХреНрд╖рд╛ рд╕реЗ, 5 рд╡реЗрдВ рд╕реНрддрд░ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
J рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреА рдорджрдж рд╕реЗ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛
J.doDoingOfMyDrem (J. $ c ('myElement'), 5);

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдВрдЫрд┐рдд рддрддреНрд╡ рдХрд╛ рд▓рд┐рдВрдХ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЗ DOM рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
$ (рдпрд╣) .doDoingOfMyDrem (5);
рдХреЗ рдЦрд┐рд▓рд╛рдл
рдЬреЗред рдбреВрдбрд┐рдВрдЧрдСрдлрдПрдо рдбреЗрдбреНрд░реАрдо (рдпрд╣, 5);

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ 350 divs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдордп, рдкрд░рд┐рдгрд╛рдо 14ms рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдЕрдВрддрд░ рдЕрд▓рдЧ рд╣реИред рд╕реНрд╡рдпрдВ рд╕реЗрд╡рд╛ рдХрд┐рдпреЛрд╕реНрдХ рдкрд░ рдЬреИрд╕реЗ рдХрд┐рд╡реА рдпрд╛ рдирдпрд╛ рднреБрдЧрддрд╛рди, рдЬреЛ рдЕрдм рддрдХ рдореБрдЭреЗ HTML рдореЗрдВ рдкрддрд╛ рд╣реИ, рддреАрд╕рд░рд╛ред рдФрд░ Android рдХреЗ рд╕рд╛рде рдЯреАрд╡реА рдкрд░?

3. рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЧрдВрднреАрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдпреБрдЧ рдЖрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрднреА рдмрдбрд╝реЗ рдФрд░ рдмрдбрд╝реЗ рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдбрд▓реЛрдВ рдХреЗ рдмрдбрд╝реЗ рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдВрднреАрд░ рдЪреАрдЬ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдиреНрдпреВрдирддрдо рднрддреНрддрд╛ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рди рддреЛ jQ, рдФрд░ рди рд╣реА рдХрдИ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдЧрдВрднреАрд░ рдиреАрдВрд╡ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рдпрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣рд┐рд╕реНрд╕рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ рдЬреЛ рдЕрдкрдиреЗ рдЬрд╛рджреВ рдХреЗ рдмрдХреНрд╕реЗ рдХреА рдХреАрдордд рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

Source: https://habr.com/ru/post/In166877/


All Articles