HTML5(四)——Web Workers

HTML5(四)——Web Workers,第1张

JavaScript 语言是采用单线程模型,也就是任务只能在一个线程上完成,一次只能做一件事,前面任务没执行完,后面的任务只能排队等待,由于多核 CPU 的出现,单线程带来很大不便,无法充分发挥计算机的能力。

Web Worker 就是为了 javascript 创造多线程而生的,主线程创建 worker 子线程,将一些任务分配给后台运行,等到子线程完成计算任务,再把结果返回给主线程,好处是计算密集型或高延迟的任务被 worker 负担了,主线程就会很流畅。网页加载展示可分为两部分:主进程也叫 UI 进程,子进程也叫工作进程,子进程不能控制 UI 进程,只能进行数据交互。

Web Worker 子线程一旦创建成功,就会独立于其他脚本始终运行,不会被主线程上活动打断。这样有利于随时响应主线程的通信。但是这也造成 Worker 比较耗费资源,不应该过度使用,使用完毕之后应该关闭。

使用 Web Worker 注意点:

2.1 创建Worker线程:

创建worker之前,先检查浏览器是否支持它。使用 typeof 检查,代码如下:

检查浏览器支持 worker 之后,主线程使用 new 命令,调用 worker() 构造函数,新建 Worker 线程。

构造函数的参数是一个脚本文件,该文件不能是本地文件,必须来自网络脚本,该文件就是Worker 线程要执行的任务。如果该文件加载失败,Worker 就会失败。

2.2 主线程与子线程数据通信:

主线程调用 postMessage() 方法,向 Worker 发消息。postMessage(参数) 方法中参数就是传给 Worker 的数据,这个数据可以是任意格式。

紧接着 Worker 线程,通过 onmessage 指定监听函数,接收消息。worker.js 代码如下:

worker子进程收到消息之后,可以继续向主进程发送消息,使用 postMessage()。代码如上。

主进程也通过onmessage监听函数接收消息。

2.3 Worker线程

Worker线程内部,添加 this.onmessage 监听函数,其中 this 是子线程的全局对象,也可以替换成 self,self 代表子线程本身。等同于:

除了使用 self.onmessage 指定监听函数,也可以使用 this.addEventListener() 监听事件对象。上述 worker.js 代码可改为:

2.4 错误处理

主线程可以监听Worker是否发生错误,如果发生错误,Worker 会触发主线程的 error 事件。

worker 子线程也可以监听 error 事件。

2.5 关闭 Worker

Worker 比较耗费资源,不应该过度使用,使用完毕之后应该关闭。主线程和子线程都可以关闭。

通常情况下,Worker 载入的是一个单独的 javascript 文件,但是也可以载入与主线程在同一个网页的代码。网页中添加 Worker 脚本,必须注意指定script标签的type属性是一个浏览器不认识的值,否则就会失去意义。如:

然后,需要读取这段代码,先将嵌入网页的脚本代码转成二进制对象,然后为这个二进制对象生成url,再让worker加载url,这样就实现了主进程和worker在同一个网页内。代码如下:

Worker构造函数方法:

子进程属性方法:

Worker() 构造函数,可以接受两个参数,第一个是脚本的地址,第二个是参数是配置对象,该对象指定Worker的名称。如:

HTML5记录

一、VS code引入插件后运行,终端执行

二、引入外部js文件:

1、js的exports.a = a;方式暂时不知道怎么做

2、直接引入,script之后可以直接使用。参照html-vue项目

3、数据类型

String、Number、Boolean、Null、undefined、symbol、Object、Array、Function

三、 JS显示数据方式:

window.alert()

document.write()

innerHTML=‘’

console.log()

四、 let、const、var

https://www.runoob.com/js/js-let-const.html

五、全局变量、局部变量注意点

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

六、事件:

https://www.runoob.com/jsref/dom-obj-event.html

onchange、onclick、onmouseover、onmouseout、onkeydown、onload…

