Peter Širka - Brutal Web Developer
Ďalšie malé optimalizácie v JavaScripte

Tue Sep 27 2016 13:10:11 GMT+0200 (Central European Summer Time)

Ďalšie malé optimalizácie v JavaScripte

V tomto blogu sa pozrieme ešte na ďalšie nano-micro optimalizácie JavaScriptového kódu, ktoré môžu trochu pomôcť v špecifických prípadoch.

Triedenie array

V prípade, že triedite polia na client-side alebo server-side node.js, tak v niektorých prípadoch sa oplatí triediť pole tak, že string hodnoty jednoducho skrátime. Nižšie uvedenú optimalizáciu používam v Total.js frameworku.

// Budeme triediť len prvé 3 znaky
var maxlength = 3;

array.sort(function(valueA, valueB) {
    return valueA.substring(0, maxlength).removeDiacritics().localeCompare(valueB.substring(0, maxlength).removeDiacritics());
});

Pri UTF8 je vyššie uvedené riešenie dosť rýchle, nakoľko v JS nevieme triediť UTF8 znaky (rozumej napr. SK diakritiku) a tak jednoduché riešenie je odstrániť diakritiku zo stringu a vytriediť ho tak ako je (áno, nebude to presné, ale stále lepšie ako drôtom do oka). Čo sa týka ešte triedenia v JS, tak Total.js framework má implementovaný quicksort algoritmus, ktorý je rýchlejší ako vstavaný Array.sort() - zatiaľ som nezaznamenal žiadne problémy.

Null a Undefined

Toto porovnanie používam často v podmienkach a krásne Vám vie nahradiť túto konštrukciu:
if (value !== undefined && value !== null)

var str = '';
var num = 0;
var obj_null = null;
var obj_undefined;

console.log(str == null); // false
console.log(num == null); // false
console.log(obj_null == null); // true
console.log(obj_undefined == null); // true

Regulárne výrazy

Ak používate string.match() len na overenie, či string obsahuje Vami hľadanú hodnotu alebo nie, tak z hľadiska performance je oveľa lepšie použiť regexp.test(string) ako string.match().

var str = 'aldkjaldj 9034390';

var regexp = /[0-9]+/;
if (regexp.test(str))
   console.log('OK');

// miesto
if (str.match(regexp))
   console.log('OK');

Pri regexp.test() a použití globalneho modifikátoru /g si dávajte veľký pozor:

var reg = /\w+/g;

console.log(reg.test('aaa bbb')); // true
console.log(reg.test('aaa bbb')); // true
console.log(reg.test('aaa bbb')); // false
console.log(reg.test('aaa bbb')); // true
var reg = /\w+/;

console.log(reg.test('aaa bbb')); // true
console.log(reg.test('aaa bbb')); // true
console.log(reg.test('aaa bbb')); // true
console.log(reg.test('aaa bbb')); // true

Mne sa bohužiaľ takéto niečo stalo a chyba sa hľadala veľmi ťažko, preto o tom teraz píšem. Takže dávajte si na to pozor. Na záver regulárnych výrazov pridávam ešte jeden tip a to: cache-ujte regulárne výrazy, zvýšite performance:

var str = '  aaa  ';

// BAD
for (var i = 0; i < 100000; i++) {
    var a = str.match(/[a-z0-9]+/);
}

// GOOD
var reg = /[a-z0-9]+/;
for (var i = 0; i < 100000; i++) {
    var a = str.match(reg);
}

Poradie v porovnávaní

Správne poradie v podmienkach dokáže tiež zvýšiť performance Vašej aplikácie, príklad:

var obj = {};

obj.age = 30;
obj.date = new Date();


// BAD
if (obj.date < new Date() && obj.age > 30) {
}

// GOOD
if (obj.age > 30 && obj.date < new Date()) {
}

Moje doporučenie pre porovnávanie:

  • v podmienkach ak je to možné, začíname vždy jednoduchými typmi: boolean, integer, string
  • následne riešiť menej náročné porovnania - až po tie náročnejšie

Značky


Posledné blogy
Brutálny polrok 2018
Fri Jun 22 2018 09:48:21 GMT+0200 (Central European Summer Time)
Konferencia/Workshop: TotalCon 2017
Thu Nov 16 2017 22:06:55 GMT+0100 (Central European Standard Time)
CodeCon 2017 z pohľadu organizátora
Sun Apr 09 2017 09:27:34 GMT+0200 (Central European Summer Time)
Elektrický bicykel KTM MACINA KAPOHO SLX 2017
Fri Mar 31 2017 15:32:37 GMT+0200 (Central European Summer Time)
Total.js platforma - školenia
Mon Jan 16 2017 18:35:05 GMT+0100 (Central European Standard Time)

Posledné komentáre
Thank you for your work! You are the great friend, great person and great expert!
Jozef Gula
Mon Jun 25 2018 08:02:14 GMT+0200 (Central European Summer Time)
It's been an absolute pleasure collaborating with you Peter, I've learned so much from Total.js a...
Pedro Costa
Fri Jun 22 2018 19:18:22 GMT+0200 (Central European Summer Time)
Tento skateboard až tak kopec nerieši, pretože má 2 silné motory. So mnou vyšiel všade, kde som b...
Peter Širka
Fri Jul 14 2017 09:30:56 GMT+0200 (Central European Summer Time)
Dobry den jak se vypořadavá s kopci ?
Lukáš
Thu Jul 13 2017 20:44:43 GMT+0200 (Central European Summer Time)
Chlapci z firmy Nazaret Pánu Bohu ďakujú a Tebe blahoželajú k dobre odvedenej práci. Super Peťo, ...
Tomáš
Thu Dec 15 2016 08:08:15 GMT+0100 (Central European Standard Time)