摘要:?jiǎn)尉€程與瀏覽器多線程是單線程的因?yàn)檫\(yùn)行在瀏覽器中,是單線程的,每個(gè)一個(gè)線程。若以多線程的方式操作這些,則可能出現(xiàn)操作的沖突。零延遲零延遲并不是意味著回調(diào)函數(shù)立刻執(zhí)行。異步編程的中方法包括回調(diào)函數(shù)事件監(jiān)聽采用事件驅(qū)動(dòng)模式。
JavaScript單線程與瀏覽器多線程
Javascript是單線程的:因?yàn)镴S運(yùn)行在瀏覽器中,是單線程的,每個(gè)window一個(gè)JS線程。作為瀏覽器腳本語(yǔ)言,JavaScript的主要用途是與用戶互動(dòng),以及操作DOM。若以多線程的方式操作這些DOM,則可能出現(xiàn)操作的沖突。假設(shè)有兩個(gè)線程同時(shí)操作一個(gè)DOM元素,線程1要求瀏覽器刪除DOM,而線程2卻要求修改DOM樣式,這時(shí)瀏覽器就無法決定采用哪個(gè)線程的操作。
瀏覽器不是單線程的,引擎可能存在如下線程:
javascript引擎線程
界面渲染線程
瀏覽器事件觸發(fā)線程
Http請(qǐng)求線程等
Event Loop事件循環(huán)機(jī)制:
主線程從"任務(wù)隊(duì)列"中讀取事件,這個(gè)過程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為Event Loop(事件循環(huán))。主線程運(yùn)行的時(shí)候,產(chǎn)生堆(heap)和棧(stack),棧中的代碼調(diào)用各種外部API,它們?cè)?任務(wù)隊(duì)列"中加入各種事件(click,load,done)。只要棧中的代碼執(zhí)行完畢,主線程就會(huì)去讀取"任務(wù)隊(duì)列",依次執(zhí)行那些事件所對(duì)應(yīng)的回調(diào)函數(shù)。
執(zhí)行棧:所有同步任務(wù)都在主線程上執(zhí)行,形成一個(gè)執(zhí)行棧;
任務(wù)隊(duì)列:主線程之外,還存在一個(gè)"任務(wù)隊(duì)列"(task queue)。只要異步任務(wù)有了運(yùn)行結(jié)果,就在"任務(wù)隊(duì)列"之中放置一個(gè)事件,當(dāng)棧為空時(shí),就會(huì)從任務(wù)隊(duì)列中取出一個(gè)任務(wù)并執(zhí)行。
定時(shí)器:
定時(shí)器包括setTimeout與setInterval兩個(gè)方法。它們的第二個(gè)參數(shù)是指定其回調(diào)函數(shù)推遲每隔多少毫秒數(shù)后執(zhí)行。
零延遲 setTimeout(func, 0):零延遲并不是意味著回調(diào)函數(shù)立刻執(zhí)行。它取決于主線程當(dāng)前是否空閑與“任務(wù)隊(duì)列”里其前面正在等待的任務(wù)。當(dāng)計(jì)時(shí)器時(shí)間規(guī)定的時(shí)候,回調(diào)函數(shù)會(huì)被添加到“任務(wù)隊(duì)列”中,等到執(zhí)行棧的任務(wù)執(zhí)行完畢,就會(huì)來執(zhí)行這里的任務(wù)。所以,有的時(shí)候即使計(jì)時(shí)器已經(jīng)到0了,也會(huì)不立即執(zhí)行計(jì)時(shí)器中的回調(diào)任務(wù)。
Ajax異步請(qǐng)求:
在發(fā)起ajax請(qǐng)求的時(shí)候,瀏覽器會(huì)開一個(gè)線程去執(zhí)行這一步驟,發(fā)請(qǐng)求這一步是屬于執(zhí)行棧中的同步任務(wù),在請(qǐng)求發(fā)完之后就會(huì)執(zhí)行棧中的下一個(gè)任務(wù),而等到請(qǐng)求有了結(jié)果,就會(huì)把結(jié)果放入“任務(wù)隊(duì)列”中,等待執(zhí)行;
JavaScript是單線程的,所謂“單線程”,就是同一時(shí)間只能執(zhí)行一個(gè)任務(wù)。如果有多個(gè)任務(wù),就必須排隊(duì),直到前一個(gè)任務(wù)完成。這種模式的好處就是實(shí)現(xiàn)比較簡(jiǎn)單,尤其在瀏覽器環(huán)境中,可以避免很多不必要的麻煩。壞處就是如果一個(gè)任務(wù)耗時(shí)很長(zhǎng),那么該任務(wù)后面的任務(wù)就必須一直等待,導(dǎo)致整個(gè)頁(yè)面都卡住無法繼續(xù)往下執(zhí)行。
為了解決這個(gè)問題,JavaScript將任務(wù)的執(zhí)行模式分為兩類,一個(gè)是同步模式,另一個(gè)是異步模式。
"同步模式"就是上一段的模式,后一個(gè)任務(wù)等待前一個(gè)任務(wù)結(jié)束,然后再執(zhí)行,程序的執(zhí)行順序與任務(wù)的排列順序是一致的、同步的;"異步模式"則完全不同,每一個(gè)任務(wù)有一個(gè)或多個(gè)回調(diào)函數(shù)(callback),前一個(gè)任務(wù)結(jié)束后,不是執(zhí)行后一個(gè)任務(wù),而是執(zhí)行回調(diào)函數(shù),后一個(gè)任務(wù)則是不等前一個(gè)任務(wù)結(jié)束就執(zhí)行,所以程序的執(zhí)行順序與任務(wù)的排列順序是不一致的、異步的。
JS異步編程的4中方法包括:
回調(diào)函數(shù):
f1(); f2(); function f1(callback){ setTimeout(function(){ callback(); }) } f1(f2);
事件監(jiān)聽:采用事件驅(qū)動(dòng)模式。任務(wù)的執(zhí)行不取決于代碼的順序,而取決于某個(gè)事件是否發(fā)生。
//jQuery f1.on("done", f2); function f1(){ setTimeout(function () { //do something f1.trigger("done");//執(zhí)行完成后,立即觸發(fā)done事件,從而開始執(zhí)行f2。 }, 1000); }
發(fā)布/訂閱:又稱觀察者模式
jQuery.subscribe("done", f2);//訂閱"done"這個(gè)信號(hào) function f1(){ setTimeout(function () { //do something jQuery.publish("done");//f1()執(zhí)行完之后,發(fā)出"done"這個(gè)信號(hào),f2開始執(zhí)行 }, 1000); } jQuery.unsubscribe("done", f2);//取消訂閱
Promises:ES6原生提供了Promise對(duì)象。所謂Promise對(duì)象,就是代表了未來某個(gè)將要發(fā)生的事件(通常是一個(gè)異步操作)。它的好處在于,有了Promise對(duì)象,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。此外,Promise對(duì)象還提供了一整套完整的接口,使得可以更加容易地控制異步操作。
var promise = new Promise(function(resolve, reject) { if (/* 異步操作成功 */){ resolve(value); } else { reject(error); } }); promise.then(function(value) { // success }, function(value) { // failure });ES6模塊管理
ECMAScript 6基于export和import,定義了模塊的導(dǎo)出和導(dǎo)入規(guī)范,在語(yǔ)言標(biāo)準(zhǔn)層面實(shí)現(xiàn)了模塊機(jī)制。該標(biāo)準(zhǔn)的目標(biāo)是創(chuàng)建一種能夠兼容CommoneJS和AMD兩標(biāo)準(zhǔn)的規(guī)范,即可以像CommoneJS一樣語(yǔ)法簡(jiǎn)潔、使用單一的接口且支持循環(huán)依賴,又可以像AMD支持異步加載和可配置的模塊加載。
大致來說,當(dāng) JS 引擎運(yùn)行一個(gè)模塊的時(shí)候,它的行為大致可歸納為以下四步:
解析:引擎實(shí)現(xiàn)會(huì)閱讀模塊的源碼,并且檢查是否有語(yǔ)法錯(cuò)誤。
加載:引擎實(shí)現(xiàn)會(huì)(遞歸地)加載所有被引入的模塊。
鏈接:引擎實(shí)現(xiàn)會(huì)為每個(gè)新加載的模塊創(chuàng)建一個(gè)作用域,并且將模塊中的聲明綁定填入其中,包括從其他模塊中引入的。
JS加載動(dòng)態(tài)加載常用的4種方法:
document.write:document.write("");
動(dòng)態(tài)改變已有script的src屬性:js.src = "package.js";
動(dòng)態(tài)創(chuàng)建script元素:
var script = document.createElement("script"); script.src = "XXX"; script.type = "XXX"; document.head.appendChild(script);
用XMLHTTP取得要腳本的內(nèi)容,再創(chuàng)建 Script 對(duì)象。
項(xiàng)目中加載JS的方法:
在頁(yè)面底部寫一個(gè)自調(diào)用函數(shù),加載入口JS,然后入口中的方法執(zhí)行,加載需要的其他JS。
在VM平臺(tái)上,可以選擇將幾個(gè)模塊分組打包到一個(gè)入口文件中,然后在這個(gè)入口文件中,將每個(gè)組動(dòng)態(tài)生成一個(gè)script標(biāo)簽,插入head中。
異步加載:
瀏覽器在渲染一個(gè)頁(yè)面的時(shí)候,遇到一個(gè)標(biāo)簽就會(huì)去下載對(duì)應(yīng)的js文件,如果采用同步加載JS的方式,會(huì)造成頁(yè)面阻塞,直到JS加載完成再繼續(xù)渲染,所以有了異步加載JS的形式。
常見的異步加載JS方式,將js代碼包裹在匿名函數(shù)中并立即執(zhí)行,動(dòng)態(tài)生成標(biāo)簽去拉取js,可以實(shí)現(xiàn)多個(gè)js文件并行下載,只有在解析執(zhí)行的時(shí)候會(huì)阻塞渲染。另外,可以使用script標(biāo)簽的async和defer屬性。
延遲加載:
延遲加載就是一開始并不加載這些暫時(shí)不用的js,而是在需要的時(shí)候或稍后再通過js 的控制來異步加載。
也就是將 js 切分成許多模塊,頁(yè)面初始化時(shí)只加載需要立即執(zhí)行的 js ,然后其它 js 的加載延遲到第一次需要用到的時(shí)候再加載。
特別是頁(yè)面有大量不同的模塊組成,很多可能暫時(shí)不用或根本就沒用到。
script的兩階段加載與延遲執(zhí)行
JS的加載其實(shí)是由兩階段組成:下載內(nèi)容(download bytes)和執(zhí)行(parse and execute)。
瀏覽器在下載完 js 的內(nèi)容后就會(huì)立即對(duì)其解析和執(zhí)行,不管是同步加載還是異步加載。
前面說的異步加載,解決的只是下載階段的問題,但代碼在下載后會(huì)立即執(zhí)行。
而瀏覽器在解析執(zhí)行 JS 階段是阻塞任何操作的,這時(shí)的瀏覽器處于無響應(yīng)狀態(tài)。
我們都知道通過網(wǎng)絡(luò)下載 script 需要明顯的時(shí)間,但容易忽略了第二階段,解析和執(zhí)行也是需要時(shí)間的。script的解析和執(zhí)行所花的時(shí)間比我們想象的要多,尤其是script 很多很大的時(shí)候。有些是需要立刻執(zhí)行,而有些則不需要(比如只是在展示某個(gè)界面或執(zhí)行某個(gè)操作時(shí)才需要)。
這些script 可以延遲執(zhí)行,先異步下載緩存起來,但不立即執(zhí)行,而是在第一次需要的時(shí)候執(zhí)行一次。
利用特殊的技巧可以做到下載與執(zhí)行的分離。比如將 JS 的內(nèi)容作為object對(duì)象加載緩存起來,所以就不會(huì)立即執(zhí)行了,然后在第一次需要的時(shí)候再執(zhí)行。
多表查詢:
定義:根據(jù)特定的連接條件從不同的表中獲取所需的數(shù)據(jù);
語(yǔ)法:SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
注意:where不要省了,省略where即為笛卡爾集,而且where條件要有效,兩張表間有一個(gè)相同的字段,才好進(jìn)行有效的多表查詢;
簡(jiǎn)化:為了簡(jiǎn)化SQL書寫,可為表名定義別名,格式:from 表名別名,如:from emp e,dept d;
優(yōu)化:建議使用表的別名及表前綴,使用表別名可以簡(jiǎn)化查詢,而使用表前綴則可以提高查詢性能;
連接類型:從數(shù)據(jù)顯示方式來講有:內(nèi)連接和外連接。
內(nèi)連接:只返回滿足連接條件的數(shù)據(jù)。
例:select empno,ename,sal,dname,loc from emp,dept where emp.deptno=dept.deptno;
等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
不等值連接:在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>、>=、<=、<、!>、!<和<>。
自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。
外連接:除了返回滿足連接條的行以外,還返回左(右)表中,不滿足條件的行,稱為左(右)連接;
左外連接:是以左表為基準(zhǔn),將左表沒有的對(duì)應(yīng)項(xiàng)顯示,右表的列為NULL
select * from book as a left join stu as b on a.sutid = b.stuid
右外連接:是以右表為基準(zhǔn),將a.stuid = b.stuid的數(shù)據(jù)進(jìn)行連接,然以將右表沒有的對(duì)應(yīng)項(xiàng)顯示,左表的列為NULL
select * from book as a right join stu as b on a.sutid = b.stuid
全連接:完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。
select * from book as a full outer join stu as b on a.sutid = b.stuid
CI框架常用的數(shù)據(jù)庫(kù)操作:
常規(guī)查詢:$this->db->query("YOUR QUERY HERE");
查詢綁定:查詢綁定可以簡(jiǎn)化你的查詢語(yǔ)法,它通過系統(tǒng)自動(dòng)的為你將各個(gè)查詢組裝在一起。 參考下面的例子:
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query($sql, array(3, "live", "Rick"));
$this->db->count_all():該方法用于獲取數(shù)據(jù)表的總行數(shù),第一個(gè)參數(shù)為表名;
查詢構(gòu)造器類:odeIgniter 提供了查詢構(gòu)造器類,查詢構(gòu)造器允許你使用較少的代碼來在數(shù)據(jù)庫(kù)中 獲取、新增或更新數(shù)據(jù)。有時(shí)只需要一兩行代碼就能完成數(shù)據(jù)庫(kù)操作。CodeIgniter 并不需要為每個(gè)數(shù)據(jù)表提供一個(gè)類,而是使用了一種更簡(jiǎn)單的接口。
查詢:
$query = $this->db->get("mytable"); // Produces: SELECT * FROM mytable $query = $this->db->get("mytable", 10, 20); // Executes: SELECT * FROM mytable LIMIT 20, 10 // (in MySQL. Other databases have slightly different syntax)
$this->db->select():該方法用于編寫查詢語(yǔ)句中的 SELECT 子句:
$this->db->select("title, content, date"); $query = $this->db->get("mytable"); // Executes: SELECT title, content, date FROM mytable
$this->db->from():該方法用于編寫查詢語(yǔ)句中的 FROM 子句:
$this->db->select("title, content, date"); $this->db->from("mytable"); $query = $this->db->get(); // Produces: SELECT title, content, date FROM mytable
$this->db->join():該方法用于編寫查詢語(yǔ)句中的 JOIN 子句:
$this->db->select("*"); $this->db->from("blogs"); $this->db->join("comments", "comments.id = blogs.id"); $query = $this->db->get(); // Produces: // SELECT * FROM blogs JOIN comments ON comments.id = blogs.id //你可以傳入第三個(gè)參數(shù)指定連接的類型,有這樣幾種選擇:left,right,outer,inner,left outer 和 right outer 。 $this->db->join("comments", "comments.id = blogs.id", "left"); // Produces: LEFT JOIN comments ON comments.id = blogs.id
$this->db->where():該方法提供了4中方式讓你編寫查詢語(yǔ)句中的 WHERE 子句(所有的數(shù)據(jù)將會(huì)自動(dòng)轉(zhuǎn)義,生成安全的查詢語(yǔ)句。):
1.簡(jiǎn)單的 key/value 方式: $this->db->where("name", $name); // Produces: WHERE name = "Joe" 注意自動(dòng)為你加上了等號(hào)。 如果你多次調(diào)用該方法,那么多個(gè) WHERE 條件將會(huì)使用 AND 連接起來: $this->db->where("name", $name); $this->db->where("title", $title); $this->db->where("status", $status); // WHERE name = "Joe" AND title = "boss" AND status = "active" 2.自定義 key/value 方式: 為了控制比較,你可以在第一個(gè)參數(shù)中包含一個(gè)比較運(yùn)算符: $this->db->where("name !=", $name); $this->db->where("id <", $id); // Produces: WHERE name != "Joe" AND id < 45 3.關(guān)聯(lián)數(shù)組方式: $array = array("name" => $name, "title" => $title, "status" => $status); $this->db->where($array); // Produces: WHERE name = "Joe" AND title = "boss" AND status = "active" 你也可以在這個(gè)方法里包含你自己的比較運(yùn)算符: $array = array("name !=" => $name, "id <" => $id, "date >" => $date); $this->db->where($array); 4.自定義字符串: 你可以完全手工編寫 WHERE 子句: $where = "name="Joe" AND status="boss" OR status="active""; $this->db->where($where); $this->db->where() 方法有一個(gè)可選的第三個(gè)參數(shù),如果設(shè)置為 FALSE,CodeIgniter 將不保護(hù)你的表名和字段名。 $this->db->where("MATCH (field) AGAINST ("value")", NULL, FALSE);
$this->db->like():該方法用于生成 LIKE 子句,在進(jìn)行搜索時(shí)非常有用。
簡(jiǎn)單 key/value 方式: $this->db->like("title", "match"); // Produces: WHERE `title` LIKE "%match%" ESCAPE "!" 如果你多次調(diào)用該方法,那么多個(gè) WHERE 條件將會(huì)使用 AND 連接起來: $this->db->like("title", "match"); $this->db->like("body", "match"); // WHERE `title` LIKE "%match%" ESCAPE "!" AND `body` LIKE "%match% ESCAPE "!" 可以傳入第三個(gè)可選的參數(shù)來控制 LIKE 通配符(%)的位置,可用選項(xiàng)有:"before","after" 和 "both" (默認(rèn)為 "both")。 $this->db->like("title", "match", "before"); // Produces: WHERE `title` LIKE "%match" ESCAPE "!" $this->db->like("title", "match", "after"); // Produces: WHERE `title` LIKE "match%" ESCAPE "!" $this->db->like("title", "match", "both"); // Produces: WHERE `title` LIKE "%match%" ESCAPE "!" 關(guān)聯(lián)數(shù)組方式: $array = array("title" => $match, "page1" => $match, "page2" => $match); $this->db->like($array); // WHERE `title` LIKE "%match%" ESCAPE "!" AND `page1` LIKE "%match%" ESCAPE "!" AND `page2` LIKE "%match%" ESCAPE "!"
$this->db->group_by():$this->db->group_by("title"); // Produces: GROUP BY title;
$this->db->order_by():$this->db->order_by("title", "DESC");
$this->db->limit():$this->db->limit(10); // Produces: LIMIT 10
$this->db->count_all_results():該方法用于獲取特定查詢返回結(jié)果的數(shù)量,也可以使用查詢構(gòu)造器的這些方法: where(),or_where(),like(),or_like() 等等。
$this->db->delete():$this->db->delete("mytable", array("id" => $id)); // Produces: // DELETE FROM mytable // WHERE id = $id
為什么chrome瀏覽器的速度很快Chrome 把瀏覽器上做的每件事都拆成獨(dú)立的進(jìn)程,每個(gè)tab都是一個(gè)獨(dú)立的進(jìn)程,并利用進(jìn)程間通訊來完成它們之間的同步,windows系統(tǒng)下可以通過任務(wù)管理器看到許多chrome 標(biāo)簽頁(yè)的進(jìn)程。
在還沒點(diǎn)擊 URL 之前,Chrome 已經(jīng)在幫用戶加載了
參考文章:
JavaScript的加載和執(zhí)行性能優(yōu)化
Javascript 異步加載詳解
ES6 的模塊系統(tǒng)
seaJs學(xué)習(xí)筆記之seaJs的異步加載和加載多個(gè)js文件
Promise對(duì)象
Javascript異步編程的4種方法
JavaScript 運(yùn)行機(jī)制詳解:再談Event Loop
JavaScript:徹底理解同步、異步和事件循環(huán)(Event Loop)
JavaScript單線程和瀏覽器事件循環(huán)簡(jiǎn)述
Javascript是單線程的深入分析
查詢輔助函數(shù)
SQL的幾種連接:內(nèi)連接、左聯(lián)接、右連接、全連接、交叉連接
SQL基礎(chǔ)-->多表查詢
CHROME進(jìn)程間通信
瀏覽器是如何工作的
瀏覽器是怎樣工作的:渲染引擎,HTML解析
等......
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79865.html
摘要:零延遲零延遲并不是意味著回調(diào)函數(shù)立刻執(zhí)行。異步編程的中方法包括回調(diào)函數(shù)事件監(jiān)聽采用事件驅(qū)動(dòng)模式。執(zhí)行完成后,立即觸發(fā)事件,從而開始執(zhí)行。所謂對(duì)象,就是代表了未來某個(gè)將要發(fā)生的事件通常是一個(gè)異步操作。 JavaScript單線程與瀏覽器多線程 Javascript是單線程的:因?yàn)镴S運(yùn)行在瀏覽器中,是單線程的,每個(gè)window一個(gè)JS線程。作為瀏覽器腳本語(yǔ)言,JavaScript的主要...
摘要:簡(jiǎn)介項(xiàng)目命名為就是一個(gè)服務(wù)器單純開發(fā)一個(gè)服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架發(fā)展為一個(gè)強(qiáng)制不共享任何資源的單線程,單進(jìn)程系統(tǒng)。單線程弱點(diǎn)無法利用多核錯(cuò)誤會(huì)引起整個(gè)應(yīng)用退出,應(yīng)用的健壯性大量計(jì)算占用導(dǎo)致無法繼續(xù)調(diào)用異步。 NodeJs簡(jiǎn)介 Ryan Dahl項(xiàng)目命名為:web.js 就是一個(gè)Web服務(wù)器.單純開發(fā)一個(gè)Web服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個(gè)基本框架.Node發(fā)展...
摘要:在異步機(jī)制中,任務(wù)隊(duì)列就是用來維護(hù)異步任務(wù)回調(diào)函數(shù)的隊(duì)列。四對(duì)象對(duì)象是工作組提出的一種規(guī)范,目的是為異步編程提供統(tǒng)一接口。 異步 1.JavaScript單線程的理解 Javascript語(yǔ)言的執(zhí)行環(huán)境是單線程(single thread)。所謂單線程,就是指一次只能完成一件任務(wù)。如果有多個(gè)任務(wù),就必須排隊(duì),前面一個(gè)任務(wù)完成,再執(zhí)行后面一個(gè)任務(wù),以此類推。 2.JavaScript單線...
摘要:線程機(jī)制與事件機(jī)制一進(jìn)程與線程進(jìn)程程序的一次執(zhí)行,它占有一片獨(dú)有的內(nèi)存空間。事件響應(yīng)模塊負(fù)責(zé)事件的管理。當(dāng)事件發(fā)生時(shí)管理模塊會(huì)將回調(diào)函數(shù)及其數(shù)據(jù)添加到回調(diào)列隊(duì)中。但是子線程完全受主線程控制,且不得操作。向另一個(gè)線程發(fā)送消息。 JavaScript線程機(jī)制與事件機(jī)制 一、進(jìn)程與線程 進(jìn)程(process) 程序的一次執(zhí)行,它占有一片獨(dú)有的內(nèi)存空間。 可以通過windows任務(wù)管理器查...
摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時(shí)間有限,資源有限。事件驅(qū)動(dòng)機(jī)制是通過內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來實(shí)現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時(shí)間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭(zhēng)對(duì)于熟練掌握J(rèn)S語(yǔ)言后的廣義Node.js.至于為什么...
閱讀 489·2023-04-25 17:26
閱讀 1506·2021-08-05 09:58
閱讀 1974·2019-08-30 13:17
閱讀 954·2019-08-28 17:52
閱讀 1072·2019-08-26 18:27
閱讀 1427·2019-08-26 14:05
閱讀 3625·2019-08-26 14:05
閱讀 1604·2019-08-26 10:45