中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁(yè) > 技術(shù)文檔 > 網(wǎng)頁(yè)制作 > 什么是Node?
學(xué)用代碼片段 回到列表 純CSS3文字漸變內(nèi)發(fā)光投影效果
 什么是Node?

作者:拔赤 時(shí)間: 2011-09-02 文檔類(lèi)型:合作網(wǎng)站提供 來(lái)自:Taobao.com UED Team

第 1 頁(yè) 什么是Node? [1]
第 2 頁(yè) 什么是Node? [2]
第 3 頁(yè) 什么是Node? [3]
第 4 頁(yè) 什么是Node? [4]
第 5 頁(yè) 什么是Node? [5]
第 6 頁(yè) 什么是Node? [6]
第 7 頁(yè) 什么是Node? [7]
第 8 頁(yè) 什么是Node? [8]
第 9 頁(yè) 什么是Node? [8]

解釋器之惑

盡管通過(guò)這種方法可以使用JavaScript輕易的實(shí)現(xiàn)一個(gè)服務(wù)(不管運(yùn)行代碼的虛機(jī)實(shí)際上跑的是C程序還是其他什么程序),這種做法回避了一個(gè)問(wèn)題:你需要使用JavaScript寫(xiě)出一個(gè)服務(wù)器嗎?為了找到這個(gè)問(wèn)題的答案,我們來(lái)考慮一個(gè)非常典型的場(chǎng)景。

JSON的處理

這是一種非常典型的web應(yīng)用,前臺(tái)使用HTML和CSS,JavaScript用來(lái)作數(shù)據(jù)驗(yàn)證,并和后臺(tái)進(jìn)行數(shù)據(jù)交互。由于你處于web交互的最頂端,你使用Ajax提交數(shù)據(jù)到后臺(tái)并從后臺(tái)獲取數(shù)據(jù),而不是單單依靠表單提交來(lái)實(shí)現(xiàn)。如果你是這樣做的話(huà),那么你同樣會(huì)非常喜歡使用JSON的。JSON是如今最流行的傳輸數(shù)據(jù)的格式。

因此,這個(gè)Ajax也可以比作“把在線(xiàn)拍賣(mài)網(wǎng)站里的某些吉他的信息發(fā)給我”。這個(gè)請(qǐng)求通過(guò)網(wǎng)絡(luò)到達(dá)一個(gè)運(yùn)行PHP程序的服務(wù)器。PHP服務(wù)器不得不給JavaScript返回很多信息,而且這些信息必須以某種形式的數(shù)據(jù)包發(fā)給客戶(hù)端,而且這個(gè)數(shù)據(jù)包是可以被JavaScript解析的。因此數(shù)據(jù)可以打包成數(shù)組,然后轉(zhuǎn)換為JSON,就像這樣:

$itemGuitar = array(
    'id' => 'itemGuitar',
    'description' => 'Pete Townshend once played this guitar while his own axe ' .
        was in the shop having bits of drumkit removed from it.',
    'price' => 5695.99,
    'urls' => array('http://www.thewho.com',
        'http://en.wikipedia.com/wiki/Pete_Townshend')
);

$output = json_encode($itemGuitar);
print($output);

回到客戶(hù)端,JavaScript得到這個(gè)返回的數(shù)據(jù)包,由于經(jīng)過(guò)轉(zhuǎn)換,數(shù)據(jù)編程了JSON格式。就像這樣:

