【问题标题】:How to reduce first load page time of react application?如何减少反应应用程序的首次加载页面时间?
【发布时间】:2018-08-31 07:38:04
【问题描述】:

React 项目包大小太大,虽然使用了所有压缩技术,但加载第一个索引页面需要太长时间。首先浏览器下载 bundle 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
  ]

【问题讨论】:

    标签: javascript reactjs npm webpack react-redux


    【解决方案1】:

    请使用动态import 函数来轻松拆分您的代码,而无需进行太多更改。作为一般准则,动态导入所有顶级路由组件。当与pre-loaded modules 结合使用时,这将是一个非常有效的工具,可以快速有效地拆分您的代码。

    执行此操作时,您可以使用任何可用的加载包装库(例如 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 />;
      }
    }
    

    在上面的示例中,magic-cmets 用于定义预加载行为和拆分块名称。阅读更多关于这些here 的信息。

    也可以使用动态导入来拆分您的非反应代码,例如商店。

    【讨论】:

      【解决方案2】:

      您可以按照代码拆分策略进行有效负载。

      开源库 react-loadable 为代码拆分提供了一个 React 友好的 API,

      这是与此相关的博客链接:-

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

      希望对你有帮助。

      【讨论】:

      • 我使用了上面的 url 但没有创建块文件
      猜你喜欢
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2019-05-27
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多