成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

瀏覽器工作過(guò)程詳解(譯)(二)

fasss / 2967人閱讀

摘要:每種可解析的格式必須具有由詞匯及語(yǔ)法規(guī)則組成的特定的文法,這被稱為上下文無(wú)關(guān)文法。解析器將會(huì)從詞法分析器獲取一個(gè)新符號(hào),并且嘗試用某一種語(yǔ)法規(guī)則去匹配它。第二個(gè)匹配到規(guī)則的是,它匹配到第三條語(yǔ)法規(guī)則。

銜接

接著上文繼續(xù)。

在構(gòu)建好render樹(shù)后,瀏覽器就開(kāi)始進(jìn)行布局了。這意味著瀏覽器會(huì)給每個(gè)節(jié)點(diǎn)正確的坐標(biāo),讓它們出現(xiàn)在該出現(xiàn)的地方。下一步就是進(jìn)行繪制了,瀏覽器將會(huì)遍歷render樹(shù),每一個(gè)節(jié)點(diǎn)都會(huì)被UI后端層所繪制。

很重要的一點(diǎn)是,這整個(gè)過(guò)程是漸進(jìn)性的。為了更好的用戶體驗(yàn),渲染引擎會(huì)盡快地解析內(nèi)容到屏幕上。它并不會(huì)等到html完全被解析才開(kāi)始創(chuàng)建和布局render樹(shù)。一部分內(nèi)容被解析了,那它就會(huì)立刻被繪制到頁(yè)面上,這這個(gè)過(guò)程中,瀏覽器可能還在請(qǐng)求剩余部分的內(nèi)容。

主要流程實(shí)例

圖3 :Webkit 主要流程

圖4 :Mozilla 的Gecko渲染引擎主要流程

從圖3和圖4你可以看到,雖然Webkit和Gecko在某些術(shù)語(yǔ)上稍有不同,但是主要流程是基本相同的。

Gecko把可見(jiàn)的格式化元素組成的樹(shù)為“Frame”樹(shù)。每一個(gè)元素都是一個(gè)frame。Webkit則把每一個(gè)渲染對(duì)象組成的樹(shù)稱為render樹(shù)。對(duì)每一個(gè)元素的定位,Webkit稱為布局,而Gecko稱為回流。Webkit稱利用dom節(jié)點(diǎn)及樣式信息去構(gòu)建render樹(shù)的過(guò)程為attachment,Gecko在html和dom樹(shù)之間附加了一層,這層稱為內(nèi)容接收器,相當(dāng)制造dom元素的工廠。下面將討論流程中的各個(gè)階段。

解析

解析是渲染引擎執(zhí)行過(guò)程中非常重要的部分,我們將會(huì)稍微深入地去探討一下。讓我們先來(lái)簡(jiǎn)單介紹一下什么是解析。

解析一個(gè)文檔意味著需要將內(nèi)容翻譯成某種編碼能夠理解和使用的結(jié)構(gòu)。而解析的結(jié)果通常是能夠表達(dá)文檔結(jié)構(gòu)的節(jié)點(diǎn)樹(shù)。它被稱為解析樹(shù)或語(yǔ)法樹(shù)。

舉例來(lái)說(shuō),解析表達(dá)式“2+3-1”,應(yīng)該返回如下的樹(shù):

圖5:數(shù)學(xué)表達(dá)式的樹(shù)結(jié)構(gòu)

語(yǔ)法

解析過(guò)程依賴于文檔遵從的語(yǔ)法規(guī)則——文檔的語(yǔ)言或格式。每種可解析的格式必須具有由詞匯及語(yǔ)法規(guī)則組成的特定的文法,這被稱為上下文無(wú)關(guān)文法。人類的語(yǔ)言不具有這一特點(diǎn),所以不能被常規(guī)的解析技術(shù)所解析。

解析器-詞法分析器

解析過(guò)程可以被分為兩個(gè)過(guò)程-詞法分析和語(yǔ)法分析。

詞法分析是把輸入解釋成符號(hào)的過(guò)程,而符號(hào),是組成語(yǔ)言的基本有效單元。它相當(dāng)于字典中所有的單詞,用以組成和表現(xiàn)人類語(yǔ)言。

語(yǔ)法分析是指應(yīng)用語(yǔ)法規(guī)則。

通常情況下,解析器將工作分配給兩個(gè)組件 - 詞法分析器(有時(shí)也被稱作標(biāo)記解析器)主要負(fù)責(zé)把輸入分解成合法的符號(hào),語(yǔ)法分析器主要負(fù)責(zé)依靠語(yǔ)法規(guī)則來(lái)分析文檔結(jié)構(gòu),并構(gòu)建出解析樹(shù)。詞法分析器知道如何跳過(guò)類似空白符或者換行符之類的無(wú)關(guān)字符。

圖6:從源文檔到解析樹(shù)

解析過(guò)程是重復(fù)迭代的。解析器將會(huì)從詞法分析器獲取一個(gè)新符號(hào),并且嘗試用某一種語(yǔ)法規(guī)則去匹配它。如果有規(guī)則匹配到了,那么該符號(hào)相應(yīng)的節(jié)點(diǎn)將會(huì)被添加到解析樹(shù)中,然后解析器會(huì)接著解析下一個(gè)符號(hào)。

