Здравствуйте, 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));
}