我有一個單頁面React應用程序,它由許多文件組成,與gulp/browserify捆綁在一起。有沒有簡單的方法在網絡工作者中運行Firebase?
Firebase JavaScript嵌入在此捆綁包中。
我想知道是否有easy方式在另一個工作線程上運行某些Firebase操作?
我曾嘗試:
建立一個工人,並通過worker.postMessage(xxx)
發送火力地堡對象或實例,。在這兩種情況下,它都會拋出一個錯誤,說the object cannot be cloned
。具有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});
在上面的示例中,Worker工作(哈哈),直到我嘗試傳遞Firebase。
我想什麼來避免:
設置兩個完全不同的包,一個與主應用程序,以及一個專門爲所有的火力地堡操作,與助手LIB從彼此發送操作。
注:後面這個問題的原因是因爲我的UI是由火力地堡操作放緩。例如,我有一個顯示在頁面上的項目列表,當我滾動時,每次顯示一個項目時,此對象的view
計數將使用Firebase更新。如果沒有這些操作,頁面滾動是平滑的,並且當我添加它們時會變得不穩定。
編輯:另外,我一直得到以下警告:Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience.
我正面臨同樣的問題。你最終用兩束+助手lib的想法?如果是這樣,它工作嗎? – Piotr
我目前正在重構我的應用程序以使用'redux'。完成後,我計劃開發一個redux中間件,以使UI(主線程)和web worker(store + firebase邏輯)之間進行存儲I/O(動作/減少)通信。如果成功,我會把它放在一個lib中並更新這個頁面! (順便說一下,我現在使用webpack和香草npm代替吞噬+ browserify) – Pandaiolo