2016-02-02 39 views
0

我目前正在創建一個應用程序,用戶可以在圖像上應用過濾器。無論如何,取決於圖像的大小,應用過濾器的腳本可能需要很長時間。所以我想給工人一個嘗試。 (PHP不是BTW替代)與網絡工作者訪問預製功能

所以首先我有我的功能應用的過濾器,它工作得很好(工人外)。所以,下面的代碼我有

主要的Javascript文件,其中我定義的功能和工人:

jQuery(function ($) 
{  

    var worker = "undefined"; 

    applyEffect(); 
    CreateWorker(worker); 
}); 

//function to apply the effect stands here 

/*-------------------*/ 
    /*WORKER*/ 
/*-------------------*/ 


//worker answers 
function defineWorker(worker) 
{ 
    worker.onmessage = function(e) 
    { 
     if(e.data == "msg from worker") 
     { 
      console.log(e.data); 
     } 
     worker.terminate(); 
    } 
} 


function CreateWorker(worker) 
{ 
    $("#filters li").click(function clickWorker() 
    { 
     if (typeof worker == "undefined") 
     { 
      worker.terminate() 
     } 
     else 
     { 
      console.log("worker created"); 
     } 
     worker = new Worker('js/worker.js'); 
     defineWorker(worker); 
     worker.postMessage("hello"); // Start the worker. 
    }); 
} 

和這裏的工作人員(worker.js):

self.onmessage = function(e) 
{ 
    if(e.data == "hello") 
    { 
     applyFilter(Argument1,Argument2,function() 
     { 
      self.postMessage('msg from worker' + $(window).width()); 
     }); 
    } 
} 

當我嘗試啓動通過點擊,我克工人et「ReferenceError:applyFilter is not defined」...對於jQuery代碼也是如此:「ReferenceError:$未定義」。

我有點理解這裏的問題,但我不知道如何解決它。

我希望有人能幫助我:)

回答

0

每個工作都有它自己的範圍,並沒有進入公共功能,如您的applyFilter()會 - 方法。這與庫和DOM相同。工作人員沒有DOM-Access,所以我認爲你不能在這裏使用它們來完成你的任務。

給它舔here

一個有效的辦法是對所有圖像的信息存儲在一個對象,並給這個對象的工人。工作人員然後在對象上應用一些標籤或過濾器並將其發送回主sk。

+0

謝謝,我使用camanJs的過濾器,當我通過importScripts包括腳本我得到的錯誤:「ReferenceError:窗口沒有定義」,所以我想我不能在這裏使用工人,即使我使用目的。 – user2839873

+0

是的,因爲大部分窗口方法都不可用。您可以在這裏查看可能的方法:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Functions_and_classes_available_to_workers – Fearodin

+0

謝謝,有沒有其他方法可以在後臺運行腳本?就像在服務器上執行腳本並返回數據URI一樣? – user2839873