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

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

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

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

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

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

  1. worker.onmessage=function(event)
  2. {
  3.  
  4. //处理收到的消息
  5.  
  6. }

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

worker.postMessage(message);

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

1.前端页面上的JavaScript脚本

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

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

  1. onmessage=function(event){
  2.  
  3. if(event.data=="load")
  4.  
  5. {
  6.  
  7. var xhr=new XMLHtttpRequest();
  8.  
  9. xhr.open("post","ceshi.aspx?type=load");//ceshi.aspx该页面为新建页面,专门处理前端数据传过来后向数据库的增删改查功能;
  10.  
  11. xhr.onreadystatechange=
  12.  
  13. function(){
  14.  
  15. var result=xhr.responseText;
  16.  
  17. if(xhr.readyState==4)
  18.  
  19. {
  20.  
  21. if(result=="数据库连接发生错误!"||event.data=="读取数据失败!")
  22.  
  23. postMessage(result);
  24.  
  25. else
  26.  
  27. {
  28.  
  29. string str="";//处理经过服务端处理过的数据,然后返回前端
  30.  
  31. postMessage(str);
  32.  
  33. }
  34.  
  35. }
  36.  
  37. }
  38.  
  39. xhr.send(null);
  40.  
  41. }
  42.  
  43. }

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

  1. protected void Page_Load(object sender,EventArgs)
  2. {
  3. string type=Request.QueryString["type"].ToString();
  4. if(type.Equals("load"))
  5. {
  6.  
  7. string result="";
  8. using(MemoryStream stream=new MemoryStream())
  9. {
  10. //处理数据
  11. ArrayList dataArray=new ArrayList=new ArrayList();
  12. SerializeArray.WriteObject(stream,dataArray);
  13. result=Encoding.UTF8.GetString(stream.ToArray());
  14. this.WirteReturnStr(result);
  15. }
  16.  
  17. }
  18. }
  1.  

利用web workers实现多线程处理的更多相关文章

  1. JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景

    摘要: 理解Web Workers. 原文:JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...

  2. WijmoJS 使用Web Workers技术,让前端 PDF 导出效率更高效

    概述 Web Workers是一种Web标准技术,允许在后台线程中执行脚本处理. WijmoJS 的2018v3版本引入了Web Workers技术,以便在生成PDF时提高应用程序的运行速度. 一般来 ...

  3. [翻译]Review——How JavaScript works:The building blocks of Web Workers

    原文地址:https://blog.sessionstack.com/how-javascript-works-the-building-blocks-of-web-workers-5-cases-w ...

  4. (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event

    浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核            Trident内核,也是俗称的IE内核Chrome 浏览器内核            统称为 Chromium 内核或 ...

  5. HTML5中的Web Workers

    https://www.cnblogs.com/yanan-boke/p/6954390.html https://segmentfault.com/a/1190000014938305 HTML5 ...

  6. [书籍翻译] 《JavaScript并发编程》第五章 使用Web Workers

    本文是我翻译<JavaScript Concurrency>书籍的第五章 使用Web Workers,该书主要以Promises.Generator.Web workers等技术来讲解Ja ...

  7. JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景

    Web Workers 分类及 5 个使用场景 原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 这是 JavaScript 工作原理的第七章. 本系列 ...

  8. Web Workers

    在 Web Workers 中使用 postMessage 和 onmessage 首先,需要在客户端页面的 JavaScript 代码中 new 一个 Worker 实例出来,参数是需要在另一个线程 ...

  9. html5 Web Workers

    虽然在JavaScript中有setInterval和setTimeout函数使javaScript看起来好像使多线程执行,单实际上JavaScript使单线程的,一次只能做一件事情(关于JavaSc ...

随机推荐

  1. Ubuntu14.04编译Android5.1.1源码

    1.Ubuntu环境配置 硬盘:120G 内存:4G 注:配置很重要,直接影响能否编译成功. 2.安装JDK sudo apt-get update sudo apt-get install open ...

  2. Windows下MySQL配置及安全加固总结

    Windows下MySQL配置及安全加固总结 在网管的实际使用过程中,MySQL数据库在安装后的配置及安全加固内容,在客户中逐渐要求越来越高.从反馈的问题看,一般都是由第三方软件公司的软件扫描整个系统 ...

  3. IOS开发之 -- 线程初识

    对于开发者来说,多线程永远有这一层神秘的色彩,似乎是一到迈步过去的坎,在同步.异步.串行.并行.死锁这几个名字当中,逐渐的放弃治疗,下面就多线程,谈一下自己的认识,理解的肯定不全面,只是一些简单的皮毛 ...

  4. Tomcat unable to start within 45 seconds.

    解决的方法当然是设定这个时间,让其大于45秒,修改在当前项目所在的workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xm ...

  5. select标签设置只读的方法(下拉框不可选但可传值)

    1. <select id="s1" name="s1" onfocus="this.defaultIndex=this.selectedInd ...

  6. 1.1_php基础语法

    一,变量与常量: 二,php中的运算符(字符串拼接): 三,php数组. <!DOCTYPE html> <html> <head> <meta charse ...

  7. quartz定时任务配置

    参考:http://www.cnblogs.com/kay/archive/2007/11/02/947372.html Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quar ...

  8. Less-css基础扩展

    //扩展Extend less的伪类,合并了选择器,放在与它引用匹配的选择器上 Use Method:以在study上扩展test的样式为例 .test{ color:#000000; font-si ...

  9. 【IDEA】项目中引入Spring MVC

    一.原文说明: IntelliJ idea创建Spring MVC的Maven项目 - winner_0715 - 博客园 https://images2015.cnblogs.com/blog/82 ...

  10. Xcode 编译静态库

    有时候,我们需要将一部分经常用到的代码提取出来用来复用,或者说需要用到c++的代码的时候,可以通过编译成静态库的方式来使用.本文中使用的Xcode版本是8.3,静态库制作过程和其他版本基本一样,可能出 ...