13
Вредные советы Javascript-разработчику or how to get fast at no cost

Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Embed Size (px)

Citation preview

Page 1: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Вредные советы

Javascript-разработчику

or how to get fast at no cost

Page 2: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

V8 and others

1. Не стесняйтесь конструкторов (Maps)

2. Псевдотипизированные массивы (Number arrays)

3. Inlining (Постоянство типов)

4. Try {} catch {}

5. Не пишите свой StringBuffer (...Builder, etc.)

Page 3: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

V8 Maps

1. Каждый раз, когда вы добавляете свойство,

создаётся новый map.

2. Но не “внутри” конструктора.

3. Тем не менее, и эту оптимизацию можно сломать -

достаточно инициализировать свойства в случайном

порядке.

Page 4: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Number arrays

1. Массивы оптимизируются, если они “сплошные”.

2. Для цифр в однородных массивах метаинформация

хранится один раз.

Page 5: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Functions

Мономорфная функция лучше полиморфной try {} catch {} снаружи лучше, чем внутри

Page 6: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Native doesn’t mean fast

Array.prototype.indexOf()

Page 7: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Eimscripten

SQLite in a pure Javascript? - Easy!

Page 8: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Function.prototype.bind()

Page 9: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Function.prototype.bind()

Page 10: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Function.prototype.bind()

All you need is THIS

Page 11: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

Function.prototype.bind()

And if you use Underscore.js:

Page 12: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

bind() that you don’t need.

Page 13: Ciklum Front-end Developers Speakers' Corner, June 17, 2014 Доклад "Вредные советы JavaScript-разработчику" Автор: Андрей Позняк

THINK OOP = BE FAST