SlideShare a Scribd company logo
Performance optimisation in javascript
Кто это?
● Gameloft
● WebSpellChecker
● DevPro
● Pics.io
@blackrabbit99
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Причины падения браузеров
● Утечки памяти
● Куча http запросов
● Слабая конфигурация машины
Performance optimisation in javascript
UI
Trottling
Выполнение метода не чаще одного раза в указанный период, даже если
он будет вызван много раз в течение этого периода
Debouncing
● Реальный вызов происходит только в случае, если с момента
последней попытки прошло время, большее или равное задержке.
● Реальный вызов происходит сразу, а все остальные попытки вызова
игнорируются, пока не пройдет время, большее или равное задержке,
отсчитанной от времени последней попытки.
Вычисления
Memoization
Memoization
Function.prototype.memoize = function(){
var self = this, cache = {};
return function( arg ){
if(arg in cache) {
console.log('Cache hit for '+arg);
return cache[arg];
} else {
console.log('Cache miss for '+arg);
return cache[arg] = self( arg );
}
}
}
Memoization
function hugeCalc(a){ ... }
var memoHugeCalc = hugeCalc.memoize();
memoHugeCalc(1);
memoHugeCalc(1);
memoHugeCalc(2);
Self-defining functions
var defineMeAgain = function () {
console.log("First");
defineMeAgain = function () {
console.log("Second");
};
};
Self-defining functions
var secondFun = defineMeAgain;
secondFun(); // "Boo!"
secondFun(); // "Boo!"
defineMeAgain(); // Double boo!
defineMeAgain(); // Double boo!
Look up tables
Целочисленные значения
ctx.drawImage(myImage, 0.3, 0.5)
CSS3 transform
Nearest-neighbour rendering
Не создавайте мусор
● Array.slice
● Array.splice
● Function.bind
Микрооптимизация
● Use x | 0 instead of Math.floor
● Clear arrays with .length = 0 to avoid creating a new Array
● Use if .. else over switch
● Use TypedArrays for floats or integers (e.g. vectors and matrices)
Weak maps
var map = new WeakMap(),
element = jsObject;
map.set(element, {imAssosiatedWith: 'element'});
var value = map.get(element);
console.log(value);
element = null;
value = map.get(element);
console.log(value);
Object pool
Object pool
WebWorkers
WebWorkers
● Web workers не могут доступиться к DOM элементам
● Web workers ничего не знают о глабольном скоупе, скоуп у них свой
● Web workers не знают о alert и confirm
● Window, documents также недоступны
WebWorkers
Могут запустить потоки паралельно!!!!
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Performance optimisation in javascript
Web Workers
● Dedicated Web Worker
● Shared Web Worker
● Http transport
● Error handling
● Terminate
Parallel.js
var dataToParalel = plugin.prepare(imageSlices.getSliceList(), data);
var p = new Parallel(dataToParalel);
p.map(cb).then(next);
Еще проблем
API для асинхронной работой с key-value базой данных
IndexedDB
var transaction = db.transaction(["history"],IDBTransaction.READ_WRITE);
var put = transaction.objectStore("history").put(blob, "image");
IndexedDB
SIMD дает возможность работать с векторами, а не с одиночными значениями
Simd
● loat32x4 (C type: __m128): four 32 bit floating point numbers.
● uint32x4 (C type: __m128i): four 32 bit unsigned integers.
Simd
var a = SIMD.float32x4(1.0, 2.0, 3.0, 4.0);
var b = SIMD.float32x4(5.0, 6.0, 7.0, 8.0);
var c = SIMD.float32x4.add(a,b);
Simd
float32x4.abs(v)
float32x4.neg(v)
float32x4.sqrt(v)
float32x4.add(v, w)
float32x4.mul(v, w)
float32x4.equal(v, w)
Simd
Движок River Trail даст толчек ParallelJS. ParallelArray позволят работать с данными
паралельно
ParallelJS
ParallelJS
● Array.prototype.mapPar()
● Array.prototype.filterPar()
● Array.prototype.reducePar()
WebCL
WebCL — спецификация, которая описывает JavaScript-интерфейс к стандарту OpenCL (Open Computing Language), для
организации кросc-платформенных паралельных вычислений с использованием CPU и GPU-видеокарт.
Дякую
QA