{
    "id": "itemGuitar",
    "description": "Pete Townshend once played this guitar...",
    "price": 5695.99,
    "urls": ["}

這種轉(zhuǎn)換是標(biāo)準(zhǔn)的,轉(zhuǎn)換前后也是相互等價(jià)的。接下來(lái),就可以將這個(gè)字符串轉(zhuǎn)換為JavaScript對(duì)象,可以調(diào)用eval(),就像這樣:

var itemDetails = eval('(' + jsonDataString + ')');

計(jì)算結(jié)果是一個(gè)普通的JavaScript對(duì)象,這個(gè)對(duì)象的屬性和JSON數(shù)組的數(shù)據(jù)結(jié)構(gòu)保持一致。當(dāng)然,由于jsonDataString通常是由服務(wù)器返回的,通常需要這樣來(lái)解析返回結(jié)果:

var itemDetails = eval('(' + request.responseText + ')');

這就是最最典型的JSON處理,但存在一個(gè)非常嚴(yán)重的問(wèn)題。

對(duì)實(shí)體代碼微妙的破壞性

(譯注:這個(gè)小標(biāo)題著實(shí)讓人費(fèi)解,作者這里拐彎抹角的解釋了Node的一個(gè)好處,就是前端和后端都采用同樣的語(yǔ)言JavaScript,在作JSON解析時(shí)是無(wú)障礙的,而當(dāng)前端使用JavaScript作JSON編碼,后臺(tái)用PHP作JSON解碼時(shí),多少會(huì)因?yàn)槎喾N語(yǔ)言的JSON解析的實(shí)現(xiàn)不同而帶來(lái)一些兼容性問(wèn)題)

首先,這類(lèi)代碼的一個(gè)主要問(wèn)題是,它對(duì)解釋器的依賴(lài)比較嚴(yán)重。在上個(gè)例子中,解釋器就是指內(nèi)置的JSON解析器或者實(shí)現(xiàn)解析JSON的代碼,這實(shí)際上依賴(lài)了兩樣?xùn)|西:和eval()解析響應(yīng)文本的操作一樣的基于Java的JSON解析器,以及基于PHP的JSON解析器。在PHP5.2.0中已經(jīng)包含了JSON解析器,但卻是以外部依賴(lài)的形式給出的,并不是內(nèi)置于PHP的內(nèi)核中。

但這并不是大肆宣揚(yáng)解釋器的種種。畢竟解釋器本身還存在很多問(wèn)題,比如將“I”解析成了“i”,數(shù)組中的元素1解釋成了2。當(dāng)然,在JSON工具正式發(fā)布之前會(huì)有大量的測(cè)試,以保證在各種復(fù)雜場(chǎng)景中都不會(huì)出現(xiàn)錯(cuò)誤,包括在客戶(hù)端的解析結(jié)果和在服務(wù)器端的解析結(jié)果完全一致。無(wú)論如何,這都需要大量的測(cè)試才行。

不管怎樣,JSON依然存在很多實(shí)際的問(wèn)題。

基于某種語(yǔ)言(基于JavaScript或者PHP)的JSON解析器選擇是一個(gè)很大的問(wèn)題。換句話(huà)說(shuō),問(wèn)題不是在于“翻譯”(translation)而在于“翻譯器”(translator)(譯注:作者的意思是說(shuō)JSON本身的規(guī)則沒(méi)有問(wèn)題,反倒是各種語(yǔ)言的JSON實(shí)現(xiàn)的質(zhì)量參差不齊,甚至有很多bug)。當(dāng)一個(gè)語(yǔ)言的版本比較穩(wěn)定時(shí),基于這門(mén)語(yǔ)言的JSON解析器的運(yùn)用和推廣會(huì)比較快。結(jié)果是,JSON解析器變的越來(lái)越強(qiáng)大,以至于可以解析任意復(fù)雜的數(shù)據(jù)結(jié)構(gòu),即便這么復(fù)雜的數(shù)據(jù)結(jié)構(gòu)根本不會(huì)實(shí)際用到。反之,每次迭代中(每次計(jì)算迭代的路徑和數(shù)據(jù)類(lèi)型的組合),也很有可能出現(xiàn)JSON解釋器無(wú)法解析的數(shù)據(jù)結(jié)構(gòu)(或者很深的JSON路徑)的情況。

下圖就是可選的JSON解釋器

2

這并不是說(shuō)JSON本身很糟糕,實(shí)際上,我們認(rèn)為JSON的流行正是得益于其在新領(lǐng)域中的應(yīng)用(譯注:作者的言外之意是,在新領(lǐng)域中的初次JSON實(shí)現(xiàn)往往伴隨很多問(wèn)題)。對(duì)于新的領(lǐng)域,我們不禁要問(wèn):“這個(gè)新東東支持JSON嗎?” 因此,JSON需要不斷進(jìn)化,需要不斷的測(cè)試,不斷的兼容新的平臺(tái)。而作為程序員的,可能需要重新組織你的數(shù)據(jù)結(jié)構(gòu),或者等待新的版本出現(xiàn)以滿(mǎn)足你的需求,或者干脆直接hack JSON。而這些正是我們所說(shuō)的編程資源的浪費(fèi)。

假設(shè)你可以自己動(dòng)手豐衣足食實(shí)現(xiàn)一個(gè)解釋器,即便這樣,你也沒(méi)有通過(guò)“抄近道”揀到便宜,而是用JavaScript重復(fù)造輪子而已。

而Node則規(guī)避了此類(lèi)問(wèn)題,剛剛你讀到的文字——關(guān)于內(nèi)嵌JSON的PHP5.2.0、關(guān)于將對(duì)象轉(zhuǎn)換為數(shù)組、關(guān)于采用新的結(jié)構(gòu)組織數(shù)據(jù)的方式、關(guān)于JSON中新特性的實(shí)現(xiàn)——這一切擾人的問(wèn)題在Node中都將不復(fù)存在,因?yàn)榍岸送ㄟ^(guò)JavaScript作JSON編碼,后臺(tái)使用JavaScript作JSON解碼,永遠(yuǎn)不會(huì)出問(wèn)題。

JavaScript中eval()的潛在隱患

正如我們不用將Node當(dāng)作一門(mén)新的語(yǔ)言來(lái)對(duì)待一樣,在Node中通過(guò)eval()來(lái)執(zhí)行一段代碼也和JavaScript中的eval()一樣(不被推薦)。眾所周知eval()是非常危險(xiǎn)的。eval()用以執(zhí)行一段文本表示的代碼邏輯,可以理解為在文本框中“直接敲入SQL代碼來(lái)執(zhí)行查詢(xún)”,這是不安全的,這實(shí)際上是惡意SQL注入。當(dāng)每次eval()執(zhí)行一段字符串的時(shí)候,(美國(guó))中西部的一只小狗都會(huì)瑟瑟發(fā)抖,東部海灘上的某位母親的腳趾會(huì)被刺傷并受到詛咒。eval()非常危險(xiǎn)。網(wǎng)上有很多關(guān)于此的資料,這里不再贅述?梢杂胓oogle查詢(xún)“eval JavaScript evil”或者“eval JavaScript injection”獲取更多信息。

當(dāng)然,如果沒(méi)有任何其他上下文的約束,在Node中也是允許使用eval()的,因此eval()的隱患在Node依然存在。畢竟Node的目的并不是完全解決eval()的問(wèn)題。Node被稱(chēng)之為基于事件的JavaScript或基于事件的I/O,這里所說(shuō)的“基于事件”是Node中非常重要的概念。但要徹底理解什么是基于事件,以及為什么基于事件能讓你規(guī)避eval()的危險(xiǎn),則需要理解JSON在應(yīng)用之中是如何工作的,此外還要搞清楚適應(yīng)于web應(yīng)用典型架構(gòu)的特有數(shù)據(jù)結(jié)構(gòu)。

出處:Taobao.com UED Team
責(zé)任編輯:bluehearts

上一頁(yè) 什么是Node? [6] 下一頁(yè) 什么是Node? [8]

◎進(jìn)入論壇網(wǎng)頁(yè)制作WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論

相關(guān)文章 更多相關(guān)鏈接
5 個(gè)簡(jiǎn)單實(shí)用的 CSS 屬性
淺談前端新人的職業(yè)規(guī)劃
CSS陰影詳解
悟道Web標(biāo)準(zhǔn):讓W(xué)3C標(biāo)準(zhǔn)兼容終端
悟道WEB標(biāo)準(zhǔn):統(tǒng)一思想,遵循標(biāo)準(zhǔn)
作者文章
使用YUI 3開(kāi)發(fā)Web應(yīng)用的訣竅
JS語(yǔ)法檢查插件 jsLint for Vim
一場(chǎng)關(guān)于YUI3/jQuery的精彩辯論
YUI3設(shè)計(jì)中的激進(jìn)和妥協(xié)
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門(mén)搜索:CSS Fireworks 設(shè)計(jì)比賽 網(wǎng)頁(yè)制作 web標(biāo)準(zhǔn) 用戶(hù)體驗(yàn) UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點(diǎn)最新 站點(diǎn)最新列表
周大!熬•自然”設(shè)計(jì)大賽開(kāi)啟
國(guó)際體驗(yàn)設(shè)計(jì)大會(huì)7月將在京舉行
中國(guó)國(guó)防科技信息中心標(biāo)志征集
云計(jì)算如何讓安全問(wèn)題可控
云計(jì)算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會(huì)
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅(jiān)的"云和互聯(lián)網(wǎng)觀(guān)"
1499元買(mǎi)真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計(jì)大賽
欄目最新 欄目最新列表
淺談JavaScript編程語(yǔ)言的編碼規(guī)范
如何在illustrator中繪制臺(tái)歷
Ps簡(jiǎn)單繪制一個(gè)可愛(ài)的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡(jiǎn)單的作品展示頁(yè)面
CSS定位機(jī)制之一:普通流
25個(gè)最佳最閃亮的Eclipse開(kāi)發(fā)項(xiàng)目
Illustrator中制作針線(xiàn)縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁(yè) 首頁(yè) 前頁(yè) 后頁(yè) 尾頁(yè) 頁(yè)次:7/9頁(yè) 1個(gè)記錄/頁(yè) 轉(zhuǎn)到 頁(yè) 共9個(gè)記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨(dú)家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點(diǎn)的原創(chuàng)文章,但原作者和來(lái)自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來(lái)自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請(qǐng)不要盜鏈到本站,且不準(zhǔn)打上各自站點(diǎn)的水印,亦不能抹去我站點(diǎn)水印。

特別注意:本站所提供的攝影照片,插畫(huà),設(shè)計(jì)作品,如需使用,請(qǐng)與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請(qǐng)與我們聯(lián)系,我們將立即刪除修改。

您的評(píng)論
用戶(hù)名:  口令:
說(shuō)明:輸入正確的用戶(hù)名和密碼才能參與評(píng)論。如果您不是本站會(huì)員,你可以注冊(cè) 為本站會(huì)員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯(cuò)誤,請(qǐng)用報(bào)告錯(cuò)誤,以利文檔及時(shí)修改。
不評(píng)分 1 2 3 4 5
注意:請(qǐng)不要在評(píng)論中含與內(nèi)容無(wú)關(guān)的廣告鏈接,違者封ID
請(qǐng)您注意:
·不良評(píng)論請(qǐng)用報(bào)告管理員,以利管理員及時(shí)刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國(guó)的各項(xiàng)有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評(píng)論管理人員有權(quán)保留或刪除其管轄評(píng)論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評(píng)論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評(píng)論文檔 | 報(bào)告錯(cuò)誤  
專(zhuān)業(yè)書(shū)推薦 更多內(nèi)容
網(wǎng)站可用性測(cè)試及優(yōu)化指南
《寫(xiě)給大家看的色彩書(shū)1》
《跟我去香港》
眾妙之門(mén)—網(wǎng)站UI 設(shè)計(jì)之道
《Flex 4.0 RIA開(kāi)發(fā)寶典》
《贏(yíng)在設(shè)計(jì)》
犀利開(kāi)發(fā)—jQuery內(nèi)核詳解與實(shí)踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2