Информация об изменениях

Сообщение Re[153]: Реальная производительность WebAssembly? от 13.03.2018 17:11

Изменено 13.03.2018 18:26 Pauel

Re[153]: Реальная производительность WebAssembly?
Здравствуйте, CoderMonkey, Вы писали:

I>>Полгода назад alexzzzzz "обогнал" JS примерно в 10 раз. Чего ты пыжишься со своими 577мс совершенно не ясно.


CM>Я, собственно, и не пытался выжимать биты из байтов.


Ну как же, ты целенаправленно изменил логику генерации данных. Это ж не я выдал с твого компа код, где гуид заменен на long.
А все просто объясняется — на старом ноде это увеличивало разницу в производительности между C# и JS.
Но вот на новом — уменьшает Ты обманул сам себя. Что бы разница между C# и JS была больше, надо вернуть Гуид, как было раньше.

I>>Выходит, 8я версия у тебя работает быстрее 8й версии у тебя же


CM>Патчи на ось ставятся, да к тому же бывают еще и минорные обновления. Не слышал, не?


Речь о том, что номер версии важен, т.к. 8я 8й рознь. И всё это из твоих результатов

>Чувак, тебе реально нужна помощь. И еще, попробуй работать. Тогда не придется сидеть на допотопном железе.


Похоже, ты сильно гордишься тем, что твоё железо работает ажно треть быстрее моего допотопного
Re[153]: Реальная производительность WebAssembly?
Здравствуйте, CoderMonkey, Вы писали:

I>>Полгода назад alexzzzzz "обогнал" JS примерно в 10 раз. Чего ты пыжишься со своими 577мс совершенно не ясно.


CM>Я, собственно, и не пытался выжимать биты из байтов.


Ну как же, ты целенаправленно изменил логику генерации данных. Это ж не я выдал с твого компа код, где гуид заменен на long.
А все просто объясняется — на старом ноде это увеличивало разницу в производительности между C# и JS.
Но вот на новом — уменьшает Ты обманул сам себя. Что бы разница между C# и JS была больше, надо вернуть Гуид, как было раньше.

I>>Выходит, 8я версия у тебя работает быстрее 8й версии у тебя же


CM>Патчи на ось ставятся, да к тому же бывают еще и минорные обновления. Не слышал, не?


Речь о том, что номер версии важен, т.к. 8я 8й рознь. И всё это из твоих результатов

>Чувак, тебе реально нужна помощь. И еще, попробуй работать. Тогда не придется сидеть на допотопном железе.


Похоже, ты сильно гордишься тем, что твоё железо работает ажно треть быстрее моего допотопного

Кстати говоря, вот еще более другой тест, в нем используется другой таймер, хардварный.

'use strict';

const N = 1000*1000;
const re = /-/g;

function time(){
    let start = process.hrtime();
    
    return start[0]*1000 + 0|start[1]/1000000;
}

function Main(number) {
    let watch = time();
    let vals = ToArray(Select(Range(0, number), x => new TestClass()));
    let compare = (x, y) =>{
        if(x === y)
            return 0;
        if(x > y)
            return 1;
        return -1;
    };
    console.warn(`Init, miliseconds: ${time() - watch}`);
    watch = time();
    QuickSort(vals, (x,y)=>compare(x.Id, y.Id));
    console.warn(`Sort miliseconds: ${time() - watch}`);
}

function QuickSort(vals, compare){
    QuickSortImpl(vals, compare, 0, vals.length - 1);
}

function QuickSortImpl (vals, compare, left, right) {
    if (right <= left)
        return;

    let i = left;
    let j = right;
    const mid = Math.floor((left + right) / 2);
    const midVal = vals[mid];

    while (i <= j) {
        while (compare(vals[i], midVal) > 0) {
            i++;
        }

        while (compare(vals[j], midVal) < 0) {
            j--;
        }

        if (i <= j) {
            const tmp = vals[i];
            vals[i] = vals[j];
            vals[j] = tmp;

            i++;
            j--;
        }
    }

    if(left < i - 1) {
        QuickSortImpl(vals, compare, left, i - 1);
    }

    if(right > i) {
        QuickSortImpl(vals, compare, i, right);
    }
}

class TestClass {
    constructor() {
        this.Id = CreateGuid();
        this.Value = CreateGuid();
    }

    toString() {
        return this.Id;
    }
}

function ToArray(iterator) {
    return [...iterator];
}

function* Range(start, end) {
    for(let i = start; i<end; i++) {
        yield i;
    }
}

function* Select(iterator, projector) {
    for(let x of iterator) {
        yield projector(x);
    }
}

function CreateGuid() {
    return NewGuid().toString().replace(re, "");
}

function NewGuid() {
    return ''+Math.floor(Math.random()*Math.pow(10,16));
}

function delay(time) {
    return new Promise((resolve)=>{
        setTimeout(resolve, time);
    });
}

for(let i = 0, promise = Promise.resolve(); i<100;i++) {
    promise = promise.then(()=>Main(N)).then(()=>delay(1000));
}