Задать вопрос
  • Как организовать хранение электронных документов для веб-приложения?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Не хочется использовать целый сервер просто в качестве файлового хранилища.

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Лучше для чего именно? Какую проблему или проблемы вы этим решить хотите? Для начала определитесь, что именно вас не устраивает в вашем текущем решении - конкретные проблемы, характеристики, фичи и прочее. Скорость и качество доступа к хранилищу, объем, безопасность, надёжность и прочее. Сделайте список/документ. На основе вот этого списка и вашего опыта эксплуатации вашего решения сформулируйте требования к вашему хранилищу. И вот уже на основе этих требований подбирайте конкретное решение, которое их закроет по максимуму или, хотя бы, большей частью. Роутер и внешний диск вам тут точно не подойдут - низкая производительность и надёжность. Типовое универсальное решение - S3 хранилище в масштабируемом облаке. Альтернатива для своего сервера в своей серверной - FreeNAS.
    Ответ написан
    Комментировать
  • Как избежать зависание textarea при обработке большого массива?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    <input type="text" id="textarea">

    // Код воркера в виде строки
    const workerCode = `
      self.onmessage = (event) => {
        const largeArray = event.data;
        
        // Выполнение тяжелой обработки массива
        for (let i = 0; i < largeArray.length; i++) {
          // Например: largeArray[i] = someProcessing(largeArray[i]);
          largeArray[i] *= 2; // Пример обработки: удваиваем каждый элемент
        }
    
        // Отправка обработанных данных обратно в главный поток
        self.postMessage(largeArray);
      };
    `;
    
    // Создание Blob из строки с кодом воркера
    const blob = new Blob([workerCode], { type: 'application/javascript' });
    // Создание объекта Worker из URL на Blob
    const worker = new Worker(URL.createObjectURL(blob));
    
    // Обработка сообщений от воркера
    worker.onmessage = (event) => {
      const processedArray = event.data;
      console.log('Обработанный массив:', processedArray);
      // Можно обновить интерфейс или использовать данные
    };
    
    // Пример массива для обработки
    const largeArray = new Array(1e6).fill(15);
    
    function debounce(func, delay) {
      let timeout;
      return function(...args) {
          clearTimeout(timeout);
          timeout = setTimeout(() => func.apply(this, args), delay);
      };
    }
    
    const handleInput = debounce(() => {
      worker.postMessage(largeArray);
    }, 300); // Вызываем через 300 мс после окончания ввода
    
    // Пример добавления обработчика для textarea
    textarea.addEventListener('input', (event) => {
      console.log(event.target.value);
      handleInput();
    });
    Ответ написан
    1 комментарий
  • Как избежать зависание textarea при обработке большого массива?

    @iljaGolubev
    Debounce

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

    пример для илюстрации
    const debounce = (callback, wait) => {
      let timeoutId = null;
      return (...args) => {
        window.clearTimeout(timeoutId); // повторый вызов отменит предыдущий
        timeoutId = window.setTimeout(() => {
          callback(...args);
        }, wait); // и запустит новый
      };
    }
    
    const runDebouncedBigArrayOnInputEnds = debounce(
        (event) => {
          // запускает обработку большого массива в цикле
        }, 
       250 // сколько ждать завершения ввода
    );
    
    document.getElementById('#myTxtField').addEventListener('input', runDebouncedBigArrayOnInputEnds );
    Ответ написан
    2 комментария