首页 > 解决方案 > Firebase 角度内存不足崩溃

问题描述

我正在使用 Angular 和 Firebase 开发离子应用程序。下面的代码在浏览器上运行时运行良好。但它总是在 Android 设备(物理或虚拟)上崩溃

this.subsGetAllApp = this.afDb.collection<IAppointment>('appointments', (ref) => ref.where(idType, '==', userId)).snapshotChanges().pipe(
    debounceTime(2000),
    map((docs: DocumentChangeAction<IAppointment>[]) => {
        return (docs.map((doc) => {
            return ({
                ...doc.payload.doc.data() as IAppointment,
                id: doc.payload.doc.id
            });
        }));
    })
).subscribe((appointments) => {
    this.store.dispatch(new GetAllAppointment(appointments));
});

此代码在应用程序初始化时启动。我试图在查询中添加更多 where 子句以获取更少的数据。它起作用了,这意味着某处存在内存问题,仅在一定数量的数据时才会出现。

来自 logcat 的错误日志:

2020-08-04 23:25:38.360 6236-6236/com.osteoapp.app E/chromium: [ERROR:aw_browser_terminator.cc(113)] Renderer process (6408) crash detected (code 5).
2020-08-04 23:25:38.379 6236-6236/com.osteoapp.app A/chromium: [FATAL:crashpad_client_linux.cc(404)] Render process (6408)'s crash wasn't handled by all associated  webviews, triggering application crash.
2020-08-04 23:25:38.802 6236-6236/com.osteoapp.app A/libc: Fatal signal 4 (SIGILL), code 2 (ILL_ILLOPN), fault addr 0xd43dfc30 in tid 6236 (om.osteoapp.app), pid 6236 (om.osteoapp.app)
enter code here

标签: androidangularfirebaseionic-frameworkgoogle-cloud-firestore

解决方案


由于所有数据有足够的内存,您会收到此错误。

请尝试增加内存。您可以通过添加以下内容来修改 node_modules/.bin/ionic-app-scripts.cmd 来做到这一点:


@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=4096  "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
)

如果您在 Linux 中,则需要添加以下内容:

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  "$basedir/node --max_old_space_size=4096"  "$basedir/../@ionic/app-scripts/bin/ionic-app-scripts.js" "$@"
  ret=$?
else
  node --max_old_space_size=4096 "$basedir/../@ionic/app-scripts/bin/ionic-app-scripts.js" "$@"
  ret=$?
fi
exit $ret

您还可以查看GitHub 问题,其中说明了之前的问题。

如果仍然更改以前的内容,您会遇到内存不足的问题,这是因为您受到设备硬件的限制。


推荐阅读