More Related Content

PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PDF
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
PPTX
JavaScript: прошлое, настоящее и будущее.
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PPTX
Tdd webpack + testem + mocha + chai
PPTX
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
PPT
Web весна 2013 лекция 9
PDF
PostgreSQL Vacuum: Nine Circles of Hell
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
JavaScript: прошлое, настоящее и будущее.
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Tdd webpack + testem + mocha + chai
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Web весна 2013 лекция 9
PostgreSQL Vacuum: Nine Circles of Hell

What's hot (20)

PPTX
Async Javascript
PDF
Превышаем скоростные лимиты с Angular 2
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PDF
CSSO — сжимаем CSS
PDF
Алексей Распопов "Будущее асинхронного программирования в ECMAScript"
PDF
«Как перестать отлаживать асинхронные вызовы и начать жить»​
PDF
Профилирование кода на C/C++ в *nix системах
PDF
"Пиринговый веб на JavaScript"
PDF
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
ODP
The Great Migration by Baruch Sadogursky
PPTX
Коротко о React.js
PDF
Как выглядит современный фронтенд
PDF
Суперсилы Chrome developer tools
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PPTX
PowerShell
PDF
Devcamp nodejs-2010
PDF
JavaDay'14
PPTX
Reactive UI на C#
PPTX
Олексій Андрусевич “Прискорення робочого процесу в Adobe Photoshop за допомог...
ODP
Smirnov twisted-python
Async Javascript
Превышаем скоростные лимиты с Angular 2
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
CSSO — сжимаем CSS
Алексей Распопов "Будущее асинхронного программирования в ECMAScript"
«Как перестать отлаживать асинхронные вызовы и начать жить»​
Профилирование кода на C/C++ в *nix системах
"Пиринговый веб на JavaScript"
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
The Great Migration by Baruch Sadogursky
Коротко о React.js
Как выглядит современный фронтенд
Суперсилы Chrome developer tools
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PowerShell
Devcamp nodejs-2010
JavaDay'14
Reactive UI на C#
Олексій Андрусевич “Прискорення робочого процесу в Adobe Photoshop за допомог...
Smirnov twisted-python
Ad

Viewers also liked (6)

PPTX
PDF
Fullstack javascript. Isomorphic apps
PDF
Fiber Optical cable brochure-QianXin
PDF
Cloud computing: An introduction
PPT
Cloud computing simple ppt
Fullstack javascript. Isomorphic apps
Fiber Optical cable brochure-QianXin
Cloud computing: An introduction
Cloud computing simple ppt
Ad

Similar to Performance optimisation in javascript (20)

PPTX
Тестирование отклика Web-интерфейса с JMeter и Selenium
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PDF
Инструментируй это
PDF
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
PPTX
Типичные ошибки начинающих писать тесты на WebDriver
PPTX
JavaScript как объектно-ориентированный язык программирования
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PPTX
Система обработки бизнес-логики server-side приложения на Groovy
PPTX
Luxoft async.net
PPTX
PPTX
Асинхронность и сопрограммы
PDF
Mihail davidov js-ajax
PDF
Асинхронный JavaScript
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PDF
Lift, play, akka, rails part1
KEY
Batch processing in rails
PDF
Михаил Давыдов — Транспорт, Ajax
PDF
Григорий Демченко — Асинхронное программирование и сопрограммы
PPTX
I tmozg js_school
PDF
Batch processing on RoR
Тестирование отклика Web-интерфейса с JMeter и Selenium
Node.js введение в технологию, КПИ #ITmeetingKPI
Инструментируй это
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
Типичные ошибки начинающих писать тесты на WebDriver
JavaScript как объектно-ориентированный язык программирования
Фундаментальные основы разработки под iOS. Павел Тайкало
Система обработки бизнес-логики server-side приложения на Groovy
Luxoft async.net
Асинхронность и сопрограммы
Mihail davidov js-ajax
Асинхронный JavaScript
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Lift, play, akka, rails part1
Batch processing in rails
Михаил Давыдов — Транспорт, Ajax
Григорий Демченко — Асинхронное программирование и сопрограммы
I tmozg js_school
Batch processing on RoR

Performance optimisation in javascript