Но проблема в том, что люди прочитав статью, могут это все принять за чистую монету, и потом пойдут все свои циклы "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 и всех редакторов за помощь с оформлением, рекомендации, правки и подготовку к публикации.
Кажется, что 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мм не больше, даже иголка не входит. Как они его смазывали - великая тайна. Я, в итоге, капал это масло, размазывал его иголкой по зазору, а потом вдувал феном, холодным воздухом, чтобы оно хоть как-то туда проникло. Весь день так просидел.
Вот уже два года прошло, кулер работает идеально. Даже лучше чем новый)
Во вкладке "$Root" она показывает файлы ошибочно поставленной операционной системы, а дальше действительно идут "потерянные" каталоги и их просто огромное количество. Но 99.99% из них это каталоги из node_modules (это "технические" файлы и каталоги для web-разработки). А найти среди них действительно нужные данные просто нереально.
Нужно просто никогда не откладывать бэкапы. А когда ни разу не попадал в такую ситуацию, то к бэкапам возникает легкомысленное отношение. Я так же использую bitbucket, сервер и usb-hdd. Но оправдания собственной лени найти несложно: "Дождусь конца года и сделаю бэкап", "Допишу компонеты и тогда закомичу" и т.д. И в итоге все это копится.
Уже когда, по собственной глупости, я совершил ошибку, то всю неделю корил себя за то, что не съездил за usd-hdd и не сохранил все необходимое, когда уже поздно было.
Проекты восстановить получилось кажется полностью. Битые файлы были, но git подсветил их как измененные, и найти их труда не составило. Вообще git просто спас в этом плане.
Сейчас, кажется, многое изменилось. Раньше у кали была абсолютно чистая сборка, а сейчас ее нет. И "дока" была другой. Когда-то я делал себе "Linux для web-девелопера", с готовым набором всех нужных программ, на этой базе.
Да, это был первый раз. Вообще, до этих событий, у меня было наивное представление о восстановлении данных. Т.е. знал что есть testdisk и еще множество программ. Мне казалось что все это настолько "автоматизировано" и "запрограммировано", что проблем не бывает, если только диск пополам не сломан.
Я много всего перепробовал за ту неделю, просто не хочу никого рекламировать и, тем более, анти-рекламировать.
Про DMDE напишу - т.к. она встречалась буквально в каждой статье. Я пробовал DMDE FreeEdition для Linux, кажется, следующей после R-Linux и R-Studio. Но мне она не помогла. Прямо сейчас, кстати, я включил ее и загрузил образ раздела, полученный через testdisk (тот самый, с которого я смог все восстановить через R-Linux). Прямо сейчас она показывает мне файлы ошибочно поставленной операционной системы и миллиард удаленных каталогов с названием "$F0000...". В тот раз, кажется, было точно так же. И здесь вообще невозможно найти нужные данные.
Если вы в ней хорошо разбираетесь, будем признательны за рекомендации)
Спасибо) За первый совет особенно. Его нужно, реально, написать на стикере и приклеить к монитору. Всегда забываю про существование uuid, когда это нужно, и уверен что я такой не один.
Про рут вы правы. Чтобы это сделать нужно запускаться из под рута.
А если SSD EXT4 отформатировать "быстрым" способом, все данные так же будут полностью удалены? Или это будет зависеть от ФС в которую он будет отформатирован?
Да согласен, потому что бенчмарки так не пишутся.
Но проблема в том, что люди прочитав статью, могут это все принять за чистую монету, и потом пойдут все свои циклы "for" на "map" или "forEach" переписывать, думая что у них после этого перфоманс в 8 раз взлетит. Хотя в действительности так не будет.
Действительность:
К сервису measurethat, и к тем тестам, которые на нем пишут, вопросы возникали уже не раз. И некоторые Ваши тесты не исключение.
Но тест "Инициализация массива", это просто уже яркий пример того, что нужно задумываться.
По вашему тесту получается что, вместо того, чтобы просто создать массив и пройтись по нему один раз циклом, я сначала вызову метод "fill()", который внутри пройдет по нему циклом и заполнит "undefined", потом вызову "map(initializer)", который под капотом создаст новый массив и снова пройдет циклом заполняя его результатами функции "initializer". И вот это вот все будет работать в хроме быстрее В ВОСЕМЬ РАЗ (998 / 127)? Серьезно?
На сколько мне известно, когда хром видит в коде стандартный цикл "
for(...) {...}
", он может оптимизировать код внутри блока так, как если бы это был код внутри функции, т.е. если нет сайд-эффектов, то он может полностью выпилить весь код в блоке. Но сам цикл он оставляет и будет его итерировать, т.к. это стандартная статическая языковая конструкция и она "невыпиливаемая". (Простой пример, написать "for(;true;);", и браузер успешно намертво зависнет).Когда вы тестируете "
new Array(times).fill().map(initializer)",
ваш массив никуда не возвращается и нигде больше не используется и для хрома, после оптимизации, является "мертвым", а далее вы вызываете встроенные в движок методы массива, который для хрома уже не более чем "мусор". И передаете функцию "initializer", которая не имеет сайд-эффектов и ее даже необязательно вызывать.Оптимизация)
На деле же, все это будет работать раза в 4 медленнее.
Добро пожаловать в реальный мир)))
.
Просто великолепно. Просмотрел все серии на одном дыхании)))
Если второй сезон еще не закончен и вы будете выкладывать новый серии, поправьте в них звук пожалуйста. Громкость музыкальных отбивок в 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. Тогда только только один вариант - доставать жесткий диск и искать знакомых с нужной материнской платой, либо в сервис.
�
Было бы интересно узнать, что testdisk показывает в этом случае
Это уже примеры, когда диск фактически сломан. Т.е. на уровне оборудования. А вот если просто нужно данные восстановить...
Прозвучит наивно, но я, реально, с годами, все чаще задумываюсь что, если нужно что-то сделать - лучше сделать самому, или хотя бы разобраться базово. В комментарии чуть ниже написал почему так.
Просто подумал, вот обратился бы в какую-нибудь "сомнительную" контору, мне бы восстановили только то, что я и сам смог в первый раз (музыку, pdf-ки и гору "мусорных" каталогов все вперемешку), и скзали бы что это все, радуйся. Мало ли.
Как я понял, вам нужно не данные восстановить, а просто сделать 750GB снова доступными для чтения и записи?
В интернете пишут, что это можно сделать только на другом компе, где стоит материнская плата с UEFI. Преобразовать диск из MBR в GPT. Создать и отформатировать разделы, а после преобразовать обратно. Пишут, что можно сделать через утилиту fdisk.
А как быть если далеко не в default-city живешь? Мне, например, до ближайшего города-миллионника еще доехать нужно.
Не в тему, но расскажу:
Два года назад на ноуте начал жутко гудеть кулер. И ноут грелся, разумеется. Пошел в сервис, отдал 1500, сказали - "все починят". Прошло, реально, неделя, может две, и он опять гудеть начал. Я к ним снова прихожу, мне говорят, что тогда только под замену всю систему охлаждения, типа иногда их можно расклепать, но не все - моя сделана так, что только под замену. Под заказ такой системы охлаждения нет. Сказали, можете заказать на алиэкспресс китайскую поделку, принести им и они ее заменят. Я позвонил еще в несколько контор, объяснил, все говорят "все сделаем, вы только приезжайте", но новой системы охлаждения ни у кого нет.
В итоге решил посмотреть сам, думал, если что, то закажу китайскую. Купил масло, снял крышку с ноута. Там, между вентилятором и роторной частью, зазор 1мм не больше, даже иголка не входит. Как они его смазывали - великая тайна. Я, в итоге, капал это масло, размазывал его иголкой по зазору, а потом вдувал феном, холодным воздухом, чтобы оно хоть как-то туда проникло. Весь день так просидел.
Вот уже два года прошло, кулер работает идеально. Даже лучше чем новый)
Так это еще и "недалеко от правды" получается. Реально так дорого может быть?
А как это можно узнать? И каким образом это можно собрать?
Про 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 отформатировать "быстрым" способом, все данные так же будут полностью удалены? Или это будет зависеть от ФС в которую он будет отформатирован?