利用web workers实现多线程处理

 利用web workers在后台线程中实现对数据库的增删改查操作,并在后台线程中生成页面上某个列表的完整的HTML代码,然后再前台脚本中直接将这段HTML代码输出到页面上!

    利用web workers可以实现无刷新的更新界面,而且还可以多线程处理其它功能,不必等到后台服务器代码执行完后才能在页面上执行下一步操作。有人会问AJAX也可以实现无刷新更新页面,但是如果在后台服务器端执行代码耗时较长,页面就会停止在不能操作的状态,如果拖过页面,可能会造成页面假死的状态。

   利用web workers API创建后台线程:

   1.将后台执行的脚本文件的URL地址作为worker的参数,在后台线程中不能访问页面或窗口对象。如果在后台程序中包含window或是document对象,就会引发错误。

     var worker=new worker("worker.js");

   2.在后台线程中接收消息,利用worker对象的onmessage事件句柄获取消息;

    

 worker.onmessage=function(event)
    {

      //处理收到的消息

    }

 

  3.利用worker对象的postmessage方法想后台线程发送消息;发送消息是文本数据,也可以是任何的JavaScript对象(需要通过JSON对象的stringify方法将其转换成文本数据)

       worker.postMessage(message);

   下面讲述一个实例,更好的阐述web workers的实现过程:

     1.前端页面上的JavaScript脚本 

    

function windowOnLoad()
      {
         var worker=new worker("bgwork.js");//其中bgwork.js为后台线程运行的脚本文件
         worker.postMessage("load");//post为发送消息的文本数据 或是 data=new object(); worker.postMessage(JSON.stringify(data));//post为发送消息的文本数据
         worker.onmessage=function(event)
         {
           if(event.data=="数据库连接发生错误!"||event.data=="读取数据失败!")
           {
             alert(event.data);
           } 
           else
           {
              //处理返回回来的数据
           }
        }
    }

 

   2.在后台线程中运行的JavaScript脚本

     

 onmessage=function(event){

        if(event.data=="load")

         { 

             var xhr=new XMLHtttpRequest();

             xhr.open("post","ceshi.aspx?type=load");//ceshi.aspx该页面为新建页面,专门处理前端数据传过来后向数据库的增删改查功能;

            xhr.onreadystatechange=

           function(){

               var result=xhr.responseText;

               if(xhr.readyState==4)

              {

                      if(result=="数据库连接发生错误!"||event.data=="读取数据失败!")

                             postMessage(result);

                     else

                       {

                         string str="";//处理经过服务端处理过的数据,然后返回前端

                          postMessage(str);

                        }

               }

          }

            xhr.send(null);

         }

    }

 

    3.在ceshi.aspx页面处理数据

      

protected void Page_Load(object sender,EventArgs)
  {
    string type=Request.QueryString["type"].ToString();
    if(type.Equals("load"))
    {
      
      string result="";
      using(MemoryStream stream=new MemoryStream())
      { 
      //处理数据
       ArrayList dataArray=new ArrayList=new ArrayList();
       SerializeArray.WriteObject(stream,dataArray);
       result=Encoding.UTF8.GetString(stream.ToArray());
       this.WirteReturnStr(result);
      }
      
    }
  }

 

 

转载于:https://www.cnblogs.com/xiaolifeidao/p/3706673.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值