摘要:從字節流到字符流使用各種各樣的編輯器編寫文檔時,使用的編碼格式是不一樣的,如,等。解碼這一步驟就發生在,從字節流到字符流這一過程中。到此,完成了從字節流到樹的過程,。
TA就是,HTML解釋器
從WebKit內核的HTML解釋器的角度來看HTML。了解HTML文檔是如何從字節流,一步步到DOM樹的。理解這個過程,很多前端開發時一知半解的問題都能夠很好地理解了。
總覽解釋過程首先HTML解釋器接受到的是字節流(Bytes),經過解碼之后是字符流(Characters),然后通過詞法分析器切成詞語(Tokens),之后經過語法分析器構建成節點(Node),最后這些節點被組建成一棵DOM樹(Document Object Model Tree)。
幾乎所有的語言都有類似的一個“編譯”過程,我們可以不關心每個流程中具體代碼的細節,但每個過程發生了什么還是要了解的。
從字節流(Bytes)到字符流(Characters)使用各種各樣的編輯器編寫HTML文檔時,使用的編碼格式是不一樣的,如UTF-8,GBK等。這些編輯器的保存實際上就是把字符流使用編碼格式保存成字節流文件的過程。而這些使用的編碼格式之所以要在HTML文檔內部注明,就是為了瀏覽器的HTML解釋器能夠正確地進行解碼。
解碼這一步驟就發生在,從字節流(Bytes)到字符流(Characters)這一過程中。
如果解釋器在HTML網頁中找到了設置的編碼格式,WebKit會使用相應的解碼器將字節流轉換成特定格式的字符串。如果沒有,則會使用默認的(UTF-8)來解碼。
所以,您知道如何解決網頁亂碼問題了吧,在網絡爬蟲中,經常涉及網頁亂碼問題哦。
從字符流(Characters)到詞語(Tokens)這個過程一般叫詞法分析,在WebKit中使用一個狀態機來完成,總之就是輸入字符串,輸出一個個詞語。在自然語言處理中,也有類似的過程,叫分詞。
WebKit定義了6中詞語類別,DOCTYPE,StartTag,EndTag,Comment,Character,EndOfFile。
分詞之后,WebKit還會做一些安全處理。
Webkit接下來會對安全的詞語,更具詞語的6類別,分別調用類似processXXX這樣的不同的函數,來將詞語處理成節點。
從節點(Node)到DOM樹(Document Object Model Tree)類比其他語言,會根據詞法分析的結果構建語法樹,而HTML則構建的是DOM樹。
因為HTML文檔的Tag標簽是有開始和結束標記的,類似括號匹配,不難想象可以利用數據結構棧來實現DOM樹的構建。有興趣可以去了解下,如何編程實現計算任意的1+3*(5-3)這類表達式......
另外,當我們忘記書寫一個Tag的結束標記時,在構建DOM樹的過程中,會利用棧的特性幫我們自動補上。
到此,完成了從字節流到DOM樹的過程,^_^。
當然這里假設只有HTML。
參考書籍:《WebKit技術內幕》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/54323.html
摘要:從字節流到字符流使用各種各樣的編輯器編寫文檔時,使用的編碼格式是不一樣的,如,等。解碼這一步驟就發生在,從字節流到字符流這一過程中。到此,完成了從字節流到樹的過程,。 TA就是,HTML解釋器 從WebKit內核的HTML解釋器的角度來看HTML。了解HTML文檔是如何從字節流,一步步到DOM樹的。理解這個過程,很多前端開發時一知半解的問題都能夠很好地理解了。 總覽解釋過程 首先HTM...
摘要:概述的解釋器優化器代碼可能在字節碼或者優化后的機器碼狀態下執行,而生成字節碼速度很快,而生成機器碼就要慢一些了。比如有一個函數,從獲取值引擎生成的字節碼結構是這樣的指令是獲取參數指向的對象,并存儲在,第二步則返回。 1 引言 本期精讀的文章是:JS 引擎基礎之 Shapes and Inline Caches 一起了解下 JS 引擎是如何運作的吧! JS 的運作機制可以分為 AST 分...
摘要:前幾天寫一篇,一種新思路實現分布式事務的文章。寫個分布式事務就有人開始噴了事務提交了,怎么回滾都知道怎么回滾。 前幾天寫一篇 , 一種新思路實現分布式事務的文章。https://segmentfault.com/a/11... 部分死腦筋就開始,各種不解。看反饋 確實有點搞笑。 不要一聽到 session 就覺得是 $_SEESION不要別人換個名字 token 或者 jwt 就不認識...
閱讀 1829·2021-09-14 18:03
閱讀 2267·2019-08-30 15:48
閱讀 1121·2019-08-30 14:09
閱讀 507·2019-08-30 12:55
閱讀 2724·2019-08-29 11:29
閱讀 1483·2019-08-26 13:43
閱讀 2311·2019-08-26 13:30
閱讀 2369·2019-08-26 12:17