為什么客戶端JavaScript采用傳輸源代碼而不是字節(jié)碼?
網(wǎng)友解答: 這是一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)問(wèn)題。所有的網(wǎng)絡(luò)應(yīng)用程序在進(jìn)行網(wǎng)絡(luò)通信時(shí),都要選擇應(yīng)用層通信協(xié)議,比如郵件服務(wù)器使用SMTP來(lái)傳輸電子郵件,郵件客服端使用POP3來(lái)讀取郵件,而所有瀏
這是一個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的基礎(chǔ)問(wèn)題。所有的網(wǎng)絡(luò)應(yīng)用程序在進(jìn)行網(wǎng)絡(luò)通信時(shí),都要選擇應(yīng)用層通信協(xié)議,比如郵件服務(wù)器使用SMTP來(lái)傳輸電子郵件,郵件客服端使用POP3來(lái)讀取郵件,而所有瀏覽器都使用HTTP或HTTPS協(xié)議來(lái)訪問(wèn)網(wǎng)站,從網(wǎng)站服務(wù)器讀取網(wǎng)頁(yè)資源。
HTTP和HTTPS協(xié)議都是基于文本的應(yīng)用層通信協(xié)議,設(shè)計(jì)這個(gè)協(xié)議的初衷,就是為了讓文檔具備更好的可讀性,這也是HTTP/HTTPS協(xié)議快速發(fā)展成為互聯(lián)網(wǎng)使用最廣泛的協(xié)議的原因之一。或許使用文本進(jìn)行傳輸?shù)男什蝗缍M(jìn)制高,但是更多的是優(yōu)點(diǎn)。
首先就是上文所說(shuō)的可讀性。文本的可讀性遠(yuǎn)高于其他二進(jìn)制格式的文件,這使得用戶可以用肉眼讀懂傳輸內(nèi)容,這解決了早期互聯(lián)網(wǎng)通信的痛點(diǎn)。
開(kāi)放的瀏覽器生態(tài)。由于使用文本傳輸,客戶端在執(zhí)行腳本時(shí)也不需要依賴某種固定的執(zhí)行引擎,可以自行研發(fā),避免了壟斷和各種專利的壁壘,同時(shí)也避免了各種跨平臺(tái)問(wèn)題,推動(dòng)瀏覽器的百花齊放。這一點(diǎn)十分重要,否則我們可能現(xiàn)在還在使用某一款上古瀏覽器。
隨著互聯(lián)網(wǎng)的發(fā)展,上述的問(wèn)題可能不再成為問(wèn)題,HTTP2協(xié)議也已經(jīng)制定。HTTP2協(xié)議最大的變化就是不再是文本協(xié)議,而是二進(jìn)制傳輸協(xié)議。當(dāng)然,這暫時(shí)還不會(huì)影響javascript的執(zhí)行模式,雖然傳輸過(guò)程是二進(jìn)制,但服務(wù)器只是對(duì)代碼進(jìn)行了壓縮,瀏覽器會(huì)將其解析為JAVASCRIPT代碼之后,再解釋執(zhí)行。要想達(dá)到直接傳輸編譯好的字節(jié)碼,需要統(tǒng)一JAVASACRIPT引擎,這是一項(xiàng)復(fù)雜的工作,目前沒(méi)有看到這方面的動(dòng)向。
歡迎大家批評(píng)指正。如果喜歡我的回答,一定記得點(diǎn)贊和關(guān)注,謝謝!