Pull to refresh
30
0
Send message

Да согласен, потому что бенчмарки так не пишутся.

Но проблема в том, что люди прочитав статью, могут это все принять за чистую монету, и потом пойдут все свои циклы "for" на "map" или "forEach" переписывать, думая что у них после этого перфоманс в 8 раз взлетит. Хотя в действительности так не будет.

Действительность:

const arr = new Array(65536).fill(0)

function callback(v, k, a) {
  a[k] = v + k
}

function test_for() {
  console.time('bench     for')
  for (let j = 0; j < 1000; j++) {
    for (let i = 0; i < arr.length; i++) callback(arr[i], i, arr)
  }
  console.timeEnd('bench     for')
}

function test_forEach() {
  console.time('bench forEach')
  for (let j = 0; j < 1000; j++) {
    arr.forEach(callback)
  }
  console.timeEnd('bench forEach')
}

setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)
setTimeout(test_for), setTimeout(test_forEach)

setTimeout(() => { console.log(arr) }, 100)



// РЕЗУЛЬТАТ:
/*
bench     for: 478.824951171875 ms
bench forEach: 973.968994140625 ms
bench     for: 471.277099609375 ms
bench forEach: 934.132080078125 ms
bench     for: 124.044921875 ms
bench forEach: 924.15087890625 ms
bench     for: 128.7451171875 ms
bench forEach: 929.00927734375 ms
bench     for: 123.68798828125 ms
bench forEach: 919.563232421875 ms
bench     for: 123.55908203125 ms
bench forEach: 150.320068359375 ms
bench     for: 123.626953125 ms
bench forEach: 148.734130859375 ms
bench     for: 124.884033203125 ms
bench forEach: 148.5390625 ms
*/

К сервису measurethat, и к тем тестам, которые на нем пишут, вопросы возникали уже не раз. И некоторые Ваши тесты не исключение.

Но тест "Инициализация массива", это просто уже яркий пример того, что нужно задумываться.

По вашему тесту получается что, вместо того, чтобы просто создать массив и пройтись по нему один раз циклом, я сначала вызову метод "fill()", который внутри пройдет по нему циклом и заполнит "undefined", потом вызову "map(initializer)", который под капотом создаст новый массив и снова пройдет циклом заполняя его результатами функции "initializer". И вот это вот все будет работать в хроме быстрее В ВОСЕМЬ РАЗ (998 / 127)? Серьезно?

На сколько мне известно, когда хром видит в коде стандартный цикл "for(...) {...}", он может оптимизировать код внутри блока так, как если бы это был код внутри функции, т.е. если нет сайд-эффектов, то он может полностью выпилить весь код в блоке. Но сам цикл он оставляет и будет его итерировать, т.к. это стандартная статическая языковая конструкция и она "невыпиливаемая". (Простой пример, написать "for(;true;);", и браузер успешно намертво зависнет).

Когда вы тестируете "new Array(times).fill().map(initializer)", ваш массив никуда не возвращается и нигде больше не используется и для хрома, после оптимизации, является "мертвым", а далее вы вызываете встроенные в движок методы массива, который для хрома уже не более чем "мусор". И передаете функцию "initializer", которая не имеет сайд-эффектов и ее даже необязательно вызывать.

Оптимизация)

На деле же, все это будет работать раза в 4 медленнее.

Добро пожаловать в реальный мир)))

const times = 65535

function initializer(val, z) {
  const i = z % 5 | 0
  return (z % 3 | 0) == 0 ? i === 0 ? 'fizzbuzz' : 'fizz' : i === 0 ? 'buzz' : z
}

function test_for() {
// Bench for
  let b1
  console.time('bench for')
  for (let j = 0; j < 1000; j++) {
    b1 = new Array(times)
    for (let i = 0; i < times; i++) {
      b1[i] = initializer(b1[i], i)
    }
  }
  console.timeEnd('bench for')
  // console.log([b1])
  return b1
}

function test_map() {
// Bench fill map
  let b2
  console.time('bench map')
  for (let j = 0; j < 1000; j++) {
    b2 = new Array(times).fill().map(initializer)
  }
  console.timeEnd('bench map')
  // console.log([b2])
  return b2
}

