pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Проблема с DNS в браузере ERR_CONNECTION_TIMED_OUT?

Лучший ответ: Скорее всего вопрос к провайдеру. либо к РКН
Как вариант - попробуйте использовать сторонние DNS (cloudflare или аналогичные)
Так же попробуйте включить DOH в системе для DNS

Худший ответ: ERR_CONNECTION_TIMED_OUT может быть, если DNS шлет вас не по тому IP. 
Проверьте, что у вас в файле hosts и пропишите в настройках сетевой карты или роутера сторонние DNS от Google, Cloudflare, Yandex и т.д.
Вопрос: Есть ли какой-то best practice создания HTML (JS) табов?

Лучший ответ: Пожалуйте: https://inclusive-components.design/tabbed-interfaces/

Худший ответ: Есть несколько правил.


Реализация переключения табов не должна быть связана с дизайном этих табов. Ты должен иметь возможнось использовать любой html в качестве элементов интерфейса, кнопки, контент и тд.
Элементов может быть сколь угодно, причем они могут повторяться. Как элементы табов, так и сами блоки.


Из этого следует то, что ни html элементы, ни css, не способны в полной мере покрыть эти задачи. А значит придется писать реализацию на js, навешивая дата атрибуты на элементы, чтоб определить их назначение и отделить одни табы от других.
Вопрос: Можно сделать обычный шрифт моноширинным?

Лучший ответ: Некоторые шрифты поддерживают стиль font-variant-numeric: tabular-nums;

Худший ответ: А еще можно в стиле написать font-family: monospace;
В этом случае пользователь в любом случае увидит моноширинный шрифт, причем тот, который установлен у него в системе.
Вопрос: Почему нельзя тип Any привести к Int?

Лучший ответ: потому что у этих типов не совпадают протоколы:error: protocol type 'Any' cannot conform to 'BinaryInteger' because only concrete types can conform to protocols
print( Int(str) )
и да, кастить в строку и затем в инт.

Худший ответ: А если без кавычек?
let str: Any = 12
print( str as! Int )
Вопрос: Откуда берутся пустые табуляции при любом изменении файла?

Лучший ответ: На твоём скрине я вижу обратное. Не появляются, а наоборот исчезают. И не табуляции, а пробелы.
По умолчанию в редакторах JetBrains удаляются лишние пробелы (trailing spaces) только в изменённых строках. Проверь это у себя в настройках редактора вот тут Editor / General / On Save


Но, по хорошему, надо эти косяки в коде везде поправить.

Худший ответ: Так может они там действительно есть?

Шторм при сохранении изменений в файлах удаляет лишние табуляции и пробелы в конце строк.
Вопрос: Можно ли использовать сразу несколько «интернетов» на компьютере?

Лучший ответ: Можно, нужно будет только маршруты прописать. Уточните, что хотите получить в итоге?

Худший ответ: Про маршрутизацию уже сказали, можно прописать например вручную, список сайтов (к сожалению все ip адреса, что в условиях geo cdn уже сложно), на которые будешь подключаться через какой канал интернета.

Существуют технологии, позволяющие использовать несколько каналов (интернет подключения) чтобы организовать подключение к удаленному серверу на суммарной скорости (т.е. ширина канала складывается), называется это по разному, агрегация, бондинг и т.п. (кстати там существуют разные алгоритмы, как то ускорение пинга, увеличение ширины канала или увеличение надежности на выбор), на linux настраивается из коробки, первый же гугл ответ

Повторяю, скорость увеличится не до интернета, а от тебя до твоего сервера, если на нем скорость выше чем у тебя дома (ограничение провайдера) то ты можешь получить ускорение, используя его как vpn сервер. Так делают к примеру если у тебя несколько модемов и сим карт от разных провайдеров и тебе нужно сложить их скорости.

точно помню продавались железки с таким функционалом и услугой
p.s. https://habr.com/ru/company/vdsina/blog/479026/
Вопрос: Как обратится к предыдущему элементу css?

Лучший ответ: label:has(+ .field-error) {
  border: 2px solid red;
}
snippet
https://codepen.io/xdevelx/pen/wvXmqvz

Но нужно смотреть поддержку браузеров https://caniuse.com/css-has
Если не устроит, то js

