Задать вопрос
  • Как отправить запрос на сервер при закрытии вкладки?

    IvanSCM
    @IvanSCM
    Заведите константу а-ля какое время считать пользователя активным, например минута.
    При каждом запросе записывайте время этого запроса (действия пользователя).
    Далее простая функция пусть вычисляет онлайн пользователь или нет(прошла минута с последнего запроса этого пользователя или нет).

    Данное решение используется во многих движках сайтов и форумов.
    Ответ написан
    1 комментарий
  • Как отправить запрос на сервер при закрытии вкладки?

    @fuliozor
    Web and Android developer
    Можно попробовать воспользоваться вот этим апи https://developer.mozilla.org/ru/docs/Web/API/Navi... для того чтоб слать запрос при закрытии вкладки но это же при будет срабатывать и при перезагрузке страницы.
    Но по опыту могу сказать что у вас немного неправильный подход. Ваше решение если и будет работать то только в "идеальных" случаях, но очень часто будет работать не так как вы ожидаете, например пропал интернет, выключился компьютер, в телефоне села батарейка, пользователь закрыл браузер выбросив его из недавних и т.д. в этих всех случаях пользователь у вас зависнет в статусе онлайн. Чтоб справится с этими проблемами шлите, например, каждые 10 секунд (интервал подберите экспериментальным путем или исходя из того какую нагрузку может держать ваш хостинг) запрос на ваш бек, таким образом будете подтверждать что пользователь онлайн, если в течении 25 секунд (желательно чтоб время было >2х чем интервал, чтоб исключить ситуации когда один из запросов не доехал из за кратковременных проблем в сети) не было запросов от клиента значит он офлайн.
    Ответ написан
    3 комментария
  • Как во vue 3 массово передать пропсы в дочерний компонент?

    modelair
    @modelair
    unsocial
    для этого есть реактивность.
    <template>
      <child-component v-bind="globalObject"/>
    </template>
    
    <script setup>
    // import { Alien, DevTools, Test, ChildComponent } from 'where?'
    import { reactive } from 'vue'
    
    const globalObject = reactive({prop1, prop2, prop3})
    </script>

    а вообще читайте документацию. https://vuejs.org/guide/components/props.html - для новичков там исчерпывающе
    Ответ написан
    Комментировать
  • Как оптимизировать процесс загрузки большего объема данных?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вот:
    https://github.com/localForage/localForage
    Можно хранить в браузере файлы и данные любого объема.
    Ответ написан
    1 комментарий
  • Как оптимизировать процесс загрузки большего объема данных?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    Потом работаю с ними в реакте, выводя графики продаж, отгрузок и прочее.
    Так, а это вот все в одну кучу нужно, или для каждого графика нужно свой набор данных? Не проще каждый график строить по отдельному запросу? Таким образом во первых вы разделите потоки, уменьшите данные на один запрос, и практически аннигилируете нагрузку на фронт.
    Ответ написан
    1 комментарий
  • Как оптимизировать процесс загрузки большего объема данных?

    dima9595
    @dima9595
    Junior PHP
    Для начала необходимо понять по какой причине ответ от сервера около 3 секунд.
    Тут может быть проблема в настройках, слабом сервере или ещё чего из большого списка возможностей.

    Далее нужно понять почему данные вы получаете 7-8 секунд.
    Тут может быть как первая причина, так и просто неоптимизированный, кривой код. Опять же, разбираемся!

    В любом случае нужно всю логику пихать в сервер, а клиенту отдавать уже готовые данные для отображения. Клиент не должен страдать из-за больших данных, тем более владельцы мобильных телефонов. Для них это будет ужс и они уйдут из вашего продукта.
    PS: Я бы и сам не стал ждать такой долгой загрузки.

    UPD:
    Банальный пример из практики. У нас в проекте был очень старый код, который написан был лет 5 назад. Новички думали что просто сервер слабый. Но покопавшись в коде стало ясно, что код крайне неоптимизированный и мы его оптимизировали.
    Раньше загружалось более 60 секунд (как правило уходил в таймаут. т.е. вообще не загружались при малом количестве фильтров по данным)
    Стало: около 10-20 секунд.
    И это те же данные...
    Ответ написан
    2 комментария
  • Как оптимизировать процесс загрузки большего объема данных?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Провести диагностику и анализ того, какие именно данные запрашиваются, откуда, каким образом и как они попадают туда, где они нужны. Т.е., исследовать путь данных и механизм их получения. Далее изучить на каком этапе происходит задержка или задержки и уже от этого момента проектировать решение. В общем случае можно сделать следующее:
    • оптимизировать запрос для получения данных
    • оптимизировать формат передачи данных
    • добавить сжатие данных
    • сделать кэширование, возможно даже в несколько уровней
    • обновить железо сервера на более мощное
    • оптимизировать или сменить БД на более подходящую для задачи
    • часть или все вычисления производить на сервере и выдавать готовый результат в нужном виде
    Ответ написан
    Комментировать
  • Можно ли сократить код проверки загруженности данных в React?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Ну, как минимум для начала вам нужно вызов функций загрузки поместить в useEffect. Если я правильно понял логику, то нужно сделать следующим образом:

    - добавить ещё один стейт, который будет отвечать за состояние загрузки, например loading/setLoading

    - затем в useEffect при маунте проверять их на наличие объектов: если пустые и loading !== true, то грузить, иначе ничего не делаем

    - вызываем одну функцию, где будем грузить данные: сначала переводим loading в true берем Promise.all/allSettled и ждем загрузки; в finally возвращаем loading на false

    - как только все загрузится, то второй useMemo самостоятельно выполнится, так как оба* стейта обновятся

    * оба, т.к. не понял, зачем тут timestamp.
    Ответ написан
    Комментировать
  • Как избавиться от бага - всплывающая подсказка не убирается по первому клику?

    0xD34F
    @0xD34F Куратор тега React
    Возникает проблема, что нужно нажать 2 раза на подсказку, чтобы она исчезла.

    Не она, а они. Выбираете подсказку - значение меняется. Поменялось значение - запускается эффект, в котором заново вычисляется массив подсказок, и они отображаются.

    Может, вместо эффекта вам стоит вычислять массив подсказок в обработчике onChange:

    const onChange = ({ target: { value } }) => {
      setVal(value);
      setPrintVariables(value.length > 1
        ? arrayVariables.filter(n => n.includes(value))
        : []
      );
    };

    <input value={val} onChange={onChange} />

    ??
    Ответ написан
    1 комментарий
  • Как на PHP разделить склеенные буквы разного регистра?

    мне такой вариант кажется проще:
    $body = str_replace('><', '> <', $body);
    $mailBody = strip_tags($body);
    Ответ написан
    Комментировать
  • Как на PHP разделить склеенные буквы разного регистра?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Нужно не "разделять буквы разного регистра", а нормально обрабатывать разметку.
    Если в разметке были символы переноса строки в виде html-сущностей (<br>), то нужно выполнить их преобразование до вызова функции strip_tags:
    preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
    Ответ написан
    1 комментарий
  • Как на PHP разделить склеенные буквы разного регистра?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    preg_replace('/([а-яё])([А-ЯЁ])/u', '$1. $2', $str)

    или

    implode('. ', preg_split('/(?<=[а-яё])(?=[А-ЯЁ])/u', $str))
    Ответ написан
    Комментировать
  • Почему запрос к mysql внутри цикла while выполняется очень долго?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Время получения 40000+ записей из таблицы offers = 0.2s

    Вот такой код отрабатывается за 4s

    то есть в цикле делается 40тыс запросов к таблице clients каждый из который выполняется за 0.0001 sec

    вам точно надо прочитать про JOIN'ы чтобы одним запросом получить все нужные данные
    https://www.w3schools.com/sql/sql_join.asp
    Ответ написан
  • Как найти исполняемый js код конкретного блока?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Что значит "конкретной обёртки?
    Обработчик какого-то элемента?
    Открывайте инструменты разработчика, тыкайте селектором в элемент.
    И на той панели где отображаются стили элемента есть вкладка "Event Listeners" ну или том языке, какой у Вас выбран. Там можно посмотреть все обработчики данного элемента.

    Если что-то другое, то можно открыть вкладку Sources, сбоку в "проводнике" найти js файлы и искать код там.
    Ответ написан
    Комментировать
  • Как остановить проверку?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ваш код очень бажный. Во-первых, вы не проверяете результат выполнения indexOf и проверка работает ровно наоборот. Во-вторых, значение поискового поля вы добавляете не в виде get-параметра, а прямо в тело адреса, что снова делает предыдущую проверку нерабочей. Ну и наконец, даже если всё это исправить, у вас всё равно будет баг - любой get-параметр, название которого заканчивается на "q", будет попадать под условие и подстановка не произойдёт.

    Максимально тупое решение в лоб с перезагрузкой страницы:
    if (
        window.location.search.indexOf('?q=') === -1 &&
        window.location.search.indexOf('&q=') === -1
    ) {
        window.location.search += (window.location.search ? '&' : '?' ) + 'q=' + searchInput.value;
    }


    В современном же js есть куда более удобные инструменты для решения этой задачи:
    https://developer.mozilla.org/en-US/docs/Web/API/U...
    https://developer.mozilla.org/ru/docs/Web/API/Hist...
    Ответ написан
    Комментировать