如何加快 React native 和 Expo 应用程序的初始启动应用程序

How to speed up initial launch app of React native and Expo app

我创建了一个应用程序并添加了启动屏幕。在 Android 模拟器上加载应用程序需要 1 秒。但是在商店中发布应用程序后,加载需要 4 秒。

对于这样一个简单的应用程序来说,这很烦人。

我还以为是_loadResourcesAsync函数加载图片的问题。因此我注释掉了这些行,但没有任何改变。

任何加速我的应用程序启动的建议。

在这里你可以找到我的 app.js

import React from 'react';
import { Platform, StatusBar, StyleSheet, View } from 'react-native';
import { AppLoading, Asset } from 'expo';
import AppNavigator from './navigation/AppNavigator';

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isLoadingComplete: false,
    };
  }

  render() {
    if (!this.state.isLoadingComplete && !this.props.skipLoadingScreen) {
      return (
        <AppLoading
          startAsync={this._loadResourcesAsync}
          onError={this._handleLoadingError}
          onFinish={this._handleFinishLoading}
        />
      );
    } else {
      return (
        <View style={styles.container}>
          {Platform.OS === 'ios' && <StatusBar barStyle="default" />}
          <AppNavigator />
        </View>
      );
    }
  }

  _loadResourcesAsync = async () => {
    return Promise.all([
      Asset.loadAsync([
        // require('./assets/images/big_bottle.png'),
        // require('./assets/images/bottle.png'),
        // require('./assets/images/coffee.png'),
        // require('./assets/images/juice.png'),
        // require('./assets/images/menu.png'),
        // require('./assets/images/tea.png'),
        // require('./assets/images/water-glass.png'),
      ]),
    ]);
  };

  _handleLoadingError = error => {
    // In this case, you might want to report the error to your error
    // reporting service, for example Sentry
    console.warn(error);
  };

  _handleFinishLoading = () => {
    this.setState({ isLoadingComplete: true });
  };
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
  },
});

根据我的经验,混合应用通常启动速度较慢。

根据我的测试,根据设备性能,即使是完全空白的 Expo 应用程序也可能需要 1-4 秒才能启动。这是从用户点击(打开)应用程序到启动画面隐藏(第一个应用程序屏幕可见)所花费的时间。

您可以做些什么来加快它的速度是一个非常广泛的话题。这里有两个建议,对我的一个项目有很大帮助:

  1. 兑现您的资产。

    Bundling assets into your binary 将提供最佳用户体验,因为您的资产将立即可用。您的应用程序无需向 CDN 发出网络请求来获取您发布的资产,而是从本地磁盘获取它们,从而获得更快、更高效的加载体验。

  2. 始终首先加载应用的缓存版本。

    您可以将 app.json 中的“更新”部分配置为始终首先从应用的缓存版本 (fallbackToCacheTimeout: 0) 开始,然后继续尝试在后台获取更新(位于哪一点它将被保存到缓存中以供下一次应用加载。

不幸的是,截至今天,我们在进一步改善空白应用程序的初始加载时间方面似乎有点受限。没有真正可靠的方法来知道 'check for updates' 过程需要多长时间,一般的 React Native 初始化时间,'load all the JS' 时间。

tools for improving the startup time 有一个功能请求,如果 Expo 团队在未来任何时候引入类似的东西,那就太好了。