小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

為什么瀏覽器會(huì)使用多進(jìn)程架構(gòu)。

 求真我 2014-04-20

   在使用瀏覽器時(shí)偶然發(fā)現(xiàn)雖然僅僅打開(kāi)一個(gè)標(biāo)簽頁(yè),但是在任務(wù)管理器內(nèi)發(fā)現(xiàn)有多個(gè)瀏覽器進(jìn)程在運(yùn)行,占用了不小的內(nèi)存,當(dāng)時(shí)很納悶:為什么一個(gè)瀏覽器卻需要多個(gè)進(jìn)程呢?不經(jīng)意間在網(wǎng)上發(fā)現(xiàn)這篇文章,以Google chrome瀏覽器為例,講解了使用多進(jìn)程構(gòu)架的瀏覽器。翻譯給大家,希望對(duì)有英語(yǔ)閱讀困難的同學(xué)有所幫助,第一次翻譯技術(shù)文章好多術(shù)語(yǔ)不明白啥意思,也沒(méi)有搜到都是憑理解翻譯的。如cross-site frame,如果有錯(cuò)誤請(qǐng)不吝指正。

   原文地址:

http://blog./2008/09/multi-process-architecture.html

                             瀏覽器的多進(jìn)程構(gòu)架

   跟現(xiàn)在的很多瀏覽器不一樣,谷歌chrome瀏覽器使用多個(gè)進(jìn)程來(lái)隔離不同的網(wǎng)頁(yè)和你的計(jì)算機(jī)。在這篇博客中我將會(huì)解釋為什么在現(xiàn)在的網(wǎng)絡(luò)條件下使用多進(jìn)程架構(gòu)是一個(gè)巨大的進(jìn)步。我還會(huì)討論瀏覽器的不同部分分別屬于什么進(jìn)程以及在什么情況下google chrome為創(chuàng)建一個(gè)新的進(jìn)程。

    1:為什么在一個(gè)瀏覽器中使用多個(gè)進(jìn)程。

    在瀏覽器剛被設(shè)計(jì)出來(lái)的時(shí)候,那時(shí)的網(wǎng)頁(yè)非常的簡(jiǎn)單,幾乎沒(méi)有動(dòng)態(tài)的代碼。這對(duì)僅使用一個(gè)進(jìn)程渲染所有要訪問(wèn)的網(wǎng)頁(yè)卻仍然保持非常低的資源占有率是行得通的。

    然而在今天我們看到大量網(wǎng)頁(yè)轉(zhuǎn)而使用動(dòng)態(tài)網(wǎng)頁(yè),從含有大量javascriptflash的網(wǎng)頁(yè)到像完全成熟的網(wǎng)絡(luò)應(yīng)用如GMail。這些應(yīng)用的很大一部分是在瀏覽器中運(yùn)行的,就像運(yùn)行在操作系統(tǒng)之上的應(yīng)用程序一樣。跟操作系統(tǒng)一樣,瀏覽器必須讓這些應(yīng)用互相分離。

    除此之外,瀏覽器中負(fù)責(zé)渲染HTML,JavaScriptCSS的部分日益的復(fù)雜。在這些渲染引擎在演化的過(guò)程中會(huì)頻繁的出現(xiàn)bug,有些bug會(huì)導(dǎo)致渲染引擎崩潰。不僅如此,渲染引擎會(huì)經(jīng)常性的在網(wǎng)絡(luò)上遇到不可信、甚至是惡意的代碼,它們會(huì)利用這些漏洞在你的電腦上安裝惡意的軟件。

    在當(dāng)今世界,把所有東西都放進(jìn)一個(gè)進(jìn)程的瀏覽器面臨在健壯性,響應(yīng)速度,安全性方面的挑戰(zhàn)。如果瀏覽器中的一個(gè)網(wǎng)絡(luò)應(yīng)用崩潰的話,這回波及括所有被打開(kāi)的應(yīng)用在內(nèi)的任何其他應(yīng)用。單線程的網(wǎng)絡(luò)應(yīng)用不得不經(jīng)常相互競(jìng)爭(zhēng)以獲得的cpu時(shí)間,這有時(shí)會(huì)導(dǎo)致整個(gè)瀏覽器無(wú)法響應(yīng)。安全性也同樣不容小覷,因?yàn)閮H僅一個(gè)頁(yè)面就可以利用渲染引擎的某個(gè)漏洞獲得對(duì)整臺(tái)計(jì)算機(jī)的控制權(quán)。

    然而,并不是非這樣做不可。網(wǎng)絡(luò)應(yīng)用在設(shè)計(jì)的時(shí)候就是在瀏覽器中相互獨(dú)立且并行的運(yùn)行。它們不需要對(duì)磁盤和設(shè)備的訪問(wèn)權(quán)。這些被應(yīng)用在網(wǎng)絡(luò)上的安全策略保證了這些,使讓你在訪問(wèn)大部分的頁(yè)面時(shí)并不需要擔(dān)心數(shù)據(jù)和計(jì)算機(jī)的安全性。這意味著可以讓瀏覽器中的應(yīng)用在不破壞彼此的情況下完全相互隔離。對(duì)于瀏覽器中的插件如flash也是一樣的,它們與瀏覽器松散的耦合在一起且相互隔離,這沒(méi)有任何問(wèn)題。

    Google Chrome充分利用了這種特性,它將插件或是網(wǎng)絡(luò)應(yīng)用放在與瀏覽器本身不同的進(jìn)程中。在一個(gè)渲染引擎中的崩潰并不會(huì)影響瀏覽器本身或是其他網(wǎng)絡(luò)應(yīng)用。這意味著操作系統(tǒng)可以并發(fā)的運(yùn)行網(wǎng)絡(luò)應(yīng)用來(lái)提高響應(yīng)速度,如果一個(gè)特定的網(wǎng)絡(luò)應(yīng)用程序或是插件停止響應(yīng)時(shí)瀏覽器本身并不會(huì)被死鎖。這也意味著我們可以在一個(gè)嚴(yán)格意義上的沙箱內(nèi)運(yùn)行渲染引擎進(jìn)程,幫助減少發(fā)生錯(cuò)誤時(shí)造成的損失。

    有趣的是,使用多進(jìn)程意味著Google Chrome可以有自己的任務(wù)管理器,你可以通過(guò)右擊瀏覽器標(biāo)題欄打開(kāi)。這個(gè)任務(wù)管理器可以讓你跟蹤每個(gè)網(wǎng)絡(luò)應(yīng)用和插件的資源使用率,而不是針對(duì)整個(gè)瀏覽器。