Худший ответ: Нет, нельзя.
Вам остаётся только поправить или настроить скрипт валидации.
Вопрос: Как победить: «DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated»?

Лучший ответ: Не передавать параметр datetime, или передавать его значением по умолчанию
new DateTime(timezone: $gmt);
neq DateTime('now', $gmt);

Худший ответ: Документация намекает, что вместо null можно передать 'now'
https://www.php.net/manual/en/datetime.construct.php
Вопрос: Как создать испольняемый на винде jar или exe, имея javafx приложение?

Лучший ответ: Чтобы сделать java-приложение, готовое к запуску на другой машине без дополнительных церемоний, стоит использовать входящую в JDK утилиту jlink. Но это будет не бинарник, а сборка из JRE и вашего приложения со скриптами запуска под разные операционные системы. Сделать бинарник можно с помощью утилиты native-image из комплекта GraalVM, но это процесс не простой и требует понимания нюансов работы компилятора и виртуальной машины.

Худший ответ: Как создать испольняемый на винде jar или exe
Вопрос: Как сделать такой список select?

Лучший ответ: Это не select, а несколько div и скрытый select. Манипуляция с div отражается на select.

Худший ответ: select очень плохо стилизуется, надо делать свой кастомный select на js
Вопрос: Как заставить выполняться 2 часть кода?

Лучший ответ: Вместо onclick следует использовать addEventListener.

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

Худший ответ: const but = document.querySelector('.btn6');
const sqr6 = document.querySelector('.square6');

but.addEventListener('click', () => {
  if (sqr6.classList.toggle('hide')) {
    but.textContent = 'Показать';
  }
  else {
    but.textContent = 'Скрыть';
  }
});
Вопрос: Какой уровень знаний должен быть у Junior Python/Django разработчика?

Лучший ответ: https://qna.habr.com/q/946145
https://qna.habr.com/q/639442

Чем больше знаешь, тем больше программист. А учитывая уровень конкуренции среди начинающих, надо стремиться выделиться из тысяч других соискателей.

Худший ответ: Привет.
какие знания должны быть чтобы быть на уровне джуна. 
Все очень сильно зависит от компании. Если в поиске работы - просто смело ищите работу. Если уже работаете - возникающие  проблемы старайтесь решить самостоятельно (в рамках разумного времени конечно), если никак - обращайтесь за помощью к более опытным коллегам. Ничего такого, что требовало бы какого-либо переосмысления своего места в этом мире в вашем вопросе я не нахожу.
Пожалуйста.
Вопрос: Какой ИБП выбрать для слабого офисного ПК, чтобы работал без света?

Лучший ответ: У бесперебойников в общем-то две основные характеристики - максимальная мощность и емкость батареи. Мощность - ее прямо в названии в магазинах пишут. Ее должно хватать для типичного потребления компьютера. Для описанных в вопросе пк скорее всего и 300 Вт будет всегда хватать. Можно брать любой самый дешевый. А батарея - тут зависит от необходимого времени работы автономной. Почти любого ИБП хватит, чтобы нормально выключить компьютер. А если надо прямо проработать какое-то время, то гуглим "nix время автономной работы ИБП при нагрузке" и получаем список из протестированных ибп вместе с ценами.

Худший ответ: сомтри - ИБП должен быть СМАРТ, типа умный

давным давно такие были только у APC, например
https://www.apc.com/shop/ru/ru/products/APC-Smart-...

сейчас когда вайфай в каждом утюге, думаю, есть такие функции и в УПСах подешевле

а смарт - он при отключении и писке прикинет сколько ему жить осталось, и за 5 минут настраивается) (с норм аккумулятором конечно) выключит комп или погрузит его в сон

а второе условие просто - чем мощнее аккум, тем лучше, и дороже, тут уже по бюджету смотрите

чтобы два раза не вставать - вот
https://www.dns-shop.ru/product/6e1ad6dab1003332/i...

далше вверх вниз по цене можете оттолкнуться от этой модели в сторону похожих,
дешевле 200, ну 150 долларов не рекомендую, от APC, возможно у конурентов норм есть и дешевле
у этого я менял только батарею лет через 5, в кладовке лежит первый APC (рабочий, но увы, мощность к новым компам слаба и интерфейс еще com )
Вопрос: Возможно ли через групповые политики добавить wifi сеть на windows 10?

