• Как в webpack организовать красивую сборку(прогрессбар и прочее)?

    bingo347
    @bingo347
    Crazy on performance...
    Ну во-первых, у Вас 3 процесса параллельно работают и выкидывают все в общий stdout, естественно там будет каша...
    Во-вторых, вот тут устаревший плагин, не знаю есть ли новый, но все же:
    (node:13579) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
    10% building 0/1 modules 1 active ...aravel-vue/resources/js/entry-server.js 10% building 0/0 modules 0 active
    webpack is watching the files…


    Итак, для начала запустим 2 сборки в одном процессе, а заодно и перехватим управление компиляцией, дабы прогресс рисовать
    для этого создадим файл watch-run.js
    const webpack = require('webpack')
    const ProgressBarPlugin = require('progress-bar-webpack-plugin');
    
    //создадим мультикомпилер из наших конфигов:
    const compiler = webpack([
      require('./webpack.config.js'),
      require('./webpack.server.config.js')
    ]);
    
    //создадим прогресс плагин и скормим ему компилер
    new ProgressBarPlugin({
      // тут конфиг для прогресса
    }).apply(compiler);

    дальше есть два варианта действий:
    1. если наш сервер на базе express, то все просто - оборачиваем наш компилер в webpack-dev-middleware и скармливаем все это в express - и работать будет, и запросы на производное билда будет задерживать на время компиляции, разве что поконфигурировать мидлварь, чтоб меньше логов писал
    2. watch запускаем ручками

    с 1 вариантом все просто, весь файл server.js обернем в экспортируемую функцию, дабы можно было отдать в него компилер:
    module.exports = compiler => {
      // тут в основном будет Ваш код, но с некоторыми добавлениями
    
      // во-первых, подключим мидлварь там где подключаем остальные модули
      const devMiddleware = require('webpack-dev-middleware');
    
      // ну и где нить его отдадим экспресу
      // если server.js где то может без webpack запускаться,
      // то стоит обернуть это в if(compiler) {   }
      app.use(devMiddleware(compiler));
    
      // и опять же, если server.js где то может без webpack запускаться
      // то нужно как то запускать данную функцию если ее никто не запустит
      // добавим переменную флаг, чтоб это отслеживать
      isRunned = true;
    };
    
    //  а объявим наш флаг вне функции
    let isRunned = false;
    //ну и если по nextTick она еще не была запущена, то запустим
    process.nextTick(() => isRunned || module.exports());

    в watch-run.js останется добавить всего 1 строку:require('./server.js')(compiler);

    со 2 вариантом не намного сложнее, просто добавим в watch-run.js:
    // запустим компилер в режиме watch:
    compiler.watch(err => {
      if(err) console.error(err);
    });
    
    // и подключим server.js (на этот раз можно без его изменения)
    require('./server.js')


    все, осталось в start скрипт прописать:
    cross-env NODE_ENV=development node watch-run.js
    Ответ написан
    Комментировать
  • Насколько сильно снижается производительность node.js при запуске его через php функцию exec()?

    А вы точно уверены, что этот процесс запускается каждый раз при запросе к серверу, а не компилируется один раз после изменений, как вьюхи ларавел?
    Ответ написан
    1 комментарий
  • Насколько сильно снижается производительность node.js при запуске его через php функцию exec()?

    xPomaHx
    @xPomaHx
    1vs9
    +0.1s в среднем, из за долгого пуска v8 а это дофига.
    Ответ написан
    Комментировать
  • Насколько сильно снижается производительность node.js при запуске его через php функцию exec()?

    Xuxicheta
    @Xuxicheta
    инженер
    exec запускает внешнюю программу. Производительность ноды никак не меняется.
    Смотря как запускать рендер, но вообще нода не должна висеть как сервер, она рендерит все один раз и завершается, это просто скрипт.
    Хотя если вы на каждый чих будете ререндерить весь проект, то это явно не лучшее решение.
    А вот рендерить при изменении исходных данных это нормально.
    Ответ написан
    Комментировать
  • Насколько сильно снижается производительность node.js при запуске его через php функцию exec()?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    time node -p '(process.memoryUsage().heapUsed/1048576).toFixed(2)+"M"'
    запускаем на своем сервере и любуемся оверхедом от запуска голой ноды...
    у меня (нода v10.15.3) вот так:
    3.71M
    
    real	0m0,076s
    user	0m0,064s
    sys	0m0,012s


    теперь давайте добавим сюда работу vue-ssr, который не просто так рекомендует прикручивать кэш...

    вообщем думайте сами, насколько для Вас оверхед ждать 100-200мс и тратить по ~5МБ на заопрос
    Ответ написан
    Комментировать