亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

站在TA的角度來(lái)看HTML,認(rèn)識(shí)會(huì)大不一樣

helloworldcoding / 3032人閱讀

摘要:從字節(jié)流到字符流使用各種各樣的編輯器編寫(xiě)文檔時(shí),使用的編碼格式是不一樣的,如,等。解碼這一步驟就發(fā)生在,從字節(jié)流到字符流這一過(guò)程中。到此,完成了從字節(jié)流到樹(shù)的過(guò)程,。

TA就是,HTML解釋器

從WebKit內(nèi)核的HTML解釋器的角度來(lái)看HTML。了解HTML文檔是如何從字節(jié)流,一步步到DOM樹(shù)的。理解這個(gè)過(guò)程,很多前端開(kāi)發(fā)時(shí)一知半解的問(wèn)題都能夠很好地理解了。

總覽解釋過(guò)程

首先HTML解釋器接受到的是字節(jié)流(Bytes),經(jīng)過(guò)解碼之后是字符流(Characters),然后通過(guò)詞法分析器切成詞語(yǔ)(Tokens),之后經(jīng)過(guò)語(yǔ)法分析器構(gòu)建成節(jié)點(diǎn)(Node),最后這些節(jié)點(diǎn)被組建成一棵DOM樹(shù)(Document Object Model Tree)。

幾乎所有的語(yǔ)言都有類(lèi)似的一個(gè)“編譯”過(guò)程,我們可以不關(guān)心每個(gè)流程中具體代碼的細(xì)節(jié),但每個(gè)過(guò)程發(fā)生了什么還是要了解的。

從字節(jié)流(Bytes)到字符流(Characters)

使用各種各樣的編輯器編寫(xiě)HTML文檔時(shí),使用的編碼格式是不一樣的,如UTF-8,GBK等。這些編輯器的保存實(shí)際上就是把字符流使用編碼格式保存成字節(jié)流文件的過(guò)程。而這些使用的編碼格式之所以要在HTML文檔內(nèi)部注明,就是為了瀏覽器的HTML解釋器能夠正確地進(jìn)行解碼。

解碼這一步驟就發(fā)生在,從字節(jié)流(Bytes)到字符流(Characters)這一過(guò)程中。

如果解釋器在HTML網(wǎng)頁(yè)中找到了設(shè)置的編碼格式,WebKit會(huì)使用相應(yīng)的解碼器將字節(jié)流轉(zhuǎn)換成特定格式的字符串。如果沒(méi)有,則會(huì)使用默認(rèn)的(UTF-8)來(lái)解碼。

所以,您知道如何解決網(wǎng)頁(yè)亂碼問(wèn)題了吧,在網(wǎng)絡(luò)爬蟲(chóng)中,經(jīng)常涉及網(wǎng)頁(yè)亂碼問(wèn)題哦。

從字符流(Characters)到詞語(yǔ)(Tokens)

這個(gè)過(guò)程一般叫詞法分析,在WebKit中使用一個(gè)狀態(tài)機(jī)來(lái)完成,總之就是輸入字符串,輸出一個(gè)個(gè)詞語(yǔ)。在自然語(yǔ)言處理中,也有類(lèi)似的過(guò)程,叫分詞。

WebKit定義了6中詞語(yǔ)類(lèi)別,DOCTYPE,StartTag,EndTag,Comment,Character,EndOfFile。
分詞之后,WebKit還會(huì)做一些安全處理。

從詞語(yǔ)(Tokens)到節(jié)點(diǎn)(Node)

Webkit接下來(lái)會(huì)對(duì)安全的詞語(yǔ),更具詞語(yǔ)的6類(lèi)別,分別調(diào)用類(lèi)似processXXX這樣的不同的函數(shù),來(lái)將詞語(yǔ)處理成節(jié)點(diǎn)。

從節(jié)點(diǎn)(Node)到DOM樹(shù)(Document Object Model Tree)

