摘要:零延遲零延遲并不是意味著回調(diào)函數(shù)立刻執(zhí)行。異步編程的中方法包括回調(diào)函數(shù)事件監(jiān)聽(tīng)采用事件驅(qū)動(dòng)模式。執(zhí)行完成后,立即觸發(fā)事件,從而開(kāi)始執(zhí)行。所謂對(duì)象,就是代表了未來(lái)某個(gè)將要發(fā)生的事件通常是一個(gè)異步操作。
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í)瀏覽器就無(wú)法決定采用哪個(gè)線程的操作。
瀏覽器不是單線程的,引擎可能存在如下線程:
javascript引擎線程
界面渲染線程
瀏覽器事件觸發(fā)線程
Http請(qǐng)求線程等
Event Loop事件循環(huán)機(jī)制:
主線程從"任務(wù)隊(duì)列"中讀取事件,這個(gè)過(guò)程是循環(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ì)來(lái)執(zhí)行這里的任務(wù)。所以,有的時(shí)候即使計(jì)時(shí)器已經(jīng)到0了,也會(huì)不立即執(zhí)行計(jì)時(shí)器中的回調(diào)任務(wù)。
Ajax異步請(qǐng)求:
在發(fā)起ajax請(qǐng)求的時(shí)候,瀏覽器會(huì)開(kāi)一個(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è)面都卡住無(wú)法繼續(xù)往下執(zhí)行。
為了解決這個(gè)問(wèn)題,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)聽(tīng):采用事件驅(qū)動(dòng)模式。任務(wù)的執(zhí)行不取決于代碼的順序,而取決于某個(gè)事件是否發(fā)生。
//jQuery f1.on("done", f2); function f1(){ setTimeout(function () { //do something f1.trigger("done");//執(zhí)行完成后,立即觸發(fā)done事件,從而開(kāi)始執(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開(kāi)始執(zhí)行 }, 1000); } jQuery.unsubscribe("done", f2);//取消訂閱
Promises:ES6原生提供了Promise對(duì)象。所謂Promise對(duì)象,就是代表了未來(lái)某個(gè)將要發(fā)生的事件(通常是一個(gè)異步操作)。它的好處在于,有了Promise對(duì)象,就可以將異步操作以同步操作的流程表達(dá)出來(lái),避免了層層嵌套的回調(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支持異步加載和可配置的模塊加載。
大致來(lái)說(shuō),當(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的形式。
常見(jiàn)的異步加載JS方式,將js代碼包裹在匿名函數(shù)中并立即執(zhí)行,動(dòng)態(tài)生成標(biāo)簽去拉取js,可以實(shí)現(xiàn)多個(gè)js文件并行下載,只有在解析執(zhí)行的時(shí)候會(huì)阻塞渲染。另外,可以使用script標(biāo)簽的async和defer屬性。
延遲加載:
延遲加載就是一開(kāi)始并不加載這些暫時(shí)不用的js,而是在需要的時(shí)候或稍后再通過(guò)js 的控制來(lái)異步加載。
也就是將 js 切分成許多模塊,頁(yè)面初始化時(shí)只加載需要立即執(zhí)行的 js ,然后其它 js 的加載延遲到第一次需要用到的時(shí)候再加載。
特別是頁(yè)面有大量不同的模塊組成,很多可能暫時(shí)不用或根本就沒(méi)用到。
script的兩階段加載與延遲執(zhí)行
JS的加載其實(shí)是由兩階段組成:下載內(nèi)容(download bytes)和執(zhí)行(parse and execute)。
瀏覽器在下載完 js 的內(nèi)容后就會(huì)立即對(duì)其解析和執(zhí)行,不管是同步加載還是異步加載。
前面說(shuō)的異步加載,解決的只是下載階段的問(wèn)題,但代碼在下載后會(huì)立即執(zhí)行。
而瀏覽器在解析執(zhí)行 JS 階段是阻塞任何操作的,這時(shí)的瀏覽器處于無(wú)響應(yīng)狀態(tài)。
我們都知道通過(guò)網(wǎng)絡(luò)下載 script 需要明顯的時(shí)間,但容易忽略了第二階段,解析和執(zhí)行也是需要時(shí)間的。script的解析和執(zhí)行所花的時(shí)間比我們想象的要多,尤其是script 很多很大的時(shí)候。有些是需要立刻執(zhí)行,而有些則不需要(比如只是在展示某個(gè)界面或執(zhí)行某個(gè)操作時(shí)才需要)。
這些script 可以延遲執(zhí)行,先異步下載緩存起來(lái),但不立即執(zhí)行,而是在第一次需要的時(shí)候執(zhí)行一次。
利用特殊的技巧可以做到下載與執(zhí)行的分離。比如將 JS 的內(nèi)容作為object對(duì)象加載緩存起來(lái),所以就不會(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ù)顯示方式來(lái)講有:內(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),將左表沒(méi)有的對(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)行連接,然以將右表沒(méi)有的對(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è)表中沒(méi)有匹配行時(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ǔ)法,它通過(guò)系統(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)造器允許你使用較少的代碼來(lái)在數(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 連接起來(lái): $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 連接起來(lái): $this->db->like("title", "match"); $this->db->like("body", "match"); // WHERE `title` LIKE "%match%" ESCAPE "!" AND `body` LIKE "%match% ESCAPE "!" 可以傳入第三個(gè)可選的參數(shù)來(lái)控制 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)程間通訊來(lái)完成它們之間的同步,windows系統(tǒng)下可以通過(guò)任務(wù)管理器看到許多chrome 標(biāo)簽頁(yè)的進(jìn)程。
在還沒(méi)點(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/90989.html
摘要:同構(gòu)和直出服務(wù)端渲染出首屏,主要為了減少用戶等待的時(shí)間,縮短白屏?xí)r間,在移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)情況下能夠獲得較好的用戶體驗(yàn)。在優(yōu)化渲染時(shí)間的時(shí)候監(jiān)控頁(yè)面情況很有用。 @(StuRep)2016.06.11 react+node同構(gòu)和直出 服務(wù)端渲染出首屏,主要為了減少用戶等待的時(shí)間,縮短白屏?xí)r間,在移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)情況下能夠獲得較好的用戶體驗(yàn)。 了解了一下react實(shí)現(xiàn)同構(gòu)和直出的方案,收藏了一些還...
摘要:有道云筆記支持電腦客戶端軟件和手機(jī)客戶端,也可以在線,可以實(shí)現(xiàn)多端同步管理。老蔣覺(jué)得有道云筆記的寫作體驗(yàn)是比較好的。以前我們是否也有記日記的習(xí)慣?或者喜歡到每年年底準(zhǔn)備新年的筆記本用來(lái)記錄新的一年中的事兒或者日常的文檔筆記。但是,隨著電腦的普及,我們很多事情基本上都在電腦上完成,除了我們上學(xué)時(shí)候用到本子和筆的,工作之后能電腦代替的,可能很少會(huì)用到寫字,于是乎原本記日記、寫寫隨筆之類的可能也丟...
摘要:實(shí)際上我們很多朋友對(duì)于騰訊文檔中的工具可能不陌生,尤其是在之前疫情影響我們?cè)诩肄k公,學(xué)校公司社區(qū)有需要統(tǒng)計(jì)信息的,可能有部分就是通過(guò)騰訊文檔的表單收集功能統(tǒng)計(jì)表單的。實(shí)際上我們很多朋友對(duì)于騰訊文檔中的工具可能不陌生,尤其是在之前疫情影響我們?cè)诩肄k公,學(xué)校、公司、社區(qū)有需要統(tǒng)計(jì)信息的,可能有部分就是通過(guò)騰訊文檔的表單收集功能統(tǒng)計(jì)表單的。也正是 由于這個(gè)特殊的原因,我們可以看到這類的工具服務(wù)商確...
摘要:使用和架構(gòu)創(chuàng)建一個(gè)典型的項(xiàng)目。屬性被賦值給傳入的函數(shù)運(yùn)行的結(jié)果。渲染,我們使用,這是一個(gè)對(duì)象,它指向的屬性,使用函數(shù)使用的結(jié)果替換。最后,啟動(dòng)整體應(yīng)用,為了保證完全加載,用包裝器調(diào)用完整日常練習(xí)一些在對(duì)象初始化的時(shí)候執(zhí)行的代碼 使用Backbone.js 和 MVC 架構(gòu)創(chuàng)建一個(gè)典型的Hello world項(xiàng)目。雖然是殺雞用牛刀了,畢竟是我第一次使用Backbone.js 依賴 ...
摘要:隨著時(shí)間的流逝,這些與自己相關(guān)的信息就散落在了各個(gè)角落,有的偶爾回頭檢索,大多數(shù)用后即丟棄,最終被遺忘遺失。私鏈信息目錄私鏈的目標(biāo)是分類整理存放用戶積累的知識(shí)信息,幫助用戶構(gòu)建管理自己的知識(shí)信息體系。 這是一個(gè)信息社會(huì),這是一個(gè)數(shù)字化時(shí)代,移動(dòng)設(shè)備、互聯(lián)網(wǎng)、信息數(shù)字化已經(jīng)成為人所共知的常識(shí)。在這種環(huán)境中,你有沒(méi)有問(wèn)過(guò)自己:屬于我的數(shù)字化信息都有哪些,都在什么地方呢? 每個(gè)人在每天都會(huì)生...
閱讀 1986·2021-11-24 09:38
閱讀 3346·2021-11-22 12:07
閱讀 1918·2021-09-22 16:03
閱讀 1972·2021-09-02 15:41
閱讀 2630·2021-07-24 23:28
閱讀 2220·2019-08-29 13:17
閱讀 1561·2019-08-29 12:25
閱讀 2675·2019-08-29 11:10