它也可以讓你在不需要重啟瀏覽器的情況下終止任何停止響應(yīng)網(wǎng)絡(luò)應(yīng)用或插件。

    針對(duì)以上原因,Google Chrome瀏覽器的多進(jìn)程構(gòu)架與單進(jìn)程瀏覽器相比有更強(qiáng)的健壯性,更快的響應(yīng)速度,同時(shí)更安全。

     2:每個(gè)進(jìn)程內(nèi)都有什么。

     Google Chrome創(chuàng)建三種不同類型的進(jìn)程:瀏覽器進(jìn)程,渲染器進(jìn)程,插件進(jìn)程。

    瀏覽器進(jìn)程:瀏覽器進(jìn)程只有一個(gè),用于管理標(biāo)簽頁(yè)、窗口和瀏覽器本身。這個(gè)進(jìn)程同時(shí)負(fù)責(zé)處理所有跟磁盤、網(wǎng)絡(luò)、用戶輸入和顯示的交互,然而它不分析和渲染任何網(wǎng)頁(yè)內(nèi)容。

    渲染器進(jìn)程:渲染器進(jìn)程會(huì)創(chuàng)建多個(gè)進(jìn)程,每個(gè)都負(fù)責(zé)渲染網(wǎng)頁(yè)。渲染器進(jìn)程中包含用于操作HTML,JavaScript,CSS,圖片和其他內(nèi)容的復(fù)雜的邏輯。我們使用了也同樣被Apple Safari瀏覽器使用的開(kāi)源的WebKit渲染引擎實(shí)現(xiàn)以上功能。每個(gè)渲染器進(jìn)程都運(yùn)行在沙箱內(nèi),這意味著它對(duì)磁盤、網(wǎng)絡(luò)和顯示器沒(méi)有直接的訪問(wèn)權(quán)限。所有跟網(wǎng)絡(luò)應(yīng)用的交互,包括用戶輸入事件和屏幕繪制都必須通過(guò)瀏覽器進(jìn)程。這可以讓瀏覽器進(jìn)程監(jiān)視渲染器的可疑行為,一旦發(fā)現(xiàn)其從事破壞活動(dòng)就將其終止。

     插件進(jìn)程:瀏覽器進(jìn)程同樣為處于使用狀態(tài)的每種類型的插件創(chuàng)建一個(gè)進(jìn)程,如:FlashQuicktimeAdobe reader。這些進(jìn)程僅僅包含插件本身以及和瀏覽器進(jìn)程、渲染器進(jìn)程交互的膠水代碼。

    3:在什么情況下瀏覽器會(huì)創(chuàng)建進(jìn)程。

     一旦Google Chrome創(chuàng)建了一個(gè)瀏覽器進(jìn)程,它一般會(huì)為你所訪問(wèn)的每個(gè)站點(diǎn)創(chuàng)建一個(gè)渲染器進(jìn)程。這種做法旨在將不同站點(diǎn)的不同網(wǎng)頁(yè)相互隔離。

    你可以這樣認(rèn)為:瀏覽器對(duì)每個(gè)標(biāo)簽頁(yè)面使用不同的進(jìn)程,但是允許兩個(gè)相關(guān)的且屬于同一站點(diǎn)的網(wǎng)頁(yè)共享同一個(gè)渲染器進(jìn)程。例如,如果打開(kāi)另一個(gè)也使用JavaScript的標(biāo)簽頁(yè),或者你打開(kāi)了屬于同一個(gè)站點(diǎn)的新標(biāo)簽頁(yè),這些標(biāo)簽頁(yè)將會(huì)共享一個(gè)渲染器進(jìn)程。這可以讓這些標(biāo)簽頁(yè)中的頁(yè)面通過(guò)JavaScript通信,共享緩存對(duì)象。相反,如果你在標(biāo)簽頁(yè)的地址欄里輸入一個(gè)不同站點(diǎn)的URL,這個(gè)標(biāo)簽頁(yè)會(huì)被交換到一個(gè)新的渲染器進(jìn)程。

    跟已存在的頁(yè)面保持兼容對(duì)我們來(lái)講非常重要?;诖耍覀儗⒚總€(gè)站點(diǎn)定義一個(gè)像google.combbc.co.uk注冊(cè)的域名,這意味著我們可以認(rèn)為像mail.google.commaps.google.com一樣的子域名是屬于同一個(gè)站點(diǎn)。這很有必要,因?yàn)榇嬖趯儆诓煌佑蛎臉?biāo)簽頁(yè)面通過(guò)Javascript相互通信的情況,因此我們讓它們使用同一個(gè)渲染器進(jìn)程。

    然而,對(duì)這種基本的方法要有以下注意事項(xiàng)。如果創(chuàng)建太多的進(jìn)程,電腦的性能會(huì)降低,因此我們限定了創(chuàng)建渲染進(jìn)程的最大數(shù)量(大多數(shù)情況下是20)。當(dāng)達(dá)到這個(gè)限制時(shí)我們會(huì)為新標(biāo)簽頁(yè)頁(yè)面重用已經(jīng)存在的渲染器進(jìn)程。因此,同一個(gè)渲染器進(jìn)程可以被用于多個(gè)站點(diǎn)。我們不把跨站點(diǎn)的訪問(wèn)放在原來(lái)的進(jìn)程,同時(shí)也不將所有類型的交叉站點(diǎn)導(dǎo)航都交換到新的渲染器進(jìn)程。目前,我們僅僅將瀏覽器進(jìn)程本身的導(dǎo)航交換到新的標(biāo)簽頁(yè)進(jìn)程。盡管有這么多告誡,在平常使用時(shí)google chrome還是會(huì)將不同站點(diǎn)相互隔離。

對(duì)于每一種類型的插件,當(dāng)你第一次訪問(wèn)一個(gè)使用該插件的網(wǎng)頁(yè)時(shí),google chrome會(huì)創(chuàng)建一個(gè)插件進(jìn)程。只有當(dāng)所有使用該插件的所有網(wǎng)頁(yè)都被關(guān)閉之后,該進(jìn)程才會(huì)被撤銷。

隨著我們對(duì)創(chuàng)建和交換渲染器進(jìn)程策略的進(jìn)一步細(xì)化,我們會(huì)發(fā)布更多的博客。同時(shí)我們希望在你使用Google chrome時(shí)會(huì)體驗(yàn)到多進(jìn)程構(gòu)建帶來(lái)的諸多好處。

                                                   本文由Charlie Reis發(fā)表

                                                      ithzhang翻譯

                                                     轉(zhuǎn)載請(qǐng)注明出處,謝謝?。?/span>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多