Лучший ответ: Да можно, более того можно установить запрет подключать другие и т.д.

Конфигурация компьютера - Политики - Конфигурация Windows - Параметры безопасности - Политики беспроводной сети

Худший ответ: Нашёл решение. 
1. Подключаемся к нужной вайфай сети.
2. Запускаем cmd пишем
netsh wlan export profile wifi_profile folder=c:\
Создаётся xml с настройками сети.
3. Открываем это xml блокнотом
меняем 
<protected>false</protected>
<keyMaterial>ПАРОЛЬ ОТ WIFI</keyMaterial>
4. далее командой 
netsh wlan add profile filename="***.xml"
мы можем добавить вай фай сеть на комп
5. создаём bat файл и добавляем его в автозагрузку в GPO
Вопрос: Нужно ли в форме с именем и телефоном указывать вопрос на соглашение и обработку их данных?

Лучший ответ: Безусловно.

Где по факту с ними никто ничего не собирается делать, кроме, как использовать как информацию, куда привезти заказ и по какому номеру набрать, чтобы уведомить?
Это называется "передача третьим лицам и обработка" личных данных.

Худший ответ: Вы должны определиться, собираете ли именно персональные данные или нет. Свою позицию оформить в правилах использования вашего ресурса. Если собираете и обрабатываете, то нужна и политика, и согласие. 
Как правило любые магазины собирают и обрабатывают. У вас же есть форма обратной связи для ведения претензионный работы, куда человек может вписать ФИО, паспорт, адрес, телефон что-то ещё, а вы потом на основе этой информации можете осуществлять перерасчёт.
Ответственность описана в КоАП, вот и смотрите свои риски.
Вопрос: Кто удалил файл?

Лучший ответ: Есть ли подобные софты для отслеживания удаленных файлов? (кем, когда, какой). ПосоветуйтеА что можно сказать не зная ОС?
В windows можно настроить аудит файлов.

Опять же цели непонятно - вам выследить злоумышленника, или вернуть нужный файл на место?
Чаще всего перемещают - нашли и на место.
Иногда удаляют - для таких целей удобнее теневые копии использовать.

Худший ответ: есть софтины и системы для бекапа данных.
все остальное от лукавого.
Вопрос: Styled components или БЭМ?

Лучший ответ: У нас CSS Modules
https://create-react-app.dev/docs/adding-a-css-mod...

Худший ответ: С styled-components будет проще, если у тебя проект не совсем мелкий и дизайн навороченный. Если у тебя что-то простенькое, или где весь дизайн можно быстренько описать в стилях и их больше не трогать, то хоть обычные .css, хоть .scss. Если дизайн не навороченный или нет необходимости во множестве стилизованных состояниях компонентов, то можно и css-modules, иначе придется сильно вручную упарываться с комбинированием классов.
Вопрос: Как сделать личный кабинет пользователя на сайте?

Лучший ответ: 
Выбираешь язык программирования;
Изучаешь его;
Пишешь личный кабинет. 


Худший ответ: посмотрите в сторону simplacms  есть обнуленная,  очень понятная.
Вопрос: Можно ли текстовую переменную хранить в таблице Mysql?

Лучший ответ: Пожалуйста, не нужно меня посылать читать мануалы PHP похоже, что нужно, но ок, не буду.
Вам знакома конструкция var_dump? Попробуйте сделать var_dump($date);
может, появятся идеи.
spoilerЕсли нет, все-таки почитайте мануал, там есть примеры

Худший ответ: А я все-таки пошлю читать документацию: fetch_array
Прочитайте внимательно описание и примеры, там все прекрасно описано, даже на русском.
Вопрос: Очищать корзину после оплаты или нет?

Лучший ответ: Ни разу не видел ни одного интернет-магазина, где она бы не очищалась после оформления заказа.