setTimeout(test_for), setTimeout(test_map)
setTimeout(test_for), setTimeout(test_map)
setTimeout(test_for), setTimeout(test_map)
setTimeout(test_for), setTimeout(test_map)

/*
bench for: 568.27294921875 ms
bench map: 1711.642822265625 ms

bench for: 594.904052734375 ms
bench map: 1728.125732421875 ms

bench for: 478.802978515625 ms
bench map: 1684.43798828125 ms

bench for: 474.054931640625 ms
bench map: 1763.044189453125 ms
*/

.

Просто великолепно. Просмотрел все серии на одном дыхании)))

Если второй сезон еще не закончен и вы будете выкладывать новый серии, поправьте в них звук пожалуйста. Громкость музыкальных отбивок в 2-3 раза громче диалогов, приходится постоянно убавлять/прибавлять.

Ждем новых серий)

Cпасибо команде RUVDS за то что проводите такие конкурсы и предоставили возможность опукликоваться. Если бы не Вы - моей статьи бы не было, я даже не думал что когда-нибудь что-то напишу.

Поэтому я особенно хочу поблагодарить Наталью Долину @JohurN и всех редакторов за помощь с оформлением, рекомендации, правки и подготовку к публикации.

И спасибо сообществу хабра за лайки)))

Сначала нужно подключить к VBox физический диск, как в этой инструкции: Использование физического диска в VirtualBox

А далее можно поставить на него систему. Только это придется делать с root правами, например, запустив VBox через терминал так:

$ sudo virtualbox

Кажется, что testdisk видит все сектора жесткого диска (их 364801, а последний раздел заканчивается сектором 267349).

Мой план действий был бы такой (можете последовать, но под вашу ответственность):

1. Нажать [Quick Search] и посмотреть - найдется ли раздел (скорее всего, там не будет вашего раздела).

2. Нажать [Deeper search]. Нужный раздел будет в конце диска, поэтому придется ждать до конца. 3TB - это примерно 10-15 часов ожидания. Когда дойдете до этого этапа, пройдетесь по найденным разделам клавишей [p] (будьте аккуратнее с выходом из разделов, иначе придется сканировать заново). Если найдете Ваш раздел и там будут файлы и каталоги, можно сохранить данные с помощью клавиши [s]. Если нужного раздела нет, то тогда шаг 3.

3. Если testdisk сможет досканировать Ваш диск до самого конца, значит можно попробовать другие программы (к сожалению, кроме R-Studio и DMDE посоветовать больше ничего не могу). Если нет - значит это уже ограничение на "уровне оборудования" и, врят ли, найдется программа, которая пробьет барьер в 2.2TB. Тогда только только один вариант - доставать жесткий диск и искать знакомых с нужной материнской платой, либо в сервис.

Это уже примеры, когда диск фактически сломан. Т.е. на уровне оборудования. А вот если просто нужно данные восстановить...

Прозвучит наивно, но я, реально, с годами, все чаще задумываюсь что, если нужно что-то сделать - лучше сделать самому, или хотя бы разобраться базово. В комментарии чуть ниже написал почему так.

Просто подумал, вот обратился бы в какую-нибудь "сомнительную" контору, мне бы восстановили только то, что я и сам смог в первый раз (музыку, pdf-ки и гору "мусорных" каталогов все вперемешку), и скзали бы что это все, радуйся. Мало ли.

Как я понял, вам нужно не данные восстановить, а просто сделать 750GB снова доступными для чтения и записи?

В интернете пишут, что это можно сделать только на другом компе, где стоит материнская плата с UEFI. Преобразовать диск из MBR в GPT. Создать и отформатировать разделы, а после преобразовать обратно. Пишут, что можно сделать через утилиту fdisk.

А как быть если далеко не в default-city живешь? Мне, например, до ближайшего города-миллионника еще доехать нужно.

Не в тему, но расскажу:

Два года назад на ноуте начал жутко гудеть кулер. И ноут грелся, разумеется. Пошел в сервис, отдал 1500, сказали - "все починят". Прошло, реально, неделя, может две, и он опять гудеть начал. Я к ним снова прихожу, мне говорят, что тогда только под замену всю систему охлаждения, типа иногда их можно расклепать, но не все - моя сделана так, что только под замену. Под заказ такой системы охлаждения нет. Сказали, можете заказать на алиэкспресс китайскую поделку, принести им и они ее заменят. Я позвонил еще в несколько контор, объяснил, все говорят "все сделаем, вы только приезжайте", но новой системы охлаждения ни у кого нет.

