1) Создайте объект и дайте ему простой метод, например,
let R = {
f: (x) => Math.sqrt(x)
}
2) Оцените его производительность, например, вызовите f (x) несколько миллионов раз 3) Теперь добавьте геттер, например,
let R = {
f: (x) => Math.sqrt(x),
get h() {return 0}
}
4) Снова отметьте f (x). Производительность в chrome / node (двигатель V8) значительно падает.
Есть какие-нибудь объяснения этой странности?
Вот фрагмент кода для этого: https://codepen.io/iiroullin/pen/XWbwoVQ
Обходной путь:
Кажется, что определение метода получения / установки старого (ES5) способа не нарушает оптимизацию V8. Таким образом, пока они сглаживают все перегибы в ES6, вместо (3) можно использовать это:
Object.defineProperty(R, 'h', {get: () => 0})
и тому подобное для всех получателей / установщиков.
Другое исправление :
Используйте классы, см. Ответ ниже