Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种简单的方法可以在web worker中运行Firebase?_Javascript_Firebase_Web Worker - Fatal编程技术网

Javascript 有没有一种简单的方法可以在web worker中运行Firebase?

Javascript 有没有一种简单的方法可以在web worker中运行Firebase?,javascript,firebase,web-worker,Javascript,Firebase,Web Worker,我有一个单页React应用程序,它由许多文件组成,与gulp/browserify捆绑在一起 Firebase javascript嵌入在该捆绑包中 我想知道是否有一种简单的方法可以在另一个工作线程上运行某些Firebase操作? 我所尝试的: 通过worker.postMessage(xxx)设置一个worker并发送Firebase对象或实例。在这两种情况下,它都会抛出一个错误,表示无法克隆对象。下面是Firebase对象的示例 var blobURL = URL.createObject

我有一个单页React应用程序,它由许多文件组成,与gulp/browserify捆绑在一起

Firebase javascript嵌入在该捆绑包中

我想知道是否有一种简单的方法可以在另一个工作线程上运行某些Firebase操作?


我所尝试的:

通过
worker.postMessage(xxx)
设置一个worker并发送Firebase对象或实例。在这两种情况下,它都会抛出一个错误,表示无法克隆对象。下面是Firebase对象的示例

var blobURL = URL.createObjectURL(new Blob([ '(',
    (function() {
        var onmessage = function(event) {
            var FB = new event.data.Firebase('my firebase URL');
            // Here, some Firebase operations
            // ...
        };
    }).toString(),
')()' ], { type: 'application/javascript' }));
var postViewedWorker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);

[... later on ...]

postViewedWorker.postMessage({Firebase: Firebase, ...otherParams});
在上面的例子中,工人一直工作(哈哈),直到我试图通过Firebase


我想避免的是:

设置两个完全不同的捆绑包,一个用于主应用程序,另一个专用于所有Firebase操作,并使用助手库彼此发送操作


注意:这个问题背后的原因是因为Firebase操作减慢了我的UI速度。例如,我有一个显示在页面上的项目列表,当我滚动时,每次项目可见时,该对象的
视图
计数都会用Firebase更新。没有这些操作,页面滚动是平滑的,当我添加这些操作时,页面滚动会变得急促


编辑:另外,我一直收到以下警告:
主线程上的同步XMLHttpRequest被弃用,因为它对最终用户的体验有不利影响。
Easy,取决于您的Easy值。当然有可能

我用microdom让它工作。这是一个粗糙/肮脏的版本,对你来说很有意义

在您的工作人员中:

importScripts(“http://raw.github.com/tmpvar/microdom/master/microdom.min.js");
var窗口=微DOM(“”);
var文档=窗口;
进口文件(“https://cdn.firebase.com/js/client/2.4.2/firebase.js");
var ref=新的Firebase(input.Firebase_端点);
//这个ref现在可以工作、验证等。您可以使用.notify()将信息传递给主线程等。
参考“值”,功能(快照){
output.notify(snapshot.val());

});我有一个工作的开源实现,它将Firebase放入一个工作程序:。它可以使用普通工作线程和共享工作线程(在支持的情况下),并集成来自其他Firebase附加库的额外功能。它模拟Firebase API,并自动将调用从主页桥接到工作页面,因此您现有的代码应该或多或少继续按原样工作。在撰写本文时,它也有一些非平凡的限制:

  • 仅支持Firebase SDK 2.4.2。可能会被修改为SDK 3.x,但由于源代码不可用,这将更加困难
  • 交互式身份验证方法不起作用;调用
    authWithPassword
    authWithOAuthPopup
    authWithOAuthRedirect
    将引发异常。相反,使用您自己的服务器登录并调用
    authWithCustomToken
  • 项目优先级当前未实现。因为优先级存储在带外,所以很难有效地支持它,Firebase的人表示,无论如何,它基本上是不推荐的

我也面临同样的问题。您是否最终采用了“两个捆绑包+助手库”的想法?如果是这样的话,它工作了吗?我目前正在重构我的应用程序以使用
redux
。一旦完成,我计划开发一个redux中间件,使商店I/O(操作/减少)在UI(主线程)和web工作者(商店+firebase逻辑)之间进行通信。如果成功,我将把这个放在一个库中,并更新这个页面!(顺便说一句,我现在使用的是webpack和香草npm,而不是gulp+browserify)