Худший ответ: Если хочется хранить корзину в БД - так вам ее все равно хранить после оформления заказа. 
Сделайте таблицу, где большинство полей - NULL до момента оформления заказа (цены и проч. для отображения берется с текущих карточек). Выборка текущей корзины - по order_id = NULL. Заказ оформлен - текущая корзина опустела, товары естественным порядком перекочевали в заказ.
Вопрос: Стоит ли писать статью о разработке собственного программного решения в области pro audio?

Лучший ответ: Какие проблемы, пиши в черновик, по окончанию проекта или доведению до какого-то промежуточного результата запустишь серию публикация 'как я провел лето', гадать стоит ли писать или не стоит - глупо, если хочется пиши!

Если цель проекта не просто собрать лайки, а получить фидбек - то однозначно писать стоит. И если получишь отрицательный отклик - это будет тоже полезный результат, стоит рассматривать это именно в таком ключе.

Худший ответ: Пишите. Упор можно делать не на самом разрабатываемом ПО, а на проблемах в этой области, примененных вами подходах и алгоритмах для их решения, как и почему, возможно с примерами из реального кода. Будет интересно почитать.
Вопрос: Как доработать код?

Лучший ответ: Ничего страшного, допишите еще один case и метод, и все будет нормально. Да, это нарушает принцип, но все так делают, просто хрен кто признается. Не пытайтесь здесь вкрячить какого-нибудь монстра, сложный код - это потенциальные ошибки, если возможно написать просто, так и нужно сделать.
Принципы - они принципы, а не законы, надо следовать не букве, а смыслу. Принцип открытости и закрытости оберегает нас от ошибок и дополнительных затрат на тестирование кода, который вроде бы и так уже работает и хорошо себя зарекомендовал. Т.е. если бы у вас был один метод и вы там внутри как-то хитро разруливали работу с разными типами и при добавлении нового типа изменяли бы его - это было бы ужасно. В текущей реализации, вам нужно будет добавить новый метод (это не изменит поведение класса до вмешательства), и добавить новый путь при использовании нового типа - да, вмешательство, но оно минимально. Если умудритесь накосячить здесь, то вас уже никакие принципы не спасут.
Если же у нас, что-то гораздо более сложное, либо класс физически недоступен для изменений, или он уже вовсю используется, а новый тип нужен только для конкретной реализации, то, пожалуйста, есть наследование. Наследуете класс, в потомке добавляете метод и заменяете метод, выполняющий перенаправление (не забывайте, что есть вызов parent). Это будет полностью соответствовать принципу.
Но я бы больше уделил внимание тому, почему мы ориентируемся для выбора метода на внутреннее свойство, точно ли это должны быть методы, а не отдельные классы. И вполне может быть получится так, что все эти танцы с бубнами не нужны.

Худший ответ: Почитав ответы, решил немного переделать структуру сервиса (пишу на Yii2) и сделать через DI контейнер. Структура такая - EditServiceInterface, который будет имплементирован в классы, (FastEdit и HideSubject), в которых будут реализованы соответсвующие методы; в конфиге:
'container' => [
    'singletons' => [
        'fast-edit' => function () {
            return new \frontend\services\editing\FastEdit();
        },
        'hide' => function () {
            return new \frontend\services\editing\HideSubject();
        }
    ],
],

И в нужном месте вызываю Yii::$container->get($type)
Думаю такой вариант будет оптимален и без лишнего усложнения.
Вопрос: VS Code, Python и куча ошибок. Просто Tk() или tk.Tk()?

Лучший ответ: Во-первых, это не ошибки, а предупреждения линтера. Во-вторых, учить лучше без IDE.

Худший ответ: 1. Да, это не ошибки,а обычные предупреждения о том, что где-то код написан не соответствует PEP8. Я бы в принципе отключил все варнинги PEP8, они никак не повлияют на подсветку синтаксических и прочих ошибок. 
2. Лучше всё же не импортировать содержимое модуля через *, дабы избежать путаницы. 
import tkinter as tk - нормальный вариант
3.  Появляется, когда я переключаюсь на другое окно vs code и обратно  а до переключения окно tkinter нормально появляется? Рядом случайно нет еще одного файла tkinter.py? Хотя по варнингам с вайлдкарда похоже, что нет. Приложите полный код и полную ошибку, которую получаете
Вопрос: Как добавлять сложные HTML блоки?

