웹 작업자 처리 루틴

3187 단어
index.html:
       
<!DOCTYPE html>
<html>
<head>
    <title>webworker</title>
</head>
<body>
<input type="text" name="number" id="number"/>
<input type="submit" value="add" id="submit"/>
<div id="result"></div>
</body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script src="js/script.js" type="text/javascript"></script>
</html>

script.js: 주 스레드
/**
 * Created by keejun on 13-12-17.
 */
$(document).ready( function(){
        $("#submit").click(function(){
             var number=$("#number").val();
             if(number){
                 var worker = new Worker("js/maths.js");
                 worker.postMessage(number);
                 worker.onmessage=function(e){
                        if(e.data!=""){
                             var span=document.createElement("span");
                             span.innerHTML= e.data;
                             var br=document.createElement("br");
                             document.getElementById("result").appendChild(span);
                             document.getElementById("result").appendChild(br);
                     }
                     else{
                         console.log("no datas!");
                         return false;
                     }
                 }
                worker.onerror=function(e){
                        alert(e.message+":"+ e.lineNumber);
                        throw e;
                 }
             }
             else{
                 console.log("no numbers");
                 return false ;
             }
            }
        )
    }
)

주:script.js , maths.js,inner.js 파일 아래
maths.js: 먼저 모든 수의 합을 계산하고 데이터를 다른 하위 라인에 보내서 진일보한 처리를 합니다.
/**
 * Created by keejun on 13-12-17.
 */
 onmessage=function(event){
        var data=event.data;
        var sum =0;
        for(var j= 0;j<data;j++){
              sum+=j;
         }
       var worker = new Worker("js/inner.js");
       var str;
       worker.onmessage=function(event){
           if(event.data==1){
                  str=1;
             }
          else{
                  str=0;
              }
      }
     worker.postMessage(sum);
     postMessage(str);
 }

inner.js: 3 제거 여부 판단
/**
 * Created by keejun on 13-12-17.
 */
 onmessage=function(event){
         var data=event.data;
         var flag;
         if(data%3==0){
               flag=1;
          }
         else{
               flag=0;
          }
         postMessage(flag);
 }

     
테스트는 Firefox에서 통과할 수 있습니다. 크롬이 html5 웹 플러그인 웹worker에 버그가 존재하기 때문입니다.
관련 자료:https://code.google.com/p/chromium/issues/detail?id=31666  
                  http://stackoverflow.com/questions/9259251/unable-to-create-web-worker-from-inside-webworker-in-chrome

좋은 웹페이지 즐겨찾기