为什么Build React-Native程序要等很久

2120 查看

问题

自从 React-Native (以下简称 RN) 升级到 0.14 版本之后,我就发现每次从 xcode 启动程序变慢了,慢了大约有10秒左右。这件事情一次两次还能忍,但是每次如此实在是浪费生命。这是什么原因呢?经过一番尝试,我发现问题出在这里:


react-native-xcode.sh

这个 react-native-xcode.sh 花费了大约10秒的时间。那么这个脚本干了什么呢?打开这个文件可以看到,它的主要工作就是生成 js bundle:

...
react-native bundle \
  --entry-file index.ios.js \
  --platform ios \
  --dev $DEV \
  --bundle-output "$DEST/main.jsbundle" \
  --assets-dest "$DEST"

在 RN 0.14 之后,你已经不需要手工执行 react-native bundle 来生成 main.jsbundle,取而代之的就是 “每次执行都生成!” 。这就是慢的原因。

解决

知道原因之后是否可以解决这个问题呢?很简单,你只要在 react-native-xcode.sh 头上加几行:

if [ "$CONFIGURATION" = "Debug" ]; then
  echo "--- Skip bundle building in 'Debug' mode"
  exit 0
fi

这样就可以恢复到原来的“高速”执行的方式了。

Issue

我后来发现,这个问题有一个对应的 issue。原本是 Asset System 的作者“当时”(4个月前)提出新的 Asset System 的实现构想。结果当新 Asset System 发布后,又带来了这个新问题。而这个问题目前显然不在 FB 的考虑范围内,所以自己改吧。