• Как задать задержку для fetch при скачивании более 4000 фото?

    RAX7
    @RAX7
    Помимо случайной задержки нужно еще ограничить количество одновременных запросов, примерно так:
    function randomDelay(min = 250, max = 750) {
      return new Promise((resolve) => {
        const ms = Math.random() * (max - min) + min;
        setTimeout(resolve, ms);
      });
    }
    
    function downloadAll(urls, limit = 4) {
      return new Promise((resolveAll, rejectAll) => {
        const result = [];
        const iter = urls.entries();
        let fulfilled = 0;
    
        const next = () => {
          const { done, value } = iter.next();
    
          if (done) {
            if (fulfilled === urls.length) {
              resolveAll(result);
              return;
            }
    
            return;
          }
    
          const [index, url] = value;
          const onFulfilled = (val) => {
            result[index] = val;
            fulfilled += 1;
            next();
          };
    
          randomDelay()
            .then(() => fetch(url))
            .then(onFulfilled, rejectAll);
        };
    
        for (let i = 0, l = Math.min(limit, urls.length); i < l; i++) {
          next();
        }
      });
    }
    
    const urls = Array.from(
      { length: 100 },
      (_, i) => `https://jsonplaceholder.typicode.com/todos/${i + 1}`
    );
    
    (async () => {
      const responses = await downloadAll(urls, 2);
      const data = await Promise.all(responses.map((r) => r.json()));
      console.log(data);
    })();
    Ответ написан
    1 комментарий
  • Как задать задержку для fetch при скачивании более 4000 фото?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно в N параллельных «потоков» скачивать. В каждом случайная пауза перед очередным URL:
    const N = 3;
    
    const delay = ms => new Promise(res => setTimeout(res, ms));
    
    const next = () => {
      if (items.length > 0) {
        return download(items.shift())
          .then(delay(500 + Math.floor(Math.random() * 500))) // случайная пауза между закачками
          .then(next);
      }
    };
    
    const works = Array.from({ length: N }, () =>
      Promise.resolve()
        .then(next)
        .catch(console.error)
    );
    
    Promise.all(works).then(() => console.log('All Done'));
    Ответ написан
    1 комментарий
  • Как задать задержку для fetch при скачивании более 4000 фото?

    MvcBox
    @MvcBox
    Software Developer [C/C++/JS(for Node.js)/etc]
    'use strict';
    
    const Bluebird = require('bluebird');
    
    /* Тут какой-то Ваш код */
    
    Bluebird.map(items, async function(url) {
      try {
        const response = await fetch(url);
    
        if (response.status === 200) {
            const buffer = await response.buffer();
            /* Что-то делаете с буффером */
        }
    
        await Bluebird.delay(1000); // Можно добавить задержку после каждого успешного запроса
      } catch(err) {
        console.error(err);
      }
    }, {
      concurrency: 3 // Указываете во сколько потоков выполнять запросы
    }).catch(console.error);
    Ответ написан
    1 комментарий
  • Что нужно чтобы создать нейросеть генерирующую изображения на основе обучения?

    Нужно поискать на github'е "GAN style transfer" и прочитать подробно Readme по использованию.
    Ответ написан
    Комментировать
  • Что быстрее интегрировать в существуют react проект - express или nextjs для seo?

    @Corvuss
    На next точно будет сложнее переносить, т.к. там свои архитектурные особенности и свой файловый роутер (скорей всего много чего придется переписывать под next, если большой проект).

    Можно попробовать razzle.
    https://github.com/jaredpalmer/razzle
    Ответ написан
    2 комментария
  • Как работает Google.Почта для домена?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    В месяц. А еще со временем придется доплачивать за GDrive ибо люди имеют дурацкое свойство хранить мусор в почте.

    Минусов как таковых не видел - пользовались долго и счастливо.
    Ответ написан
    Комментировать
  • Как работает Google.Почта для домена?

    jamessvetsky
    @jamessvetsky
    Специалист по почтам и рассылкам
    У них есть бесплатный тестовый период - кажется 15 дней, далее 5-6 долларов за каждый ящик в месяц. цена немного отличается если платишь заранее и смотря кому оплачивать, напрямую гуглу или реселлерам.
    Из плюсов - Гугл доки и другие их сервисы, сервера не в России (хотя для кого то это и минус)
    Из минусов - ограничение даже на платном тарифе на объем информации (почта плюс диск до 30 гб на пользователя, есть более дорогие варианты тарифа)
    Ответ написан
    Комментировать
  • Как правильно проверять переменную на пустоту внутри функции?

    Tim-A-2020
    @Tim-A-2020
    1 вариант. с 2020 года
    element?.getContext('2d');
    2 вариант использовать тернарный оператор
    element ? element.getContext('2d') : null
    3 вариант
    if(element && element.getContext) {
    //code
    }
    Ответ написан
    2 комментария
  • Как в Laravel Faker добавлять не более 4 одинаковых значений в определенную таблицу?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    database/seeds/TeamSeeder.php
    factory(Team::class, 3)->create()->each(function($team) {
        $team->users()->saveMany(factory(Users::class, 5)->make());
    });
    // Roles
    $admin_ids = collect(range(1, Users::count()))->random(5)->toArray();
    Users::whereIn('id', $admin_ids)->update(['role' => 1]);

    Будет работать, если у вас для модели Team будет настроена связь hasMany с моделью Users.
    ЗЫ: Рекомендую применять стандарты Laravel:
    Users -> User
    id_team -> team_id
    Ответ написан
    1 комментарий
  • Чем отличается создание 3d игры от 2d(Unity)?

    AnotherAltr
    @AnotherAltr
    C# Dev
    Ну для начала, в 2D играх используются спрайты, атласы, и прочее
    В 3D играх, все на много сложнее (относительно), используются другие шейдеры, 3D модели ну и текстуры\материалы.

    Если проще, направления разные:
    3D:
    Вертексные шейдеры.
    3D меши.
    Скиннинг.
    Риггинг.
    Текстуры, материалы.
    3D физика.

    2D:
    Атласы.
    Спрайты.
    2D физика.
    Пиксельные шейдеры. (Хотя вертексные тоже бывают)
    Поспрайтовая анимация.

    В общем различный стек технологий используется для создания 3D и 2D игр.
    Ответ написан
    2 комментария
  • Отдельная карточка товара или опции для интернет-магазина?

    Service_Rookee
    @Service_Rookee
    Добрый день!
    По нашему опыту – чем больше страниц в интернет-магазине, тем лучше. И тем более конкурентен он среди других подобных ресурсов.

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

    На всех карточках должна быть годная перелинковка. При выборе, например, зеленого велосипеда с карточки по предложениям с другими цветами должны стоять также другие уникальные ссылки. Никаких #хештегов на конце. Для поисковиков это один и тот же URL. Мета-теги вы для него уникальные не пропишите.

    Ну и конечно все урлы должны быть в sitemap.xml для лучшей индексации
    Ответ написан
    Комментировать
  • Отдельная карточка товара или опции для интернет-магазина?

    @lotse8
    1) Прежде чем заморачиваться с цветами, посмотри много ли в поисковиках запросов велосипедов по цветам. Может быть большинство по другим параметрам ищут. Надо ли на цвета время тратить, если ищут условно 3 человека. Т.е. чтобы что-то делать, нужно знать статистику и быть уверенным, что это действительно нужно делать.
    2) Чем больше страниц будет проиндексировано поисковиком, тем лучше для магазина. В идеале надо сделать по числу комбинаций всех опций. Например: 1) хардтейл, шоссейник 2) Shimano, SRAM 3) красный синий черный = 12 страниц. Как это будет технически сделано, абсолютно неважно, главное, чтобы на каждой странице выдавались уникальные метатеги - основные в title, дополнительные в description. Если цвет важно, то например:
    <title> Велосипеды хардтейл красные</title>
    <description>Велосипеды хардтейл с переключателями Shimano красные купить в Урюпинске ул. Николая-2, д. 3 - работаем без выходных с 6:00 до 23:00</description>

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

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Вопрос:
    Какую архитектуру базы данных создать, под каждый сайт отдельные таблицы или отдельную базу данных под каждый мгаазин или сотни тысяч товаров в одной держать. Кто работал с конструторами сайтов, какая у них база данных под каждого клиента. И стоит ли вообще использовать mysql или стоит рассмотреть другого вариант? Как бы вы построили базу данных, если бы таких магазинов было 100 и более.
    С точки зрения логики, безопасности, здравого смысла и ряда прочих факторов, включая архитектурные особенности (по части хранения таблиц в рамках файловой системы) самих БД - я хранил подобные данные в разных БД. Но, с учётом того, что "сотня тысяч" строк, это по большому счёту "пшик" и база уровня "шаред-хостинг" (думаю, ещё даже не VPS) - то для удобства можно хранить всё это и в одной базе.

    На счёт стоит ли использовать MySQL - лично Вам, в данный момент - я думаю стоит. Смена одной БД на другую, без полного понимая контекста того, зачем это делается и чем одна отличается от дургой - обычно ничем хорошим не горозит. Движки БД (популярных) сами по себе, "из коробки", друг от друга не слишком сильно отличаются и чудесным образом один из них "по умолчанию" не будет "лучше" чем другой. Я неоднократно работал над проектами где "сотни тысяч" (записей) появлялись ежедневно и они (эти проекты) прекрасно себя чувствовали на MySQL'е.
    Ответ написан
    Комментировать
  • Как на php ставить задачи в очередь например при парсинге сайта?

    @Flying
    Подобная задача решается через т.н. брокеры сообщений (Message broker). Есть несколько возможных вариантов, к примеру выделенные сервера, реализующие протокол AMQP (например RabbitMQ, ActiveMQ и другие), стриминговые сервера (к примеру Kafka), сервисы очередей (Amazon SQS и подобные), а также другие реализации паттерна PubSub, к примеру в Redis.

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

    В вашем сценарии скорее всего будет подразумеваться две очереди:
    1. Очередь задач на scraping. а которую подписываются множество worker'ов, осуществляющих непосредственный сбор данных
    2. Очередь с результатами сбора данных, куда worker'ы будут скидывать данные и на которую подписываются обработчики, решающие что же делать с данными дальше

    Возможно есть ещё какие-то задачи и реальная схема будет сложнее, но в целом, надеюсь, идея понятна.

    Для PHP существуют немало binding'ов к серверам, реализующим message brokering. Не знаю что именно на сервер вы выберете, поэтому навскидку приведу php-amqplib/php-amqplib для работы с AMQP (в первую очередь с RabbitMQ), enqueue/amqp-tools (также для AMQP) и superbalist/php-pubsub для реализации PubSub паттерна, к примеру через Redis.

    Вы не указали на чём написан ваш проект, но в целом также можно посмотреть в сторону компонента Messenger для Symfony, его можно использовать и вне Symfony и он даёт хорошую базу для реализации схем обмена сообщениями.
    Ответ написан
    3 комментария
  • Пользовались ли вы сервисом робоклик?

    Grinvind
    @Grinvind
    Помогаю увеличивать трафик с поисковых систем
    Даже не вздумайте!)
    Или сольёте бабло впустую или, того хуже, под бан на 9 месяцев попадёте. Если сервис массово начинает крутить пф, он делает это через паттерны, которые элементарно вычисляются Яндексом.
    Ответ написан
  • Нужна ли для ООО лицензионная windows?

    @BeatHazard
    1. Лицензия нужна в любом случае и не зависит от типа организации.
    2. На данный момент поддержка Windows 7 еще не прекращена, окончание поддержки 14 января 2020 года.
    3. Лицензия на ПО требуется в любом случае, даже если его поддержка уже прекращена. Прекращение поддержки означает только то, что для данного ПО перестают выпускать обновления или предоставлять доступ к каким-либо сервисам, но не означает изменений в лицензионном соглашении которое вы обязаны принять при установке ПО.
    Ответ написан
    7 комментариев
  • Как лучше добавлять товар для интернет-магазина в плане СЕО?

    RotgarSett
    @RotgarSett
    SEO Эксперт
    Точно должен быть один товар с опциями.

    Этот подход работает для поисковых систем и удобен для пользователей одновременно.

    Вот пример хорошей реализации:

    https://www.metiz-dvor.ru/catalog/krepezhnye-izdel...

    take.ms/qsZc3
    Ответ написан
    Комментировать
  • Как использовать socket на php проекте?

    hOtRush
    @hOtRush
    Ответ написан
    Комментировать
  • Как использовать socket на php проекте?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Server sent event - но не поддерживается в ie/edge
    https://learn.javascript.ru/server-sent-events
    https://www.npmjs.com/package/event-source-polyfill
    Ответ написан
    Комментировать