Лучший ответ: let comment = `
<div class="comment">
    <div class="comment-avatar"></div>
    <div class="comment-description"></div>
</div>
`;

document.body.append(comment);

Можно так добавлять, но этот способ не безопасный

Худший ответ: Если у вас однотипный блок, создайте класс, и юзайте его со всеми необходимыми методами и полями
Вопрос: Как задать название таблице переменной в postgresql python?

Лучший ответ: Привести схему данных в нормальную форму. (это термин)
Затем удивительным образом пропадёт вся проблема как таковая.

Худший ответ: Каждый чат в отдельной таблице - это полный ужас-ужас-ужас. Не надо так делать. НИКОГДА!

Поэтому для начала читайте как устроены реляционные базы данных и переделывайте структуру вашей БД.
Вопрос: Подойдет ли Django для разработки интернет магазина?

Лучший ответ: Подойдет

Худший ответ: написать то можно - вопрос зачем? судя по картинке все довольно  стандартное - почему не подходит готовое решение на битриксе?  трудоемкость (стоимость) разработки на джанге будет на порядок выше чем разработка на биртиксе.
Вопрос: Через какую службу доставки лучше заказывать HDD-накопитель?

Лучший ответ: С этой точки зрения нигде, пакуют их обычно хорошо, но в процессе доставки никто не следит на каждом этапе, так что берите в любом магазине у дома

Худший ответ: я вот купил ADATA на 512 гб и обещал производитель 500 мб. а оказалось тормозит после 2-5 минут (скорее всего нагрелся и не остыл.)
понимаю тебя!
но всё-таки глупый твой вопрос?... 
если уверен что можешь поставить сам диск правильно, покупай там где продают у тебя. можешь конечно заказать диск и поговорить с человеком менеджером с просьбой упаковать диск надёжно ( сказав типа: диск в упаковке, в коробку с шариками пенопласта, который будет плотностью удерживать диск) ну надеюсь понял?!... удачи
Вопрос: Кто-то уже тестил apple m1 с двумя доп. мониторами?

Лучший ответ: Подобный вопрос уже был в этом году. Больше одного внешнего монитора поддерживают только прошки.

жмем сюда и читаем 


Худший ответ: Это же мак... если заявленно что 2 моника работают, значит все ок)
Вопрос: Что писать в модели sequelize?