html dom onclick之类的直接使用,vue是@click,小程序是bindTap

七、 this关键字:

1、在对象方法中, this 指向调用它所在方法的对象。

2、单独使用 this,它指向全局(Global)对象。

3、函数使用中,this 指向函数的所属者。

4、严格模式下函数是没有绑定到 this 上,这时候 this 是 undefined。

5、在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。

6、apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象。

八、 箭头函数:

1、有的箭头函数都没有自己的 this 。 不适合定义一个 对象的方法。

2、当我们使用箭头函数的时候,箭头函数会默认帮我们绑定外层 this 的值,所以在箭头函数中 this 的值和外层 的 this 是一样的。

3、箭头函数是不能提升的,所以需要在使用之前定义。

4、使用 const 比使用 var 更安全,因为函数表达式始终是一个常量。

九、闭包:

闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰。

直观的说就是形成一个不销毁的栈环境。

闭包会持有父方法的局部变量和参数并且不会随父方法销毁而销毁

不必要的闭包只会增加内存消耗

十、 事件

body事件:onload、onunload

元素事件:onclick、onmouseover、onmouseout、onmousedown、onmouseup、onfocus

事件捕获

document.getElementById(‘demo’).addEventListener(‘事件名’, 方法名, 是否捕获传递)

方法名:如果是相应事件,则只可写方法名methodName,写成methodName()则会自动执行

如果方法需要传递参数,则只可以使用匿名函数, function( { methodName(p1, p2) } )

是否捕获传递:默认false,即冒泡传递

IE8和更早版本: x.attachEvent("onclick", myFunction)

十一、Window加载,页面声明周期入口

window.onload = function () { }

十二、数据存储

localStorage不会被自动删除,

sessionStorage 网页关闭会自动删除

cookie

sql

manifest文件

区别:

localStorage只要在相同的协议、相同的主机名、相同的端口下,就能读取/修改到同一份localStorage数据。

sessionStorage比localStorage更严苛一点,除了协议、主机名、端口外,还要求在同一窗口(也就是浏览器的标签页)下。

十三、 CSS声明权重(选择器)

内联>ID>伪类>属性>类>元素/类型>通用

!important会改变优先级

十四、 元素隐藏/显示

1、dispatch:none 隐藏 不占用空间

2、visibility:hidden 隐藏,仍然占用空间

3、v-if 存在/不存在

4、v-show 只生成一次,占用内存

十五、 Position

static 默认方式,没有定位

fixed 相对于浏览器窗口固定定位,不占用文档流,其他元素会相对位移

absolute 相对于最近的已定位父元素定位,不占用文档流,其他元素会相对位移

relative 相对于自身的定位

sticky 粘滞定位,基于用户的滚动位置定位

十六、 float

1、只能左右浮动

2、左右浮动,直到外边缘碰到另一个浮动元素

3、浮动之后的元素将围绕它

4、浮动之前的元素不受影响

5、如果是图像浮动,下面的文本流将环绕它

6、clear声明的元素, 属性指定元素两侧不能出现浮动元素。

推荐使用flex布局

十七、 文字显示…

单行

任意行

十八、 box-shadow顺序

十九、 flex布局 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

容器属性:

属性 / 说明可选值

f方向: lex-direction

换行:flex-wrap

简写:flex-flow

主轴上的对齐方式:justify-content

交叉轴上如何对齐:align-items

多根轴线的对齐方式:align-content。

如果项目只有一根轴线,该属性不起作用

项目item属性:

order:排列顺序,越小越靠前

flex-grow:放大比例,2比1占用的空间大一倍

flex-shrink:缩小比例,默认1,当空间不足时等比例缩小。如果一个项目的属性为0,其他项目都为1,则空间 不足时,前者不缩小

flex-basis:定义了在分配多余空间之前,项目占据的主轴空间

flex :简写

align-self:允许单个项目与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7441863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存