• Кто на моём ПК сливает информацию о моём железе - БРАУЗЕРУ?

    DevMan
    @DevMan
    и где узрета инфа о железе?

    разрешение экрана, очевидно, вполне доступно браузеру, и, соответственно, жс. остальное железо/параметры никак не пострадало.
    Ответ написан
    9 комментариев
  • Почему при выполнении скрипта node.js увеличивается занятая RAM?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Давайте посмотрим, что Вы тут накодили... Я уберу Ваши комментарии из кода и добавлю свои:
    const setup = {port:8000}
    const express = require ('express');
    const puppeteer = require('puppeteer');
    
    const app = express ();
    
    app.get('/', (req, res) => {
        const url = req.query.url;
    
        // вот тут Вы на каждый запрос создаете весьма тяжелую функцию
        // в ней 203 AST ноды
        // и она жрет в среднем 220КБ оперативы
        // (node: 14.4.0; v8: 8.1.307.31-node.33, мерил через process.memoryUsage().heapUsed)
        let scrape = async () => {
    
            // а еще на каждый запрос запускам новый браузер
            // у ноды это особо памяти не отнимет, а вот у системы - прилично
            const browser = await puppeteer.launch({args: ['--no-sandbox']});
            const page = await browser.newPage();
    
            // еще и разрешаем запросу из браузера жить вечно
            // если конечно сервак не оборвет коннект
            await page.setDefaultNavigationTimeout(0);
    
            await page.setUserAgent('Mozilla/5.0 (Linux; Android 7.0; NEM-L51) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.81 Mobile Safari/537.36');
            await page.setViewport({width: 375, height: 812});
    
            // куда мы отправляем браузер?
            // переменная url у нас из req.query.url - а следовательно начинается с /
            // то есть без хоста и протокола...
            await page.goto(url);
    
            // что-то мне подсказывает, что это работает не совсем так
            // как Вы ожидаете
            // https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pageevaluatepagefunction-args
            // читаем: If the function passed to the page.evaluate returns a non-Serializable value, then page.evaluate resolves to undefined
            const bottomSheet = await page.evaluate(() => {
                return document.querySelector('div[data-marker="bottom-sheet"]');
            });
    
            // так как undefined !== null данное условие всегда истинно
            if (bottomSheet !== null) {
                // здесь по идее придет Promise.reject который мы не ловим (об этом ниже)
                await page.click('div[data-marker="bottom-sheet"] button');
            }
    
            // и еще раз... ловите доку на нужный метод:
            // https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pageselector
            const phoneButton = await page.evaluate(() => {
                return document.querySelector('a[data-marker="item-contact-bar/call"]');
            });
    
            // всегда ложное условие...
            if (phoneButton === null) {
                await browser.close();
                return false; // ...с return внутри...
            }
    
            // еще 1 способ зависнуть (дефолтный таймаут 30 сек)
            await page.waitForSelector('a[data-marker="item-contact-bar/call"]');
    
            await page.click('a[data-marker="item-contact-bar/call"]');
    
            try {
                await page.waitForSelector('span[data-marker="phone-popup/phone-number"]');
            } catch (e) {
                await browser.close();
                return false;
            }
    
    
            const result = await page.evaluate(() => {
                console.log('phone', document.querySelector('span[data-marker="phone-popup/phone-number"]'));
                return document.querySelector('span[data-marker="phone-popup/phone-number"]').innerHTML;
    
            });
    
            await browser.close();
            return result;
    
        };
    
        // не ловим reject промиса
        // и в случае reject не завершаем запрос
        // и он тоже висит в памяти
        scrape().then((value) => {
            console.log(value);
            if (value === false)
                res.send(500);
            // при value === false будет запись в закрытый поток... (или у express есть защита от дурака?)
            res.send(value);
            // абсолютно бесполезное действие...
            scrape = null;
        });
    });
    
    
    app.get('/test', (req, res) => {
        res.send('Тест');
    });
    
    app.listen(setup.port, () => {
        console.log('Сервер: порт %s - старт!', setup.port);
    });
    Ответ написан
    1 комментарий
  • Как запретить доступ для юзеров с VPN?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    От накручивания не баны впнов помогают, а верификация. Например, по номеру телефона.
    Ответ написан
    2 комментария
  • Как сделать автоматический парсер?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Как спарсить не последнюю новость, а любую (например, предпоследнюю)

    Логично, что нужно найти все новости, и выбрать предпоследнюю

    2. И как сделать проверку новых новостей, чтобы программа понимала, что вышла новая новость и сразу парсила её.

    А как вы понимаете, что новость новая? Скорее всего вы помните название последней новости, и при обновлении страницы опять находите последнюю статью, и сравниваете название с тем, которое помните? Неожидано, но для бота все точно так же. Находите последнюю на текущий момент статью -> сохраняете ее название в переменной -> через Х времени заново находите последнюю новость, и сравниваете названия.

    Ещё я обнаружил, что при таймере парсится одна и та же новость. То есть программа запущена, новость спарсилась и через указанный интервал времени, даже если на сайте появились новые новости будет парсится эта же новость, пока не перезапущу программу.

    Все правильно, вы один раз получили код страницы, и больше его не обновляли
    html = requests.get("https://www.rbc.ru/short_news")
    Ответ написан
    Комментировать
  • Как передать значние input и изменить его в модальном окне?

    0xD34F
    @0xD34F Куратор тега Vue.js
    editTask (task, index) {

    v-model="editidTask.title"

    task.title = this.editTask.title

    Вижу, имена свойств/методов подобраны грамотно - перепутать невозможно.

    this.tasks.map((task, index) => {
      if (index === this.editidTask.id) {

    Во-первых - зачем перебирать массив, если вам известен индекс элемента? Кстати, очень умно - хранить индекс в свойстве с именем "id".

    Во-вторых - не боитесь обновить что-то не то? Работаете с массивом tasks, используя индекс, полученный при работе с tasksFiltered.
    Ответ написан
  • Как вы изучаете языки программирования и технологические стеки БЫСТРО?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    начинать с курсов ... а доки приберечь на потом

    Это вы-то не новичок? Только новички пренебрегают официальной документацией от разработчиков, предпочитая курсики или убогонькую литературу, которая пересказывает ту же документацию, привязав её к таким же убогим частным случаям. Изучая частное, вы будете обезьянкой (я сейчас не про веб, честное слово, просто другого слова нет), которая надрессировалась делать что-то определённое, а на другой задаче растеряется.

    А остальные пункты норм, их отбрасывать как раз нельзя.
    Ответ написан
    8 комментариев
  • Как просмотреть все интернет запросы на мобильном устройстве или ПК?

    Zoominger
    @Zoominger
    System Integrator
    WireShark в режиме дампа.
    Ответ написан
    Комментировать
  • Как находить быстро и много нужной информации?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    учись искать, и все получится

    больше практики

    Гугл и Яша избаловали пониманием человеческого языка, а вот не надо вестись
    Ответ написан
    Комментировать
  • Возможно ли создание онлайн образовательного портала через платформу WIX?

    glaphire
    @glaphire
    PHP developer
    На сайте wix описаны возможные варианты сайтов, которые на нем можно создать - https://ru.wix.com/features/main
    Упоминается возможность просмотра только для юзеров wix, создание магазина и дописывание проекта с помощью node.js. На практике можно наткнуться на множество ограничений, поэтому надежнее писать кастомное решение на своем хостинге или искать платформу с конкретно таким функционалом, нп. Patreon позволяет управлять доступом к видео по ежемесячной подписке.
    Ответ написан
    Комментировать
  • Возможно ли создание онлайн образовательного портала через платформу WIX?

    ArsenyMatytsyn
    @ArsenyMatytsyn
    Руководитель frontend направления, предприниматель
    Образовательный портал, в его нормальном смысле это дорого, долго, и постоянные доработки по улучшению сервиса. А ключевое слово — сервис. Сервисы создаются руками разработчиков, а не конструкторами.

    Я молчу про безопасность проекта и прочие вытекающие в необходимость, к примеру, иметь свою БД под тайной семи печатей.
    Ответ написан
    Комментировать
  • Как включить команды Git в консоли Windows?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    GitHub - это сторонний клиент. Он почти ничего общего не имеет с командой git.
    Для установки git нужно установить, как ни странно, git!

    https://git-scm.com/downloads

    Или командой winget install git
    Ответ написан
    1 комментарий
  • Почему Windows сообщает "Нет доступа" при копировании файлов, хотя я админ?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    ОС понимает, что сейчас все кругом с правами админа и все поголовно *диоты. Вот и запрашивает подтверждение, чтобы вы *ерни не наворотили.

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

    @Qualiant
    Судя по формулировке вопроса, вам пока что рановато реализовывать такие вещи.
    А ответ на ваш вопрос растянется на десятки тысяч символов.
    Ответ написан
    Комментировать
  • Как увеличить количество запросов в секунду Laravel (PHP)?

    @Alexandre
    1) отключить дебаг на продакшене, сильно тормозит, проверено
    2) включить OpCacher, кеширование опкодов увеличивает быстродействие
    3) сделать профилирование, определить узкие места кода. Как правило это запросы... По оптимизации и профилировании запросов есть много информации в интернете. Большинство людей во фреймворках используют ОРМ. Надо помнить, что ОРМ как правило делает НЕ оптимальные запросы.
    4) Может стоит какие-то данные закешировать или вычислить при старте фреймворка.
    5) если проблема в вычислениях, то часть кода вынести в отдельный микросервис и написать его на чем-то более быстром, например golang. Это выносится на отдельный url ( роутер) и разруливается nginx location. Это уже крайняк...
    6) Могут быть проблемы в самой архитектуре приложения, может что-то стоит вынести в отдельные части (воркеры) и подтягивать AJAX или WebSocket уже после загрузки страницы: по запросу запускаем подзадачу, которая по готовности оповестит страницу и та уже вытянет оставшиеся данные .

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

    @Tabletko
    никого не трогаю, починяю примус
    Зеркало - не резервная копия и тег "резервное копирование", в разрезе вашего вопроса, не к месту. Если сервер нагружен, то ему нужно обеспечивать высокую доступность - несколько серверов, обрабатывающих сервис; несколько каналов; несколько датацентров; репликация данных; балансировки нагрузки. Вот это вот всё. В каждом конкретном случае оно настраивается индивидуально. Гуглите - архитектура высоконагруженых систем.
    Ответ написан
    Комментировать
  • Что делать если, подлагивает Гугл Хром?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    комп помощнее
    Ответ написан
    Комментировать
  • Что делать если, подлагивает Гугл Хром?

    Psixodelik
    @Psixodelik
    Преподаватель на Hexlet
    Возможно вы пользуетесь большим количеством вкладок. Не хватает оперативной памяти.

    Проверьте установленные расширения, а так же количество открытых программ на ОС.

    Ещё вариант: недостаточное количество места на жёстком диске. Некуда скидывать кэш.
    Ответ написан
    Комментировать
  • Как развернуть сайт на весь экран?

    iamd503
    @iamd503
    Верстальщик
    Вы хоть пытались гуглить?
    https://html5.by/blog/fullscreen-javascript-api/
    Ответ написан
    Комментировать
  • Как в Bitrix вывести компонент в переменную?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Потому что внутри компонента bitrix:breadcrumb используется отложенная функция $APPLICATION->AddBufferContent
    Ответ написан
    Комментировать