Лучший ответ: В модели
type: DataTypes.ENUM("foo",'bar")
в миграции
type: Sequelize.ENUM("foo",'bar")

Худший ответ: Не знаю поможет ли мой ответ, но enum принимает несколько допустимые значения из которых выбирается либо первое, либо второе значение и так далее. Значений может быть больше чем два. К примеру ENUM('value 1', 'value 2').  

В моделе попробуй написать: 

side: {
  type: Sequelize.ENUM('buy', 'shell'),
  default: 'buy' // можно указать значение по default'у
} 

и еще пример:
status: {
   type: Sequelize.ENUM("pending", "cancelled", "paid"),
   defaultValue: "pending"
  },
Вопрос: Существует такое понятие, как &quot;Ассоциативный список&quot;?

Лучший ответ: Ну оно так и называется: ассоциативный массив, словарь, объект или даже карта.

Худший ответ: Я бы это назвал списком режимов. Ассоциативный список - это что-то самопротиворечивое. У вас же просто список пар значений.
Вопрос: Как исправить отображение кириллицы?

Лучший ответ: В правой части статус бара есть VS Code есть показатель кодировки. Нажмите и смотрите выше - там появится предложение открыть файл заново в нужной кодировке. Когда файл будет выглядеть приемлемо, ещё разок на кодировке, но уже надо будет выбрать "сохранить в кодировке', где желательно указать utf-8.
После этих манипуляций файл будет сохранен в utf-8, и проблема будет решена.

Худший ответ: Если создать новый файл в нём кириллица отображается? Если да, значит вы загружаете файл не в той кодировке. Если нет, то проверьте, что выбранный шрифт поддерживает кириллицу.
Вопрос: От чего зависит скорость передачи данных в интерфейсах?

Лучший ответ: зависит от ориентированности интерфейса.
рекомендуемые скорости обычно описаны в стандарте на данный вид интерфейса.

проводной эзернет ориентирован для передачи больших объемов информации в пределах  дома, поэтому работает на большой скорости, но расстояние до 100 метров. плюс требует качественный дорогой кабель (4 пары cat 5e для гигабита).
пластиковая оптика к примеру уже вытянет расстояние в квартал, а хорошая стеклянная и десятки-сотни км, но цена будет выше чем у меди.

RS485 ориентирован на обслуживание АСУТП, где объемы информации маленькие,  но расстояния большие.
поэтому работает обычно на 9600, зато может пробить на десяток километров в поле по П274. плюс на один кабель можно повесить несколько сотен устройств.
и стоит дешево.

RS232, да и усб вообще создавался из предпослыок чтоб будет работать не дальше чем в одной комнате
емнип, в усб даже таймауты ответов при 20 метрах не дают связаться в принципе.

можно вспомнить еще DVI, HDMI, DisplayPort и иже с ними. они тоже из семейства диф.сигналов. но ориентированы на передачу жутких объемов несжатого видео сигнала, но опять же на расстояние в несколько метров.

и т.д. и т.п.

Худший ответ: От типа линии связи (дуплекс, полудуплекс, число параллельных каналов), мощности передатчика (выходные ток и напряжение), потерь в линии связи (сопротивление, ёмкость), наводимых на линию помех и чувствительности приёмника.
Вопрос: Поясните правильность трехуровнего домена в корп.сети?

Лучший ответ: Я знаю что local это не правильно.Не надо повторять за кем-то догмы. Почему .local это не правильно? У 0.1% компаний сетевая инфраструктура организована так, что с .local они наступят на грабли. У остальных 99.9% никаких проблем нет и не будет. И это не "рулетка", адекватный админ точно знает, что в его сети нет Zeroconf. Совет от Microsoft не использовать .local - это совет "специалистам", которые понятия не имеют, что творится у них в сети. На всякий случай, чтобы имеющийся бардак не стал ещё худшим бардаком.

Если организация настолько большая, что требуется выделение отдельных, администрируемых независимо другими людьми зон (филиалов, отделов) - то да, лучше сразу задуматься о доменах третьего уровня. Если организация настолько большая, то рядом с вами будут несколько опытных коллег, которые не абстрактно, а на реальной конфигурации объяснят, почему были приняты те или иные решения (домен 3-го уровня или 2-го уровня и многое другое). Microsoft даёт некоторые рекомендации, но они (рекомендации) не заменят мозги админа. Это даже не best practices, это точка, с которой можно начать, когда нет опыта. Но эти рекомендации не помешают наступить на грабли (другие), вот пример из недавних вопросов здесь же: https://qna.habr.com/q/1046186
Есть домен (AD), основной DNS суффикс домена - company.ru...
...
Недавно в зоне RU регистрируется доменное имя - company.ru. Зарегистрировано не нами...Занавес.
В случае .local такой проблемы не было бы. Делаем вывод: бездумное следование рекомендациям не спасает от проблем. Даже если бы они сделали домен 3-го уровня corp.company.ru, это бы их не спасло.

Худший ответ: Там будут какие то проблемы с DNS-ми, я хочу понять о чем речь
курите вопрос про Split (Split-Brain) DNS...
Вопрос: Где хранить большой массив объектов в реакт приложении?

Лучший ответ: Мой взгляд, на истину не претендую:

Я сторонник того, что на клиенте вообще не стоит хранить большие объемы данных. Т.е. запрашивает только те, которые нам нужны для работы/отображения в конкретный момент. Все фильтры/сортировка/пагинация на стороне сервера. Понятно, что это не всегда возможно, поэтому идем дальше...

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

Если уж отходить от редакса - можно воспользоваться каким-то стором на основе мутабельных объектов, например mobx.

Если всё это держать в памяти не хочется - то действительно можно взять IndexedDB. Хранится на диске, между перезагрузками сохраняется, асинхронное апи, есть индексы по полям. Нужно учесть, что на браузерах в режиме инкогнито может не работать или работать ограниченно (для предотвращения отслеживания).

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

Худший ответ: localStorage или IndexedDB.
https://developer.mozilla.org/ru/docs/Learn/JavaSc...