@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Импорт и экспорт настроек в пользовательском (веб) интерфейсе
-
Не нашёл топика/ответ в документации, как сделать 2 аналогичные кнопки на загрузку и сохранение настроек в веб-интерфейсе?
В курсе про функции SetResourceValue и GetResourceValue, но не могу разобраться. -
ап
-
ап
-
@mp4treiser said in Импорт и экспорт настроек в пользовательском (веб) интерфейсе:
Не нашёл топика/ответ в документации, как сделать 2 аналогичные кнопки на загрузку и сохранение настроек в веб-интерфейсе?
В курсе про функции SetResourceValue и GetResourceValue, но не могу разобраться.В веб интерфейсе вы сами вольны создавать любые элементы настроек (инпуты, чекбоксы, textarea, выпадающие списки и т.д.), для сохранения и загрузки ваших собственных полей нет готовых функций, всю логику придётся сделать самостоятельно.
Если вы используете сгенерированный веб интерфейс и ни каких дополнительных полей не создаёте, то для получения данных из полей вы можете использовать функцию "GetResourceValue", но логику сохранения данных в файл (в любом удобном виде) нужно будет также реализовать самостоятельно. Для загрузки данных нужно будет также написать код для чтения файла, а для передачи данных в инпуты ресурсов можно использовать функцию "SetResourceValue"
Сохранять данные не сложно, нужно циклом обойти все инпуты (например по id), сформировать данные в любом удобном виде (я предпочитаю json) и сохранить через файловое api или методы браузера.
Что бы стало понятнее опишу на примере. Вот скрипт с тремя ресурсами "Строка", "Список" и "Из файла"

Сгенерированный интерфейс выглядит вот так:

Добавим произвольные инпуты к каждому полю. Для удобства определения кастомные инпуты созданы с уникальным id. Также добавим кнопки "Сохранить" и "Загрузить"

Красоты нам ни к чему, по этому с интерфейсом всё. Теперь нужно написать код для сбора введённых данных. Для удобства создадим массив с именами ресурсов и созданных инпутов и соберём с них данные через цикл.
var res = ["res1", "res2", "res3"]; var custom_input = ["custom-input1", "custom-input2", "custom-input3"]; var settings = []; res.forEach(name => { var value = GetValue(name); if (value != "") { settings.push({ _type: "res", name: name, value: value }); }; }); custom_input.forEach(id => { var element = document.getElementById(id); if (element) { settings.push({ _type: "custom", name: id, value: element.value }) } });Для сохранения файла можно использовать файловое апи веб интерфейса, но мне больше нравится стандартный браузерный метод сохранения файла
var res = JSON.stringify(settings); var blob = new Blob([res], { type: "text/plain;charset=utf-8" }); await saveAs(blob, "settings.txt");и вешаем обработчик на кнопку "Save"
$("#save_settings").on("click", async function () { //весь код выше })Всё, теперь при клике в интерфейсе на кнопку "Save" будет появляться окно сохранения файла
Для загрузки нужно прочитать файл, убедится, что данные в json, и циклом установить значения из файла в инпуты. Полный код:
$("#load_settings").on("click", function (event) { var input = document.createElement('input'); input.type = 'file'; input.onchange = (event) => { var file = event.target.files[0]; var reader = new FileReader(); reader.onload = (event) => { try { var settings = JSON.parse(event.target.result); settings.forEach(obj => { if (obj._type == "res") { SetValue(obj.name, obj.value) } else { var element = document.getElementById(obj.name); if (element) { element.value = obj.value; } } }); console.log("Восстановили данные интерфейса из файла") } catch (err) { console.log("Ошибка восстановления данных из файла: " + err); } }; reader.readAsText(file); }; input.click(); });
Скрипт: 2901.xml
Экспортированный интерфейс: qw.main.interface.09_01_2024_10_33.txt