Хабр! Добро пожаловать снова.
Сегодня я расскажу о том как писатели Хабра теряют свои статьи из за ошибок в работе редактора Хабра. Если вы хоть раз сталкивались с тем чтобы опубликовать накопленные знания то вам должна быть известна эта проблема. Мне бы очень хотелось чтобы разработчики Habr и Chromium услышали меня и исправили эту проблему как можно скорее.
localStorage
Эта проблема существует с 2018 года именно тогда я впервые публиковался на Хабре и точно помню что все написаное как тогда так и сейчас хранилось в localStorage — локальное хранилище данных в браузере в виде объекта содержащего строки. Очень просто очищается внезапным сбоем в системе, также неправильным закрытием браузера или любым другим непредсказуемым событием. В целом localStorage это классный инструмент, для хранения мелких и незначительных данных в браузере.
Я считаю что это не правильно, нельзя так разнузданно хранить данные в которые вложены часы. Редактирование и организация которых может продолжаться ни одну неделю или месяц. Бывает так что ты возвращаешься к написанию через несколько дней или недель чтобы дополнить статью, а ее просто нет, ее нельзя восстановить из автосохранения. Каждый раз это лотерея и я лично уже несколько раз попался на эту историю, честно сказать я даже сохранял localStorage в JSON файл чтобы вдруг что-то не потерять и восстановить через консоль браузера, а сейчас и вовсе пишу эту статью в заметках но это не так удобно, потому что потом мне придется пойти еще на Хабр и там все отредактировать и расставить по своим местам.
P.S. Буквально неделю я готовил вторую часть статьи о разработке и публикации расширения для браузера, решил дописать её этим вечером, не дописал.
P.P.S. В комментариях поднялась бурная дискурсия на тему работы localStorage и самого редактора, пришлось придумать как воссоздать баг по крайней мере в Mac OS он получается таким образом:
Заходим в редактор пишем что-то
Переходим в какой-нибудь раздел
Возвращаемся в редактор
Восстанавливаем из автосохранения
Принудительно закрываем браузер (я ничего не трогаю в браузере)
Открываем снова
Переходим в редактор
Автосохранения нет
???
Принудительно закрытый браузер — это имитация любой проблемы с операционной системой, отключения электричества, синий экран, ошибка ядра. То есть можем точно подтвердить что если во время редактирования статьи у нас что-то случилось с браузером скорее всего мы ее потеряем. Обычно когда я выключаю компьютер, у меня все программы закрывают сами, в том числе и браузер где может быть открыта статья.
P.P.P.S. Пришлось провести дополнительное расследование, чтобы понять в чем истинная проблема, сразу скажу что дело не в localStorage и не в периодичности обновления localStorage, а в способе хранения, дело в том что после восстановления статьи из автосохранения ее там больше нет, она вычищается, а по-хорошему её нужно не удалять, а заменять новыми данными если они есть.
С помощью не хитрого кода можно отследить что редактор обновляет localStorage каждый раз после изменения через 3 секунды.
Код
let oldLS = JSON.stringify(localStorage)
setInterval(() => {
const newLS = JSON.stringify(localStorage)
if (newLS !== oldLS) {
oldLS = JSON.stringify(localStorage)
console.log('update localStorage')
}
})
Проверить проблему можно просто восстановив из автосохранения и не сделав ни одной правки закрыть ее, после этого сохранения уже не будет.
Хабр, не удаляй автосохранения из localStorage после восстановления статьи.