HTML5学习,常用常记(Web Worker,服务器发送事件,其他功能)

el/2024/5/23 1:31:12

什么是 Web Worker?

  • 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。
  • web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。
<p>计数: <output id="result"></output></p>
<button onclick="startWorker()">开始工作</button> 
<button onclick="stopWorker()">停止工作</button>
<p><strong>注意:</strong> Internet Explorer 9 及更早 IE 版本浏览器不支持 Web Workers.</p>
<script>
var w;
function startWorker() {if(typeof(Worker) !== "undefined") {if(typeof(w) == "undefined") {w = new Worker("demo_workers.js");}w.onmessage = function(event) {document.getElementById("result").innerHTML = event.data;};} else {document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 Web Workers...";}
}
function stopWorker() { w.terminate();w = undefined;
}
</script>

demo_workers.js 文件代码:

var i=0;function timedCount(){i=i+1;postMessage(i);setTimeout("timedCount()",500);
}timedCount();

postMessage() 方法 - 它用于向 HTML 页面传回一段消息。

注意: web worker 通常不用于如此简单的脚本,而是用于更耗费 CPU 资源的任务。

向 web worker 添加一个 "onmessage" 事件监听器。

终止 Web Worker

  • 当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。
  • 如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:w.terminate();

Web Workers 和 DOM

由于 web worker 位于外部文件中,它们无法访问下列 JavaScript 对象:

  • window 对象
  • document 对象
  • parent 对象

HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。

Server-Sent 事件 - 单向消息传递

  • Server-Sent 事件指的是网页自动获取来自服务器的更新。
  • 以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。
  • 例子:Facebook/Twitter 更新、股价更新、新的博文、赛事结果等。

EventSource 对象用于接收服务器发送事件通知:

<h1>获取服务端更新数据</h1>
<div id="result"></div><script>
if(typeof(EventSource)!=="undefined"){var source=new EventSource("demo_sse.php");source.onmessage=function(event){document.getElementById("result").innerHTML+=event.data + "<br>";};
}else{document.getElementById("result").innerHTML="抱歉,你的浏览器不支持 server-sent 事件...";
}
</script>

实例解析:

  • 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demo_sse.php")
  • 每接收到一次更新,就会发生 onmessage 事件
  • 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中

服务器端代码实例

  • 为了让上面的例子可以运行,您还需要能够发送数据更新的服务器(比如 PHP 和 ASP)。
  • 服务器端事件流的语法是非常简单的。把 "Content-Type" 报头设置为 "text/event-stream"。现在,您可以开始发送事件流了。

实例

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); $time = date('r'); 
echo "data: The server time is: {$time}\n\n"; 
flush(); 
?>

ASP 代码 (VB) (demo_sse.asp):

<%
Response.ContentType="text/event-stream"
Response.Expires=-1
Response.Write("data: " & now())
Response.Flush()
%>

代码解释:

  • 把报头 "Content-Type" 设置为 "text/event-stream"
  • 规定不对页面进行缓存
  • 输出发送日期(始终以 "data: " 开头)
  • 向网页刷新输出数据

EventSource 对象

在上面的例子中,我们使用 onmessage 事件来获取消息。不过还可以使用其他事件:

事件描述
onopen当通往服务器的连接被打开
onmessage当接收到消息
onerror当发生错误

其他优秀功能,但感觉用不到:

HTML5 WebSocket;

HTML5 测验;

HTML(5) 代码规范;


http://www.ngui.cc/el/2274567.html

相关文章

JAVA概述(知到课程 + 菜鸟教程随笔)

一次编写&#xff0c;处处运行&#xff1b; 字节码文件&#xff0c;JAVA虚拟机&#xff1b; 面向对象&#xff0c;封装继承多态&#xff0c;多线程&#xff1b; JAVA 2se桌面开发低端商务应用 1ee企业 3me消费产品和嵌入式设备&#xff1b; jar.exe打包java文件&#xff0c…

JAVA学习,常用常记(基础语法,标识符,修饰符,关键字,注释(菜鸟教程))

Java 基础语法 一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c…

JAVA学习,常用常记(标识符,数据类型,运算符,分支语句,循环语句,跳转语句(知到))

呃&#xff0c;学过C和Python之后直接过掉就好了&#xff0c;自己拼的标识符一般不会搞出关键字的&#xff1b; 所有语言中&#xff08;我接触到的&#xff09;&#xff0c;html css不区分大小写&#xff0c;其他语言区分大小写&#xff08;对大小写敏感&#xff09;&#xf…

JAVA学习,常用常记(基本数据类型补充(包装类,min,max),转义,三种变量类型,静态成员函数和类变量(菜鸟教程补充))

Java 的两大数据类型: 内置数据类型引用数据类型 public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型&#xff1a;byte 二进制位数&#xff1a;" Byte.SIZE); System.out.println("包装类…

JAVA学习,常用常记(运算符,增强for循环(菜鸟教程补充))

instanceof 运算符 该运算符用于操作对象实例&#xff0c;检查该对象是否是一个特定类型&#xff08;类类型或接口类型&#xff09;。 如果运算符左侧变量所指的对象&#xff0c;是操作符右侧类或接口(class/interface)的一个对象&#xff0c;那么结果为真。 String name &…

JAVA学习,常用常记(类和对象,构造方法,方法重载,类变量,this,垃圾回收机制,静态代码块(菜鸟教程+知到))

对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&#xff1a;颜色、名字、品种&#xff1b;行为有&#xff1a;摇尾巴、叫、吃等。类&#xff1a;类是一个模板&#xff0c;它描述一类对象的状态&#xf…

JAVA学习,常用常记(封装性,不可变对象,UML类图及关系(知到))

封装&#xff1a;将类的某些信息隐藏在类内部&#xff0c;不允许外部程序直接访问&#xff0c;而是通过该类提供的方法来实现对隐藏信息的操作和访问。 高内聚&#xff0c;低耦合 比较好&#xff1b; 耦合度高了之后会 牵一发而动全身&#xff1b; 封装性&#xff0c;安全性&a…

CSS概述(学习菜鸟教程随笔)

使用 CSS 同时控制多重网页的样式和布局&#xff1b; HTML/CSS/JS在线工具&#xff1b; 什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题外部…

CSS学习,常用常记(选择器,样式表,设置背景)

id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义。ID属性不要以数字开头&#xff0c;数字开头的ID在 Mozilla/Firefox 浏览器中不起作用。 <!DOCTYPE html> <html> &…

CSS学习,常用常记(文本,字体,链接)

body {color:red;} 对于W3C标准的CSS&#xff1a;如果你定义了颜色属性&#xff0c;你还必须定义背景色属性。 文本的对齐方式 文本排列属性是用来设置文本的水平对齐方式。文本可居中或对齐到左或右,两端对齐.当text-align设置为"justify"&#xff0c;每一行被展…