Web Workers ialah penyelesaian berbilang benang javascript yang disediakan oleh HTML5 Kami boleh menyerahkan beberapa kod intensif secara pengiraan kepada pekerja web untuk dijalankan tanpa membekukan antara muka pengguna.
1: Cara menggunakan Pekerja
Prinsip asas Web Worker ialah menggunakan kelas Worker untuk memuatkan fail javascript dalam utas utama semasa javascript untuk membuka utas baharu, yang mempunyai kesan pelaksanaan tanpa sekatan dan menyediakan data antara utas utama dan benang baharu. Antara muka yang ditukar: postMessage, onmessage.
Jadi bagaimana untuk menggunakannya, mari lihat contoh:
- //worker.js
- onmessage =fungsi (evt){
- var d = evt.data;//Dapatkan data dihantar melalui evt.data
- postMessage( d );//Hantar data yang diperolehi ke utas utama
- }
Halaman HTML: test.html
- HTML>
- html>
- span gaya="lebar: auto; tinggi: auto; terapung: tiada;" id="20_nwp">a gaya="teks- hiasan: tiada;" mpid="20" sasaran ="_kosong" href="http://cpro.baidu.com/ cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=head&k0=head&kdi0=0&luki=6&n=601&c7 =1&id_penjual=1&sid=45fdcf1cab219561&ssp2= 1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" idid 🎜>"20_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">kepala span>a>span>>
- meta http-equiv=" Jenis Kandungan" kandungan="teks/html; charset=utf-8"/>
- skrip taip="teks/ span style="lebar: auto; ketinggian: auto; terapung: tiada;" id="21_nwp"> a gaya="teks-hiasan: tiada;" mpid="21" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di= . &t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/ 1183.html&urlid=0" id="21_nwl">< ;span gaya="color:#0000ff;font-size:14px;width:auto; height:auto;float:none;">javascriptspan>a>span>">
- //WEB页主线程
- var pekerja =baharu Pekerja("worker.js"); //创建一个Worker对象并向它传递将在新线程中执行的脚本的URL
- pekerja.postMessage("hello world"); //向worker发送数据
- worker.onmessage =fungsi(evt){ //接收worker传过来>的教月span gaya="lebar: auto; tinggi: auto; terapung: tiada ;" id="22_nwp"> a gaya="teks-hiasan: tiada;" mpid="22" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch =0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=����&k0=����&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_4b1=1&seller_id=1&seller_41=1 &stid=0&t=tpclicked3_hc&tu=u1922429&u=http ://www.admin10000.com/document/1183.html&urlid=0" id="22_nwl">span gaya="warna:#0000ff ;font-size:14px;width:auto;height:auto;float:none;">函数 rentang>a>span>
- console.log(evt.span gaya= "lebar: auto; tinggi: auto; terapung: tiada;" id="23_nwp">a gaya="teks-hiasan: tiada;" mpid="23" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=data&k0=data&kdi0=0&luki=4&n=11&p708 eller_id=1&sid=45fdcf1cab219561&ssp2=1&stid= 0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" id= "23_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">dataspan>a>jarak>); //输出worker发送来的数据 }
- skrip>
- kepala>
- badan>badan>
- html>
Selepas membuka test.html dengan penyemak imbas Chrome, konsol mengeluarkan "hello world", menunjukkan bahawa pelaksanaan program berjaya.
Melalui contoh ini kita dapat melihat bahawa menggunakan pekerja web terutamanya dibahagikan kepada bahagian berikut
utas utama WEB:
1. Muatkan fail JS melalui worker = new Worker( url ) untuk mencipta pekerja dan mengembalikan contoh pekerja.
2. Hantar data kepada pekerja melalui kaedah worker.postMessage(data).
3. Ikat kaedah worker.onmessage untuk menerima data yang dihantar oleh pekerja.
4. Anda boleh menggunakan worker.terminate() untuk menamatkan pelaksanaan pekerja.
Urutan baharu pekerja:
1. Hantar data ke utas utama melalui kaedah postMessage(data).
2. Ikat kaedah onmessage untuk menerima data yang dihantar oleh utas utama.
2: Apa yang Pekerja boleh buat
Kini setelah kami tahu cara menggunakan pekerja web, apakah kegunaannya dan apakah masalah yang boleh kami selesaikan. Mari kita lihat contoh urutan fibonacci.
Semua orang tahu bahawa dalam matematik, jujukan fibonacci ditakrifkan secara rekursif: F0=0, F1=1, Fn=F(n-1) F(n-2) (n>=2, n∈N* ), dan pelaksanaan javascript yang biasa ialah:
- var fibonacci =fungsi(n) {
- kembali n };
- //fibonacci(36)
Memandangkan JavaScript dilaksanakan dalam satu urutan, penyemak imbas tidak boleh melaksanakan skrip JavaScript lain semasa proses pengiraan jujukan dan urutan pemaparan UI juga akan digantung, menyebabkan penyemak imbas memasuki keadaan zombi. Menggunakan pekerja web untuk meletakkan proses pengiraan jujukan ke dalam urutan baharu akan mengelakkan situasi ini. Lihat contoh secara khusus:
- //fibonacci.js
- varfibonacci =fungsi(n) {
- kembali n
- };
- onmessage =fungsi(acara) {
- var n = parseInt(event."lebar: auto; tinggi: auto; float: tiada;" id="16_nwp">"text-decoration: none;" mpid="16" target="_blank" ref="http://cpro.baidu ... =0&rs=1&id_penjual= 1&sid =45fdcf1cab219561&ssp2=1&time=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&url=0" id" id" id >"color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">data< ; /span, 10);
- postMessage(fibonacci(n));
- };
HTML Open:fibonacci.html
- HTML>
- html>
- span gaya="lebar: auto; tinggi: auto; terapung: tiada;" id="11_nwp">a gaya="teks- hiasan: tiada;" mpid="11" sasaran ="_kosong" href="http://cpro.baidu.com/ cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=head&k0=head&kdi0=0&luki=6&n=601&c7 =1&id_penjual=1&sid=45fdcf1cab219561&ssp2= 1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" idid 🎜>"11_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">kepala span>a>span>>
- meta http-equiv=" Jenis Kandungan" kandungan="teks/html; charset=utf-8"/>
- tajuk>pekerja web fibonacci tajuk>
- skrip taip="teks/ span style="lebar: auto; ketinggian: auto; terapung: tiada;" id="12_nwp"> a gaya="teks-hiasan: tiada;" mpid="12" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di= . &t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/ 1183.html&urlid=0" id="12_nwl">< ;span gaya="color:#0000ff;font-size:14px;width:auto; height:auto;float:none;">javascriptspan>a>span>">
- memuat =fungsi(){
- var pekerja =baharu Pekerja('fibonacci.js');
- worker.addEventListener('message', function(event) {
- var pemasa2 = (baharu Tarikh()).valueOf();
- console.log( '结果:' acara.span gaya🎜>🎜 ="lebar: auto; tinggi: auto; terapung: tiada;" id="13_nwp" >a gaya=" text-decoration: tiada;" mpid="13" sasaran="_kosong" href="http://cpro.baidu. com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=data&k0=data&kdi0=0&luki=4&n0=10&p=10&n=100 0&rs=1&id_penjual=1&sid= 45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" "13_nwl">span gaya= "warna:#0000ff;font-size:14px;width:auto;height:auto;float:none;">dataspan>a> span>
- , '时间:' pemasa2, '用时:' ( pemasa2 - pemasa ) ); }, salah);
- var pemasa = (baharu Tarikh()).valueOf();
- console.log('开始计算:40','时间:' pemasa );
- setTimeout(function(){
- console.log('定时器span gayaspan gaya>"lebar: auto; tinggi: auto; terapung: tiada;" id="14_nwp" >a gaya="teks-hiasan : tiada;" mpid="14" sasaran="_kosong" href="http://cpro.baidu.com/cpro /ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=��7&k0=��&rb&kdi0=0&luki=2&n=60&c=10&10 =1&seller_id=1&sid=45fdcf1cab219561&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0"0" 🎜>="14_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">函数span>a> },1000);
- worker.postMessage(40);
- console.log('我在计算数列的时候执行了', '时间:' (new Date()).valueOf() );
- }
- skrip>
- span gaya= "lebar: auto; tinggi: auto; terapung: tiada;" id="15_nwp">a gaya="teks -hiasan: tiada;" mpid="15" sasaran="_kosong" href="http://cpro.baidu.com /cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=head&k0=head&kdi0=0&luki=p=0_010&luki=6&n=6101 &rs=1&id_penjual=1&sid=45fdcf1cab219561&ssp2 =1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" id== "15_nwl">span gaya="warna:#0000ff;font-size:14px;width:auto;height:auto;float:none;">kepalaspan>a>< ;/span>>
- badan>
- badan>
- html>
在Chrome中打开fibonacci.html,控制台得到如下输出:
开始计算:50 时🎗:40 时🎗:40计算数列的时候执行了 时间:1316508212734
定时器
- span gaya="lebar: auto; tinggi : auto; terapung: tiada;" id="9_nwp">a gaya="teks-hiasan: tiada;" mpid="9" sasaran=" _blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id =0&c=berita&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=����&k0=����&kdi0=0&luki=2&n=10&p=baidu&q=06011078&s=06011078_06011078 1cab219561&ssp2=1&stid=0&t =tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" id=> 9_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">函数 span>a>span>
在计算数列时执行了 时间:1316508213735
结果:102334155 时间:13165082628201: 这个例子说明在worker中执行的fibonacci数列的计算并不会影响到主线程的代猁数列的计算并不会影响到主线程的代猁,有猁立的线程中计算,只是在计算完成之后将结果发回主线程。
利用 web worker我们可以在前端执行一些复杂的大量运算而不会影响页面的年页睢恶心的脚本正忙提示。
下面这个例子使用了 web worker来计算场景中的像素,场景打开时是一片一一一片计算一块像素值。
http://nerget.com/rayjs-mt/rayjs.html
三:Pekerja的其他尝试
下面这个例子将通过 web worker、jsonp、ajax三种不同的方式来加载一个169.42KB🌈169.42KB
- // /aj/webWorker/core.js
- fungsi $E(id) {
- kembali document.getElementById(id);
- }
- onload =fungsi() {
- //通过pekerja web加载
- $E('workerLoad').onclick =fungsi() {
- var url ='http://js.wcdn.cn/aj/mblog/face2' ;
- var d = (baharu Tarikh()).valueOf();
- var pekerja =baharu Pekerja(url);
- worker.onmessage =fungsi(obj) {
- console.log('pekerja web: ' ((baharu Tarikh()).nilai Of - d));
- };
- };
- //通过jsonp加载
- $E('jsonpLoad').onclick =fungsi() {
- var url ='http://js.wcdn.cn/aj/mblog/face1' ;
- var d = (baharu Tarikh()).valueOf();
- STK.core.io.scriptLoader({
- kaedah:'siaran',
- url : url,
- selesai : fungsi() {
- console.log('jsonp: ' ((baharu Tarikh()) nilai d));
- }
- });
- };
- //通过ajax加载
- $E('ajaxLoad').onclick =fungsi() {
- var url ='http://js.wcdn.cn/aj/mblog/face' ;
- var d = (baharu Tarikh()).valueOf();
- STK.core.io.ajax({
- url : url,
- di Selesai : fungsi(json) {
- console.log('ajax: ' ((baharu Tarikh()) nilai d));
- }
- });
- };
- };
HTML页面:/aj/webWorker/worker.html
- HTML>
- html>
- span gaya="lebar: auto; tinggi: auto; terapung: tiada;" id="4_nwp">a gaya="teks- hiasan: tiada;" mpid="4" sasaran ="_kosong" href="http://cpro.baidu.com/ cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=619521ab1ccffd45&k=head&k0=head&kdi0=0&luki=6&n=601&c7 =1&id_penjual=1&sid=45fdcf1cab219561&ssp2= 1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/1183.html&urlid=0" idid 🎜>"4_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">kepala span>a>span>>
- meta http-equiv=" Jenis Kandungan" kandungan="teks/html; charset=utf-8"/>
- tajuk>Contoh pekerja: muat span gaya="lebar: auto; tinggi: auto; terapung: tiada;" id="5_nwp">aa 🎜> gaya="teks-hiasan: tiada;" mpid= "5" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk =619521ab1ccffd45&k=data&k0=data&kdi0=0&luki=4&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=45fdcf1cab219561&ssp20=t=u 429&u=http://www.admin10000.com/document/1183.html&urlid=0 " id="5_nwl">span gaya="color:#0000ff;font-size:14px;width:auto;height:auto;float :tiada;">dataspan>< ;/a>span> tajuk>
- skrip src="http: //js.t.sinajs.cn/STK/js/gaea.1.14.js" taip="text/< ;span style="lebar: auto; ketinggian: auto; terapung: tiada;" id="6_nwp"> a gaya="teks-hiasan: tiada;" mpid="6" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di= . &t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/ 1183.html&urlid=0" id="6_nwl">< ;span gaya="color:#0000ff;font-size:14px;width:auto; height:auto;float:none;">javascriptspan>a>span>">skrip>
- skrip taip="teks/ javascript" src="http://js.wcdn.cn/aj/webWorker/core.js" >skrip>
- kepala>
- badan>
- input taip="butang" id="beban pekerja" nilai="pekerja web加载">input>
-
input taip="butang" id="jsonpLoad" nilai="jsonp加载">input>>
- input taip="butang" id="span style="lebar: auto; ketinggian: auto; float: tiada;" id="7_nwp"> a gaya="teks-hiasan: tiada;" mpid="7" sasaran="_kosong" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di= . d=0&t=tpclicked3_hc&tu=u1922429&u=http://www.admin10000.com/document/ 1183.html&urlid=0" id="7_nwl">< ;span gaya="color:#0000ff;font-size:14px;width:auto; height:auto;float:none;">ajaxspan>a>span>Muat" nilai="ajax加载">masukan>
- badan>
- html>
设置HOST
Nachdem ich es mehrmals versucht hatte, stellte ich fest, dass die Zeit zum Laden von Daten über JSONP und Ajax nicht viel unterschiedlich ist und die Ladezeit von Web Worker immer auf einem hohen Niveau war, sodass die Verwendung von Web Worker zum Laden von Daten immer noch relativ ist langsam, selbst bei großen Datenmengen. Es kann sein, dass es einige Zeit dauert, bis Worker neue Threads initialisiert. Es gibt keinen anderen Vorteil, als dass es beim Laden nicht blockiert.
Kann Web Worker das domänenübergreifende Laden von JS unterstützen? Dieses Mal greifen wir über http://127.0.0.1/aj/webWorker/worker.html auf die Ladeschaltfläche „Web Worker laden“ zu Download Es erfolgt keine Antwort und unter FF6 wird ein Fehler angezeigt. Daraus können wir erkennen, dass Web Worker das domänenübergreifende Laden von JS nicht unterstützt, was eine schlechte Nachricht für Websites ist, die statische Dateien auf einem separaten statischen Server bereitstellen.
Web Worker kann also nur zum Laden von JSON-Daten in derselben Domäne verwendet werden, Ajax kann dies jedoch bereits und ist effizienter und vielseitiger. Lassen Sie den Arbeiter tun, was er gut kann.
Viertens: Zusammenfassung
Web-Worker sehen nett aus, sind aber voller Teufel.
Was wir tun können:
1. Sie können einen JS laden, um eine große Anzahl komplexer Berechnungen durchzuführen, ohne den Hauptprozess hängen zu lassen, und über postMessage und onmessage kommunizieren
2. Sie können über importScripts(url)
zusätzliche Skriptdateien in den Worker laden3. Sie können setTimeout(), clearTimeout(), setInterval() und clearInterval()
verwenden4. Sie können XMLHttpRequest verwenden, um Anfragen zu senden
5. Kann auf einige Eigenschaften des Navigators zugreifen
Was sind die Einschränkungen:
1. JS kann nicht domänenübergreifend geladen werden
2. Der Code im Worker kann nicht auf das DOM zugreifen
3. Die Implementierung von Worker in verschiedenen Browsern ist nicht konsistent. FF erlaubt beispielsweise die Erstellung neuer Worker, Chrome jedoch nicht
4. Nicht jeder Browser unterstützt diese neue Funktion
html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5废弃了dir列表标签。dir标签被用来定义目录列表,一般和li标签配合使用,在dir标签对中通过li标签来设置列表项,语法“<dir><li>列表项值</li>...</dir>”。HTML5已经不支持dir,可使用ul标签取代。

3种取消方法:1、给td元素添加“border:none”无边框样式即可,语法“td{border:none}”。2、给td元素添加“border:0”样式,语法“td{border:0;}”,将td边框的宽度设置为0即可。3、给td元素添加“border:transparent”样式,语法“td{border:transparent;}”,将td边框的颜色设置为透明即可。

因为html5不基于SGML(标准通用置标语言),不需要对DTD进行引用,但是需要doctype来规范浏览器的行为,也即按照正常的方式来运行,因此html5只需要写doctype即可。“!DOCTYPE”是一种标准通用标记语言的文档类型声明,用于告诉浏览器编写页面所用的标记的版本。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini