自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Joyent如何對(duì)Node代碼進(jìn)行調(diào)試

譯文
開(kāi)發(fā) 前端
作為Node.js的有力后盾,Joyent與我們分享了其對(duì)于節(jié)點(diǎn)以及應(yīng)用程序的調(diào)試方式,并就最為常見(jiàn)的外部部署問(wèn)題作出了解答。

Node.js與JavaScript各自為用戶(hù)帶來(lái)強(qiáng)大的功能與性能表現(xiàn),但二者卻又擁有自己獨(dú)特的使用成本。首先,JavaScript是一款相對(duì)較新的通用型編程語(yǔ)言;其二,Node.js堆棧所采用的錯(cuò)誤報(bào)告與調(diào)試方式相當(dāng)特殊。

[[112863]] 

當(dāng)我最近與Node.js項(xiàng)目負(fù)責(zé)人Timothy J. Fontaine探討這些問(wèn)題時(shí),他表示Joyent——以及其它一些Node.js用戶(hù)——在處理過(guò)程中采用的辦法值得我們借鑒。

“Node.js使用JavaScript并具備動(dòng)態(tài)特性,”他表示,“因此當(dāng)大家遇到問(wèn)題時(shí),很難準(zhǔn)確把握到底是哪里鬧出了毛病。在傳統(tǒng)應(yīng)用程序當(dāng)中,一旦出現(xiàn)崩潰狀況、我們能夠找到與之相關(guān)的核心文件與符號(hào)。然而在Node.js JavaScript的V8引擎當(dāng)中,如果進(jìn)程卡死、我們根本沒(méi)有足夠的信息來(lái)弄清到底是哪一步處理過(guò)程引發(fā)了故障——這是因?yàn)槿縅avaScript信息都已經(jīng)不復(fù)存在。作為僅有的途徑,大家只能通過(guò)添加更多日志記錄或者搜索現(xiàn)有日志來(lái)摸索問(wèn)題發(fā)生的原因。”

作為***知名度的Node.js部署問(wèn)題的受害者,沃爾瑪對(duì)此表示有話要說(shuō)。據(jù)稱(chēng)經(jīng)過(guò)調(diào)查,沃爾瑪方面竟然發(fā)現(xiàn)Node.js就是導(dǎo)致內(nèi)存泄露的罪魁禍?zhǔn)祝贿^(guò)Fontaine認(rèn)為這樣的情況只能算是極端性個(gè)例。他同時(shí)解釋稱(chēng),在大多數(shù)情況下、決定事態(tài)的關(guān)鍵因素在于Node.js與JavaScript的實(shí)際使用方法以及環(huán)境開(kāi)發(fā)人員對(duì)二者的熟悉程度。

“在Node.js的眾多特性當(dāng)中,最難以把握的就是它的異步本質(zhì),”Fontaine指出。“大量?jī)?nèi)容同時(shí)處于運(yùn)行當(dāng)中,相比之下PHP、Python以及Ruby的調(diào)試對(duì)象則只有單一進(jìn)程或者每個(gè)請(qǐng)求中的單一線程。因此對(duì)于JavaScript而言,即使是對(duì)堆棧進(jìn)行全盤(pán)追蹤都不足以達(dá)成調(diào)試目標(biāo)。”

為此,Joyent公司認(rèn)為大多數(shù)由Node.js部署所引發(fā)的問(wèn)題都屬于意料之外的突發(fā)事件以及應(yīng)用程序錯(cuò)誤,而且這一切在部署流程的早期階段中并不容易發(fā)現(xiàn)。

“Node設(shè)計(jì)思路所帶來(lái)的一大副產(chǎn)品在于,”Fontaine解釋道,“JavaScript是一種動(dòng)態(tài)語(yǔ)言,因此我們并不能從編譯器當(dāng)中獲取靜態(tài)運(yùn)行狀態(tài)。這一點(diǎn)既有積極的效果、也會(huì)引發(fā)消極影響,具體取決于大家的實(shí)際開(kāi)發(fā)方式。其實(shí)我們?cè)庥龅拇蟛糠止收嫌美紝儆诤芷胀ǖ膽?yīng)用程序漏洞,只不過(guò)我們很難重新構(gòu)建運(yùn)行歷史、從而再現(xiàn)曾經(jīng)引發(fā)的問(wèn)題。

為了解決調(diào)試過(guò)程中面臨的這一阻礙,Joyent公司將其自家SmartOS作為開(kāi)發(fā)平臺(tái)。SmartOS屬于OpenSloaris系統(tǒng)的一個(gè)分支,其DTrace技術(shù)成為該平臺(tái)的***特色(除了其他開(kāi)發(fā)人員之外,Joyent公司CTO Brian Cantrill也參與了該技術(shù)的開(kāi)發(fā)工作)。DTrace能夠在幾乎不影響性能表現(xiàn)的前提下對(duì)應(yīng)用程序的執(zhí)行過(guò)程進(jìn)行追蹤與概括,F(xiàn)ontaine與其他不少技術(shù)從業(yè)者都將其視為檢查Node.js運(yùn)行代碼的理想手段。

“大家可以在代碼運(yùn)行過(guò)程中查看JavaScript堆棧幀,”Fontaine解釋道。“在其它環(huán)境下,我們沒(méi)有辦法從這個(gè)層面進(jìn)行檢查。在其它平臺(tái)上,我們必須配合特殊標(biāo)來(lái)運(yùn)行Node、從而獲取額外調(diào)試信息,而這會(huì)給性能帶來(lái)負(fù)面影響。”

“Joyent之所以能夠繼續(xù)延續(xù)這種處理方式,是因?yàn)槲覀兙帉?xiě)了相關(guān)工具以幫助自身處理此類(lèi)問(wèn)題。此外,我們還積極與其他用戶(hù)接觸、將這些技術(shù)成果用于幫助他人。”

SmartOS本身是一款基于CDDL許可的免費(fèi)系統(tǒng),但大多數(shù)人顯然希望能在自己已經(jīng)在使用的系統(tǒng)平臺(tái)上獲得理想的調(diào)試工具——而隨著Node.js向著更完善的1.0版本邁進(jìn),Joyent方面可能也正在進(jìn)一步作出探索。

英文原文:http://www.infoworld.com/t/open-source-software/how-joyent-debugs-node-code-242287

責(zé)任編輯:林師授 來(lái)源: 51cto.com
相關(guān)推薦

2017-04-18 09:27:14

Visual StudNode.js調(diào)試

2016-01-12 10:38:58

Angular.js代碼調(diào)試

2021-06-15 20:59:14

Kubernetes調(diào)試容器

2012-02-02 15:14:29

Node.js

2017-12-12 13:17:36

機(jī)器學(xué)習(xí)代碼單元測(cè)試

2010-03-01 11:06:52

Python 調(diào)試器

2012-12-25 13:37:29

Android代碼混淆

2015-02-12 09:32:17

Node.jsJoyent

2010-02-22 10:18:29

Python代碼

2021-11-04 05:43:38

GoKartGo代碼靜態(tài)安全分析

2011-01-20 10:33:30

Postfix

2023-01-30 08:30:09

Tomcat性能優(yōu)化

2024-07-30 08:11:16

2010-01-05 13:29:50

JSON對(duì)象

2011-04-13 08:49:33

DataSet強(qiáng)類(lèi)型化

2021-05-06 09:33:32

OperatorKubernetes開(kāi)源

2013-05-24 09:25:27

2020-12-22 21:57:39

人臉識(shí)別AI人工智能

2010-02-02 14:11:14

Python 進(jìn)行編程

2010-05-25 10:11:06

ubuntu Grub
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)