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

    @rPman
    чтобы передавать сообщения в обе стороны, есть следующие технологии:
    * websocket - client <-> server
    * webrtc - client <-> client напрямую
    Ответ написан
    Комментировать
  • Возможно ли узнать время, за которое запрос приходит на сервер?

    @rPman
    Логирование и синхронизация точного времени на сервере и клиенте.

    Точный момент (миллисекунды), когда запрос 'пришел' на сервер зависит от точки, в которой происходит замер, например если замерять средствами nginx (запущенный на сервере) и к примеру момент, когда запустится cgi скрипт (первой строчкой которого поставить запись времени в лог) - будут отличаться на десяток миллисекунд.

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

    @rPman
    Правая кнопка - инспектор/исследовать, смотри

    в играх с высокой вероятностью это будет canvas, а это значит текст выводится без использования dom и чтобы его получить придется заниматься распознаванием
    Ответ написан
    4 комментария
  • Как в txt файле оставить только 2 строчки после определенного слова выше?

    @rPman
    * завести int status переменную, определяющую статус, что сейчас делаем, поиск подстроки (если значение 0) или вывод (если значение 1 или2, т.е. это количество выводимых строк))
    * читать файл построчно в цикле, пока он не закончится
    * для каждой строчки проверять искомую подстроку, если найдена - status =2 и continue
    * если status >0 то выводим строку
    * если status =2, выводим ': ' если status=1 то выводим '\n'
    * если status >0 уменшаем на 1
    Ответ написан
    Комментировать
  • Могут ли ошибки в консоли Хрома забить оперативную или постоянную память, если да, то как это предотвратить?

    @rPman
    само по себе сообщение об ошибке занимает мало времени и чтобы это стало заметно нужно действительно много
    но вот отладочная информация, когда в console.log выводится объемный объект и очень много - занимает прилично оперативной памяти (так как весь объект копируется и хранится в памяти чтобы в интерфейсе его можно было посмотреть) у меня был пример когда окно firefox работало больше суток и отладочная информация нагрузило так сильно оперативную память что был задействован своп файл и сам браузер дико тормозил, но очистка консоли тут же все исправило

    вызывай скриптом consloe.clear() типа такsetInterval(()=>console.clear(),3600*1000)для автоматической очистки консоли раз в час, этого будет более чем достаточно
    Ответ написан
    Комментировать
  • Ограничение работы 2 пользователей на одном сайте?

    @rPman
    направления решения задачи многопользовательского редактирования:

    - нулевое, самое злобное для клиентов, выдавать ошибку, при попытке сохранить документ, если его редактировали, обновлять форму и предлагать ввести все заново, реализуется полем 'last modified time', которое загружается на форму и отправляется с запросом на обновление, если сервер видит их разными - писать ошибку.

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

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

    - третье, наилучшее в современных реалиях, применять изменения и выводить их в тот же момент как они вносятся на форму, как документы google docs, видно в какой ячейке какой пользователь сейчас поставил курсор, можно даже подсвечивать цветами, с затуханием. Рекомендуется, как ни странно достаточно проста в реализации, если интерфейс client side javascript а не генерация html на сервере.

    Все три способа требуют оперативную информацию о наличии блокировок пользователями, что реализуется с помощью вебсокет
    Ответ написан
    Комментировать
  • Как можно ускорить парсинг json?

    @rPman
    897kb
    надо почти мегабайт скачать! я не верю что у тебя с твоим интернетом за 80миллисекунд это происходит, скорее все из кеша берется

    на парсинг json как раз уходит несколько десятков миллисекунд, и это нереально быстро для мегабайтового файла

    p.s. на c++ есть парсер simdjson, он в десять раз быстрее парсит, но делает он это не в память, а по лексемам, прямо в процессе анализа результата, там что то типа, получить следующую лексему, смотрим ее тип, имя и либо пропускаем (включая объхекты) либо рекурсивно работаем с объектом

    браузер так не умеет, в теории можно попробовать написать такой парсер на javascript но я не верю что это будет быстрее

    upd: https://www.npmjs.com/package/simdjson
    Ответ написан
    2 комментария
  • Как реализовать проверку и подгрузку файлов между серверами?

    @rPman
    Не советую изобретать свою систему, пользуйся готовым rsync, который может работать как по своему протоколу (рекомендуется, для этого на обоих сторонах запускается rsyncd) так и к примеру по ssh, так же штатно scp умеет копировать только изменившеися файлы по ssh, ничего дополнительно настраивать и устанавливать не надо.

    по теме, я пилил простенькую програмку, на сервере-источнике маленький php сервер, возвращающий список новых файлов (у меня было много серверов источников файлов, и один клиент, он запрашивал список с каждого, проверял наличие их локально и скачивал отсутствующие), а каталог с файлами расшарен как обычный каталог со статикой в веб сервере, файлы загружались с помощью wget (у него штатная поддержка докачки прерванных, но можно что-нибудь еще поискать)
    Ответ написан
    Комментировать
  • JS: Бесконечная загрузка контента без лагов страницы - какие есть библиотеки?

    @rPman
    это называется virtual scrolling
    погугли готовые решения есть, чаще заморочки с поддержкой одновременно pc/mobile

    по функционалу это очень простая библиотка, чтобы не лагало, нужно запрашивать данных больше чем выводится, т.е. окно данных в памяти должно быть больше раза в 3-5 чем то что выводится на экран, и при скроллинге запрашивать доп данные для этого виртуального окна в памяти.

    Совет, если человек скролит с меньшим интервалом времени или сразу следующую страницу, запрашивай у бакэнда большего размера окно чем обычно, так как это типичный паттерн проскролировать 'подальше'
    Ответ написан
    Комментировать
  • Как проверить ссылку RSS?

    @rPman
    если ссылку спрашивать у пользователя, то он сам дурак, если даст неверный тип контента

    с высокой вероятностью в ссылке будет слово rss (либо type=rss, так многие cms-ки экспортируют свои статьи туда либо .rss) но само собой никто ничего не гарантирует, никаких стандартов на это нет

    как правильно - запрашиваешь по ссылке заголовки, без контента, и смотришь Content-Type должен быть тип text/rss+xml или application/rss+xml, редко бывает text/xml или application/xml но тут дальше только по содержимому
    Ответ написан
    Комментировать
  • Как защитить переписку от MITM атаки?

    @rPman
    Имеется функция, с помощью которой при общении смс не летят на сервер, то есть общение идет в барузере, закрыли вкладку и смс улетели
    вы доверяете коду, который браузер подгружает с сервера?
    Если на сервер данные не идут, значит используется webrtc, шифрование там заявлено но не совсем ясно что тут работает удостоверяющим центром, не сервер ли случайно? которому приходится доверять, так как формально обладая всеми этими данными и технической возможностью владелец сервера смог бы устроить MITM между клиентами.

    если ключи шифрования передавать лично из рук в руки, то можно передавать шифрованные сообщения поверх любого ненадежного протокола, есть даже плагины OpenPGP к браузеру, правда найти достаточно популярного и удобного я не смог, есть к примеру maiilvelope заявлено что автоматически работает с почтовыми сервисами, шифруя текст на стороне клиента, но добавить свой домен не получилось...
    Ответ написан
    Комментировать
  • Как работает цикл for и fillRect() в данном примере?

    @rPman
    для затирания хвоста змейки нужно хранить его тело, в виде массива (размер которого - длина змейки) координат. Этот массив - это fifo буфер, т.е. тебе нужно хранить указатели на начало и конец, делая шаг змейки, ты добавляешь новую запись в массив, стираешь квадрат по координатам самой старой записи и удаляешь эту запись, сдвигая оба указателя.
    Ответ написан
    1 комментарий
  • Как сделать эмуляцию нажатии кнопки на сайте?

    @rPman
    Нажимаешь правую кнопку на нужном тебе элементе на странице (иногда надо добавлять shift+) выбираешь Инспектор (Исследовать) и получае консоль разработчика, она выберет нужный html элемент либо выбирай сам, правую кнопку на нем, выбирать copy -> css selector

    Получишь в буфере css селектор для данного элемента, очень часто он правильный
    Теперь тут же в консоли пишешь команду
    $('вставь_сюда_селектор').click();
    на нужный элемент будет сэмулирован клик мышкой.
    Можешь добавить больше кода и логики, например кликать через указанный интервал - setTimeout

    Если надо автоматизировать при загрузки страницы, бери расширение greasemonkey (tampermonkey), оно позволяет запускать пользовательские скрипты по разным условиям
    Ответ написан
    1 комментарий
  • Как включить немецкий язык в синтезаторе речи?

    @rPman
    а соответствующий голос в синтезаторе на машине есть?
    window.speechSynthesis.getVoices()

    на хроме работает
    var u = new SpeechSynthesisUtterance('Ich bin nicht sicher, dass er ein gutes Beispiel wäre.');
    u.voice=speechSynthesis.getVoices()[2]; // SpeechSynthesisVoice {voiceURI: 'Google Deutsch', name: 'Google Deutsch', lang: 'de-DE', localService: false...
    speechSynthesis.speak(u)

    upd. очень странно инициализируется в первый раз в браузере язык, самый первый раз выбирая язык может остаться язык по умолчанию, но повторная попытка через некоторое время срабатывает, полагаю браузер подгружает поддержку локально (она несколько мегабайт вестит)
    Ответ написан
  • Как вы обычно храните данные об объектах на странице, которые вернул php?

    @rPman
    Получаешь ты от php всегда строку, пусть сервер дает тебе json твоих объектов (jquery автоматически его парсит), парсить самому можно с помощью JSON.parse(str)
    без AJAX получить эти объекты на стороне php до загрузке страницы.
    ajax это не магия, а штатный метод XMLHttpRequest, конечно можно вспомнить древние техники получения данных от сервера в javascript файлах вида вызова функции с json
    object_received({...});
    подключая их как обычный скрипт
    <script type="text/javascript" src="request_data.php"></script>
    Ответ написан
    Комментировать
  • Почему происходит такое с WebSocket?

    @rPman
    Можно ли как-то это поправить? Или есть альтернатива может?

    WebWorker должен работать не зависимо от того, активная вкладка или нет
    Ответ написан
    Комментировать
  • Как удалить переменные из URL страницы без её перезагрузки?

    @rPman
    в приведенном примере - невозможно
    но если переменные хранить с использованием anchor:
    https://site.com/payment#id=12345678910

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

    Этим активно пользуются в SPA приложениях, когда реально страница грузится один раз за все время работы сайта, а все остальное подгружается с помощью ajax
    Ответ написан
  • Как добавить свой код на чужой сайт?

    @rPman
    Это функция глобальная или метод какого то класса?

    В любом случае ты можешь переопределить эту функцию на свою, просто определив ее заново, протестируй в консоли руками, потому просто вставь тот же код в tempermonkey (этот плагин позволяет вызывать твой код javascript в зависимости от ссылки страницы)
    Ответ написан
    Комментировать