Производительность JavaScript Generator Object - PullRequest
0 голосов
/ 02 сентября 2018

Я изучаю Объект генератора JavaScript (функция *), чтобы улучшить производительность моего кода. Поэтому я начал тестирование простого итератора, созданного с помощью функции *, и простого итератора, созданного с помощью классического объекта.

К моему удивлению, функция * кажется худшим решением, поэтому я должен был сделать что-то не так.

Здесь код, который я тестировал на DevTools Console (Opera Browser), и результаты теста.

function CounterObject(i) {
    this.init = i;
    this.next = function(){
        return {value:++this.init};
    }
}

function* CounterGenerator(i) {
    while(1) yield i++;
}

function benchmark(iterations) {
    console.time("CounterObject");
    c1 = new CounterObject(0);
    for (i=0;i<iterations;i++) c1.next();
    console.timeEnd("CounterObject");

    console.time("CounterGenerator");
    c2 = CounterGenerator(0);
    for (i=0;i<iterations;i++) c2.next();
    console.timeEnd("CounterGenerator");
}

Результаты испытаний:

> benchmark(10e5)
CounterObject: 10.68310546875ms
CounterGenerator: 35.446044921875ms

> benchmark(10e6)
CounterObject: 161.285888671875ms
CounterGenerator: 259.275146484375ms

> benchmark(10e8)
CounterObject: 14394.56396484375ms
CounterGenerator: 25258.369873046875ms

Что-то не так?

Спасибо.

...