Как уменьшить время первой загрузки реагирующего приложения? - PullRequest
0 голосов
/ 31 августа 2018

Размер пакета React проекта слишком велик, хотя при использовании всех методов сжатия требуется слишком много времени для загрузки первой индексной страницы. Сначала браузер загружает пакет js, а затем загружает страницу. Как загрузить страницу индекса сначала, а затем другой пакет компонентов. Ниже приводится webpack.js

  module.exports = {
  devtool: 'source-map',
  context: path.resolve(__dirname, '..'),
  entry: {
    'main': [
      'bootstrap-sass!./src/theme/bootstrap.config.prod.js',
      'font-awesome-webpack!./src/theme/font-awesome.config.prod.js',
      './src/client.js'
    ]
  },
  output: {
    path: assetsPath,
    filename: '[name]-[chunkhash].js',
    chunkFilename: '[name]-[chunkhash].js',
    publicPath: ''
  },
  module: {
    loaders: [
      { test: /\.jsx?$/, exclude: /node_modules/, loaders: [strip.loader('debug'), 'babel']},
      { test: /\.json$/, loader: 'json-loader' },
      { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader')},
      { test: /\.less$/, loader: ExtractTextPlugin.extract('style', 'css?modules&importLoaders=2&sourceMap!autoprefixer?browsers=last 2 version!less?outputStyle=expanded&sourceMap=true&sourceMapContents=true') },
      { test: /\.scss$/, loader: ExtractTextPlugin.extract('style', 'css?modules&importLoaders=2&sourceMap!autoprefixer?browsers=last 2 version!sass?outputStyle=expanded&sourceMap=true&sourceMapContents=true') },
      { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/font-woff" },
      { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/font-woff" },
      { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=application/octet-stream" },
      { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file" },
      { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: "url?limit=10000&mimetype=image/svg+xml" },
      { test: webpackIsomorphicToolsPlugin.regular_expression('images'), loader: 'url-loader?limit=10240' },
      { test: /\.html$/, loader: 'html-loader' }
    ]
  },
  progress: true,
  resolve: {
    modulesDirectories: [
      'src',
      'node_modules'
    ],
    extensions: ['', '.json', '.js', '.jsx']
  },
 plugins: [
    // css files from the extract-text-plugin loader
    new ExtractTextPlugin('[name]-[chunkhash].css', {allChunks: true}),

    // ignore dev config
    new webpack.IgnorePlugin(/\.\/dev/, /\/config$/),

    // optimizations
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      }
    }),

    webpackIsomorphicToolsPlugin
  ]

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Пожалуйста, предпочтите динамическую функцию import, чтобы разделить ваш код легко и без особых изменений. Как общее руководство, динамически импортируйте все ваши главные компоненты маршрута. В сочетании с предварительно загруженными модулями это будет очень эффективный инструмент для быстрого и эффективного разделения вашего кода.

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

Пример (https://reacttraining.com/react-router/web/guides/code-splitting):

import Loadable from 'react-loadable';
import Loading from './Loading';

const LoadableComponent = Loadable({
  loader: () => import(
                  /* webpackPreload: true */ 
                  /* webpackChunkName: "dashboard" */ 
                  './Dashboard'
                ),
  loading: Loading,
})

export default class LoadableDashboard extends React.Component {
  render() {
    return <LoadableComponent />;
  }
}

В приведенном выше примере магические комментарии используются для определения поведения предварительной загрузки и разделения имени фрагмента. Подробнее об этом здесь .

Используйте динамический импорт, чтобы разделить также и не реагирующий код, например, магазины.

0 голосов
/ 31 августа 2018

Вы можете следовать стратегии разделения кода для эффективной загрузки.

Реактивно загружаемая библиотека с открытым исходным кодом предоставляет дружественный к React API для разделения кода,

Вот ссылка на блог, связанный с этим: -

https://hackernoon.com/effective-code-splitting-in-react-a-practical-guide-2195359d5d49

Надеюсь, это поможет.

...