В итоге решил посмотреть сам, думал, если что, то закажу китайскую. Купил масло, снял крышку с ноута. Там, между вентилятором и роторной частью, зазор 1мм не больше, даже иголка не входит. Как они его смазывали - великая тайна. Я, в итоге, капал это масло, размазывал его иголкой по зазору, а потом вдувал феном, холодным воздухом, чтобы оно хоть как-то туда проникло. Весь день так просидел.

Вот уже два года прошло, кулер работает идеально. Даже лучше чем новый)

«10 долларов за мегабайт, без гарантии целостности»

Так это еще и "недалеко от правды" получается. Реально так дорого может быть?

Про DMDE упоминалось выше в комментариях.

Вот скрин того, что ей удалось найти:

Во вкладке "$Root" она показывает файлы ошибочно поставленной операционной системы, а дальше действительно идут "потерянные" каталоги и их просто огромное количество. Но 99.99% из них это каталоги из node_modules (это "технические" файлы и каталоги для web-разработки). А найти среди них действительно нужные данные просто нереально.

Благодарю)

В интернете эта тема, реально, - "темный лес". Спасибо сообществу, что делитесь опытом и знаниями)

Нужно просто никогда не откладывать бэкапы. А когда ни разу не попадал в такую ситуацию, то к бэкапам возникает легкомысленное отношение. Я так же использую bitbucket, сервер и usb-hdd. Но оправдания собственной лени найти несложно: "Дождусь конца года и сделаю бэкап", "Допишу компонеты и тогда закомичу" и т.д. И в итоге все это копится.

Уже когда, по собственной глупости, я совершил ошибку, то всю неделю корил себя за то, что не съездил за usd-hdd и не сохранил все необходимое, когда уже поздно было.

Проекты восстановить получилось кажется полностью. Битые файлы были, но git подсветил их как измененные, и найти их труда не составило. Вообще git просто спас в этом плане.

Посмотрите здесь: Creating A Custom Kali ISO

Сейчас, кажется, многое изменилось. Раньше у кали была абсолютно чистая сборка, а сейчас ее нет. И "дока" была другой. Когда-то я делал себе "Linux для web-девелопера", с готовым набором всех нужных программ, на этой базе.

Да, это был первый раз. Вообще, до этих событий, у меня было наивное представление о восстановлении данных. Т.е. знал что есть testdisk и еще множество программ. Мне казалось что все это настолько "автоматизировано" и "запрограммировано", что проблем не бывает, если только диск пополам не сломан.

Я много всего перепробовал за ту неделю, просто не хочу никого рекламировать и, тем более, анти-рекламировать.

Про DMDE напишу - т.к. она встречалась буквально в каждой статье. Я пробовал DMDE FreeEdition для Linux, кажется, следующей после R-Linux и R-Studio. Но мне она не помогла. Прямо сейчас, кстати, я включил ее и загрузил образ раздела, полученный через testdisk (тот самый, с которого я смог все восстановить через R-Linux). Прямо сейчас она показывает мне файлы ошибочно поставленной операционной системы и миллиард удаленных каталогов с названием "$F0000...". В тот раз, кажется, было точно так же. И здесь вообще невозможно найти нужные данные.

Если вы в ней хорошо разбираетесь, будем признательны за рекомендации)

А правильная статья по стрельбе в коленку - это как не стрелять :)

Когда уже сидишь с прострелянной коленкой, такие статьи уже не актуальны))

Спасибо) За первый совет особенно. Его нужно, реально, написать на стикере и приклеить к монитору. Всегда забываю про существование uuid, когда это нужно, и уверен что я такой не один.

Про рут вы правы. Чтобы это сделать нужно запускаться из под рута.

А если SSD EXT4 отформатировать "быстрым" способом, все данные так же будут полностью удалены? Или это будет зависеть от ФС в которую он будет отформатирован?

1

Information

Rating
Does not participate
Works in
Registered
Activity