Задать вопрос
  • Как правильно построить сервис, создающий отложенные задачи на основе расписания из другого сервиса?

    Fragster
    @Fragster
    помогло? отметь решением!
    В качестве обходного пути - эта 1000 отчетов выглядит для телепата как один и тот же отчет для 1000 пользователей с незначительными отличиями в фильтрах. Почему бы не провести тестирование на разбиение этого на два этапа: 1. получение всех данных из БД и сервисов для всех пользователей; 2. генерация из этих данных 1000 отчетов путем фильтрации в памяти.

    Выглядит как задача для OLAP или его заменителя на самом деле. Типа подготавливаем в отдельном кубе (ну или таблице) данные для отчета в фоне, а в нужный момент просто выплевываем по простейшему фильтру и агрегатам. Т.е. первый этап из предыдущего абзаца делать заранее в фоне по расписанию (например за пару часов до часа Х или вообще каждый час только по обновленным данным), а на втором просто простейшее получение данных, которое не занимает много времени.
    Ответ написан
    1 комментарий
  • Как правильно подружить Vue и php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    а vue выступает сугубо в роли небольших компонентов на разных страницах

    Исходя из этого я могу предположить, что подобные виджетики скорее всего не нуждаются в серверном рендере, а значит все довольно просто.
    Настраиваем любой сборщик (webpack, vite). На входе будет какой-нибудь main.js, на выходе готовый файл (по умолчанию), пара файлов (main и vendor, если настроили разделение) или больше, в зависимости от хитрожопости настроек. Вот эти файлы и подключаем (соблюдая порядок, если их несколько, например vendor перед main)

    В main можно писать весь фронт сайта, или модульно импортировать.
    Туда же подключается вью и компоненты ваших виджетов

    import Vue from 'vue';
    import Calculator from './calc/Calculator.vue';


    На странице, где нужно вставить компонент пишем нечто вроде

    <div class="calc"></div>

    Сюда будет рендериться компонент в рантайме. Например так (в том же main.js)

    document.querySelectorAll('.calc').forEach(el => {
        new Vue({
            el    : el,
            render: h => h(Calculator, {
                props: {
                   /// Пропсы, если надо
                },
            }),
        });
    });


    То есть каждый виджет в этом случае будет независимым vue приложением.

    Если нужно передавать в компоненты какие-то данные, то можно научить компонент самому их запрашивать. Но тут придется отдельные роуты создавать. Или прямо на страницу в head выплевывать их в виде json

    <script>window.calcData = <?= json_encode($calcData) ?>;</script>


    а в компоненте по mounted их доставать

    mounted() {
      const d = window.calcData;
    }
    Ответ написан
    1 комментарий