類(lèi)比其他語(yǔ)言,會(huì)根據(jù)詞法分析的結(jié)果構(gòu)建語(yǔ)法樹(shù),而HTML則構(gòu)建的是DOM樹(shù)。

因?yàn)镠TML文檔的Tag標(biāo)簽是有開(kāi)始和結(jié)束標(biāo)記的,類(lèi)似括號(hào)匹配,不難想象可以利用數(shù)據(jù)結(jié)構(gòu)棧來(lái)實(shí)現(xiàn)DOM樹(shù)的構(gòu)建。有興趣可以去了解下,如何編程實(shí)現(xiàn)計(jì)算任意的1+3*(5-3)這類(lèi)表達(dá)式......

另外,當(dāng)我們忘記書(shū)寫(xiě)一個(gè)Tag的結(jié)束標(biāo)記時(shí),在構(gòu)建DOM樹(shù)的過(guò)程中,會(huì)利用棧的特性幫我們自動(dòng)補(bǔ)上。

到此,完成了從字節(jié)流到DOM樹(shù)的過(guò)程,^_^。

當(dāng)然這里假設(shè)只有HTML。

參考書(shū)籍:《WebKit技術(shù)內(nèi)幕》

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79419.html

相關(guān)文章

  • 站在TA角度來(lái)看HTML,認(rèn)識(shí)會(huì)大不一樣

    摘要:從字節(jié)流到字符流使用各種各樣的編輯器編寫(xiě)文檔時(shí),使用的編碼格式是不一樣的,如,等。解碼這一步驟就發(fā)生在,從字節(jié)流到字符流這一過(guò)程中。到此,完成了從字節(jié)流到樹(shù)的過(guò)程,。 TA就是,HTML解釋器 從WebKit內(nèi)核的HTML解釋器的角度來(lái)看HTML。了解HTML文檔是如何從字節(jié)流,一步步到DOM樹(shù)的。理解這個(gè)過(guò)程,很多前端開(kāi)發(fā)時(shí)一知半解的問(wèn)題都能夠很好地理解了。 總覽解釋過(guò)程 首先HTM...

    余學(xué)文 評(píng)論0 收藏0
  • 精讀《JS 引擎基礎(chǔ)之 Shapes and Inline Caches》

    摘要:概述的解釋器優(yōu)化器代碼可能在字節(jié)碼或者優(yōu)化后的機(jī)器碼狀態(tài)下執(zhí)行,而生成字節(jié)碼速度很快,而生成機(jī)器碼就要慢一些了。比如有一個(gè)函數(shù),從獲取值引擎生成的字節(jié)碼結(jié)構(gòu)是這樣的指令是獲取參數(shù)指向的對(duì)象,并存儲(chǔ)在,第二步則返回。 1 引言 本期精讀的文章是:JS 引擎基礎(chǔ)之 Shapes and Inline Caches 一起了解下 JS 引擎是如何運(yùn)作的吧! JS 的運(yùn)作機(jī)制可以分為 AST 分...

    Tecode 評(píng)論0 收藏0
  • PHP 微服務(wù)之【分布式事務(wù)】閱讀提示

    摘要:前幾天寫(xiě)一篇,一種新思路實(shí)現(xiàn)分布式事務(wù)的文章。寫(xiě)個(gè)分布式事務(wù)就有人開(kāi)始噴了事務(wù)提交了,怎么回滾都知道怎么回滾。 前幾天寫(xiě)一篇 , 一種新思路實(shí)現(xiàn)分布式事務(wù)的文章。https://segmentfault.com/a/11... 部分死腦筋就開(kāi)始,各種不解??捶答?確實(shí)有點(diǎn)搞笑。 不要一聽(tīng)到 session 就覺(jué)得是 $_SEESION不要?jiǎng)e人換個(gè)名字 token 或者 jwt 就不認(rèn)識(shí)...

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

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

0條評(píng)論

閱讀需要支付1元查看
<