如果沒(méi)有規(guī)則可以匹配該符號(hào),解析器將會(huì)在內(nèi)部保存下這個(gè)符號(hào),并繼續(xù)獲取下一個(gè)符號(hào),直到有一條語(yǔ)法規(guī)則可以匹配所有內(nèi)部存儲(chǔ)的符號(hào)。如果到最后還是沒(méi)有找到能夠匹配的規(guī)則,那么解析器將會(huì)拋出一個(gè)異常。這意味著該文檔不合法或者有語(yǔ)法錯(cuò)誤。

轉(zhuǎn)換過(guò)程

通常情況下,解析樹(shù)并不是最終的結(jié)果。解析通常在轉(zhuǎn)換過(guò)程中使用,而轉(zhuǎn)換用于將輸入文檔轉(zhuǎn)成另一種格式。編譯過(guò)程就是一個(gè)例子。編譯器將源代碼編譯成機(jī)器碼時(shí),首先做的就是把它解析成解析樹(shù),然后再將解析樹(shù)轉(zhuǎn)化成機(jī)器碼文檔。

圖7:編譯流程

解析實(shí)例

在圖5中,我們基于一段數(shù)學(xué)表達(dá)式創(chuàng)建了一棵解析樹(shù)。讓我們來(lái)嘗試定義一門(mén)簡(jiǎn)單的數(shù)學(xué)語(yǔ)言,然后看看解析過(guò)程。

詞匯表:我們的語(yǔ)言包括了整數(shù)、加號(hào)和減號(hào)。

語(yǔ)法:

我們的語(yǔ)言的基本組成時(shí)表達(dá)式、術(shù)語(yǔ)和操作符

可以包含多個(gè)表達(dá)式

兩個(gè)術(shù)語(yǔ)(term)通過(guò)操作符連接,這就形成一個(gè)表達(dá)式

操作符只能是加號(hào)或減號(hào)

一個(gè)術(shù)語(yǔ)(term)只能是一個(gè)整數(shù)或者一個(gè)表達(dá)式

讓我們來(lái)分析一下輸入“2+3-1”后發(fā)生了什么。

第一個(gè)匹配到規(guī)則的子串是“2”,根據(jù)規(guī)則5,它是一個(gè)術(shù)語(yǔ)(term)。第二個(gè)匹配到規(guī)則的是“2+3”,它匹配到第三條語(yǔ)法規(guī)則。下一次匹配將會(huì)在這個(gè)輸入的最后?!?+3-1”是一段表達(dá)式,因?yàn)槲覀円呀?jīng)知道“2+3”是一個(gè)術(shù)語(yǔ)(term),接下去的“-”是一個(gè)操作符,再后面“1”是一個(gè)整數(shù),也就是術(shù)語(yǔ)(term),這匹配了規(guī)則3。而“2++”不會(huì)匹配任何語(yǔ)法,所以它是一個(gè)非法輸入。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/50724.html

相關(guān)文章

  • 覽器工作過(guò)程詳解)(一)

    摘要:值得注意的是,谷歌瀏覽器和大多數(shù)瀏覽器不同,每一個(gè)選項(xiàng)卡都是渲染引擎的一個(gè)實(shí)例,都擁有獨(dú)立的進(jìn)程。組件之間的通信火狐和谷歌都發(fā)展了一個(gè)特殊的通信結(jié)構(gòu),后面我們將會(huì)單獨(dú)來(lái)講。渲染引擎我們所討論的幾款瀏覽器火狐谷歌都是基于兩種渲染引擎建立的。 寫(xiě)在前面 這篇文章是一篇譯文,年代有點(diǎn)久,部分內(nèi)容有過(guò)時(shí),請(qǐng)讀者仔細(xì)閱讀,翻譯自How browser work,原文地址為點(diǎn)擊這里查看原文 簡(jiǎn)介 ...

    陳江龍 評(píng)論0 收藏0
  • css - 收藏集 - 掘金

    摘要:絕對(duì)底部前端掘金來(lái)自國(guó)外的設(shè)計(jì)達(dá)人,純,可以實(shí)現(xiàn)當(dāng)正文內(nèi)容很少時(shí),底部位于窗口最下面。有效解決圖片使用單位邊角缺失的問(wèn)題前端掘金起因在移動(dòng)端使用布局時(shí)圖片也需要用單位。 CSS 絕對(duì)底部 - 前端 - 掘金來(lái)自國(guó)外的設(shè)計(jì)達(dá)人,純CSS,可以實(shí)現(xiàn): 當(dāng)正文內(nèi)容很少時(shí),底部位于窗口最下面。當(dāng)改變窗口高度時(shí),不會(huì)出現(xiàn)重疊問(wèn)題。甚至,創(chuàng)造該CSS的人還專門(mén)成立一個(gè)網(wǎng)站介紹這個(gè)CSS底部布局方案...

    phpmatt 評(píng)論0 收藏0
  • CSS及布局

    摘要:經(jīng)過(guò)半年的打磨,正式發(fā)布,主要是新增了一些常用組件,并使用命名,為接下來(lái)的微信小程序開(kāi)發(fā)做好準(zhǔn)備。這兩種方式實(shí)現(xiàn)的瀑布流式布局均支持首屏和網(wǎng)頁(yè)窗口大小改變時(shí)的列數(shù)自適應(yīng)。主要是對(duì)于標(biāo)準(zhǔn)里的布局方式草案中的布局方式進(jìn)行一些總結(jié)。 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問(wèn)題:怎樣通過(guò) CSS 簡(jiǎn)單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開(kāi)始學(xué)習(xí) CSS 的時(shí)候,看...

    jaysun 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...

    tuniutech 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<