<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rio Rifaldi</title>
    <description>The latest articles on DEV Community by Rio Rifaldi (@riorifaldi2004).</description>
    <link>https://dev.to/riorifaldi2004</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1709063%2F87bdf8f4-b236-4b58-bbee-144761349253.png</url>
      <title>DEV Community: Rio Rifaldi</title>
      <link>https://dev.to/riorifaldi2004</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/riorifaldi2004"/>
    <language>en</language>
    <item>
      <title>how does browser render webpage?</title>
      <dc:creator>Rio Rifaldi</dc:creator>
      <pubDate>Sun, 16 Nov 2025 16:15:46 +0000</pubDate>
      <link>https://dev.to/riorifaldi2004/how-does-browser-render-webpage-1cdp</link>
      <guid>https://dev.to/riorifaldi2004/how-does-browser-render-webpage-1cdp</guid>
      <description>&lt;h2&gt;
  
  
  what is rendering?
&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Rendering a webpage is the process of turning HTML, CSS, and JavaScript code into an interactive page that website visitors expect to see when clicking on a link.&lt;/em&gt;"&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://qarea.com/blog/webpage-rendering-how-it-works-tips-on-optimization#:~:text=What%20does%20webpage%20rendering%20mean,when%20clicking%20on%20a%20link." class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Qarea   🔗&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Rendering is the process of generating HTML markup to display web pages in the browser"&lt;/em&gt;&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://www.netlify.com/blog/the-acronyms-of-rendering/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Netlfy blog   🔗&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;br&gt;
basicly rendering is a process generating HTML to display on web browser. so, what kind of "&lt;strong&gt;&lt;em&gt;process&lt;/em&gt;&lt;/strong&gt;" is it?&lt;br&gt;
before we deep dive into it, let's understand how browser processing HTML CSS &amp;amp; Javascript and then showing up as beautiful UI for you.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flo37wnl3aeq8r0y8lwwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flo37wnl3aeq8r0y8lwwm.png" alt="Github"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;when you click website like &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;Github&lt;/a&gt;, what actually happen is you're visiting &lt;a href="//140.82.116.4"&gt;140.82.116.4&lt;/a&gt; IP address. This IP is github server website which will directing you to   github landing page. This is the actual domain name, but the problem is it's not human readable. Client usually not remember this some of bouch number, this were &lt;a href="https://www.cloudflare.com/learning/dns/what-is-dns/" rel="noopener noreferrer"&gt;DNS&lt;/a&gt; come in place.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;The Domain Name System (DNS) is the phonebook of the Internet. Humans access information online through domain names, like nytimes.com or espn.com.&lt;/em&gt;" &lt;br&gt;
 &lt;br&gt;
&lt;a href="https://www.cloudflare.com/learning/dns/what-is-dns/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;cloudflare&lt;/a&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The main goal is making this &lt;a href="//140.82.116.4"&gt;140.82.116.4&lt;/a&gt; some short of IP become human readable domain like github used &lt;code&gt;www.github.com&lt;/code&gt;.&lt;br&gt;
So where i got this IP? the easies way is visit &lt;a href="https://www.nslookup.io/" rel="noopener noreferrer"&gt;nslookup.io&lt;/a&gt; then type which domain do you want to search &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eawgqi2m1w2xvnb6ktm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eawgqi2m1w2xvnb6ktm.png" alt="Image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;We have done with DNS, let's comeback to scenario. The moment you open github landing page, click right on your mouse / trackpad &amp;gt; click inspect &amp;gt; open Network tab &amp;gt; hit refresh page&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2dplnyubqe8jy75gey7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2dplnyubqe8jy75gey7.png" alt="Image"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;This bouch of information was recieved by browser from github server. Notice that on red reactangle there is a text &lt;code&gt;Content-Type: text/html; charset=utf-8&lt;/code&gt;, what does mean?&lt;br&gt;
it's mean this selected file that coming from github server was formated as text/Html content with charset of &lt;em&gt;utf-8&lt;/em&gt;. &lt;br&gt;
this is true because if you click on &lt;em&gt;Response&lt;/em&gt; tab, there is full of HTML code and on previous tab is the preview but no styling yet.&lt;br&gt;
so what is next process?&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Parsing
&lt;/h2&gt;



&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Parsing means analyzing and converting a program into an internal format that a runtime environment can actually run, for example the JavaScript engine inside browsers.&lt;/em&gt;"&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Parse" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;MDN    🔗&lt;/a&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;HTML parsing is basically: taking in HTML code and extracting relevant information like the title of the page, paragraphs in the page, headings in the page, links, bold text etc.&lt;/em&gt;"&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/20421316/what-does-html-parsing-mean" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;stackoverflow    🔗&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufthzh8e57g7s8ocs40l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufthzh8e57g7s8ocs40l.png" alt="Image diagram"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;first of all cloud server (or anything from resources, it can be your local disk when you develop app locally) will send html first as row byte of data&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdphchnqj2wmdfs1nzyqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdphchnqj2wmdfs1nzyqy.png" alt="code to transform to binary"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;what happened is imagine you have HTML tag on server which &lt;code&gt;&amp;lt;h1 class="username" id="user-name" custome-attribute="hello there"&amp;gt;my name is rio rifaldi&amp;lt;/h1&amp;gt;&lt;/code&gt;.&lt;br&gt;
for delivering purposes, this particular HTML must be encoded into binary data. the result of &lt;code&gt;console.log&lt;/code&gt; above will be this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd66fhczo3pczzk1zhqbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd66fhczo3pczzk1zhqbw.png" alt="binary code result on log"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;did you see the &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;1&lt;/code&gt; number? that is &lt;a href="https://en.wikipedia.org/wiki/Binary_code" rel="noopener noreferrer"&gt;&lt;em&gt;binary code&lt;/em&gt;&lt;/a&gt;.&lt;br&gt;
this binary will delivering through cloud / network to your computer, in this case can be your favorite browser. When it arrived, the browser will &lt;a href="https://www.edx.org/learn/decoding#:~:text=Decoding%20in%20computer%20science%20is,be%20encoded%20and%20then%20decoded" rel="noopener noreferrer"&gt;&lt;em&gt;decoded&lt;/em&gt;&lt;/a&gt; with charset &lt;em&gt;(character of set)&lt;/em&gt;  &lt;a href="https://www.w3schools.com/html/html_charset.asp" rel="noopener noreferrer"&gt;&lt;em&gt;utf-8&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp67rn1udneyy3fnbs0td.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp67rn1udneyy3fnbs0td.png" alt="dicoding code images"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;finally we got our data, now we will focus on actual topic &lt;strong&gt;Parsing&lt;/strong&gt;. we will use library &lt;a href="https://www.npmjs.com/package/html-tokenizer" rel="noopener noreferrer"&gt;html-tokenizer&lt;/a&gt; to demonstrate the flow. name &lt;em&gt;"tokenizer"&lt;/em&gt; because on that library there are 2 main functions; &lt;code&gt;Parser&lt;/code&gt; and &lt;code&gt;Tokenizer&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;first let's jump into &lt;a href="https://www.npmjs.com/package/html-tokenizer" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, follow instruction  to download and use it in your favorite editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Tokenizer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Parser&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;html-tokenizer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// * Html Tag &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1 class="username" id="user-name" custome-attribute="hello there"&amp;gt;my name is rio rifaldi&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;reyy&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// * Parsing Html (you can get this code by copy paste in "html-tokenizer" documentation)&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;Parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Html&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`execution &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; : `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// switch (token.type) {&lt;/span&gt;
    &lt;span class="c1"&gt;//  case "open": {&lt;/span&gt;
    &lt;span class="c1"&gt;//      console.log(`Opening tag: ${token.name}`);&lt;/span&gt;
    &lt;span class="c1"&gt;//      console.log("Attributes:", token.attributes);&lt;/span&gt;
    &lt;span class="c1"&gt;//  }&lt;/span&gt;
    &lt;span class="c1"&gt;//  case "text": {&lt;/span&gt;
    &lt;span class="c1"&gt;//      console.log(`Text node: ${token.text}`);&lt;/span&gt;
    &lt;span class="c1"&gt;//  }&lt;/span&gt;
    &lt;span class="c1"&gt;//  case "close": {&lt;/span&gt;
    &lt;span class="c1"&gt;//      console.log(`Closing tag: ${token.name}`);&lt;/span&gt;
    &lt;span class="c1"&gt;//  }&lt;/span&gt;
    &lt;span class="c1"&gt;//  case "comment": {&lt;/span&gt;
    &lt;span class="c1"&gt;//      console.log(`Comment: ${token.text}`);&lt;/span&gt;
    &lt;span class="c1"&gt;//  }&lt;/span&gt;
    &lt;span class="c1"&gt;// }&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for demonstration purposes, i will comment &lt;code&gt;switch block&lt;/code&gt; and add some &lt;code&gt;console.log()&lt;/code&gt; so we can see how it works. what happened on code above is importing &lt;code&gt;Parser&lt;/code&gt; function and looping through &lt;code&gt;Html&lt;/code&gt; string from left to right. &lt;code&gt;Parser&lt;/code&gt; function will indentify which string is open tag of close tag&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;Log&lt;/span&gt; &lt;span class="nx"&gt;Result&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;custome-attribute&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello there&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;selfClosing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my name is rio rifaldi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;selfClosing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="nx"&gt;selfClosing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;reyy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;selfClosing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as you can see from code above we can explain that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the execution is true start from left to right. it's identify step by step every line of code&lt;/li&gt;
&lt;li&gt;identifier started by reading first opened tag (&lt;code&gt;&amp;lt;&lt;/code&gt;), name tag (&lt;code&gt;h1&lt;/code&gt;)  and all of attribute added (&lt;code&gt;class="username" id="user-name" custome-attribute="hello there"&lt;/code&gt;). text and closing tag does but on different execution and object&lt;/li&gt;
&lt;li&gt;if you confusing what does mean &lt;em&gt;selfClosing&lt;/em&gt; mean, &lt;code&gt;&amp;lt;input/&amp;gt; &amp;lt;hr/&amp;gt; &amp;lt;br/&amp;gt; &amp;lt;img/&amp;gt;&lt;/code&gt; these an example of &lt;em&gt;selfClosing&lt;/em&gt;. basicly &lt;em&gt;selfClosing&lt;/em&gt; is a kind of HTML tag that does not need to be closed manually by its closing tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;the whole process we have been through is &lt;strong&gt;Parsing&lt;/strong&gt;, excacly like the definition said :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;Parsing means to make something understandable (by analysing its parts).&lt;/em&gt;"&lt;br&gt;
  &lt;br&gt;
&lt;a href="https://qr.ae/p27QFA" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Quora&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;from the binary data we decode it using &lt;code&gt;utf-8&lt;/code&gt; become string, then &lt;em&gt;Parse&lt;/em&gt; it using library &lt;em&gt;html-tokenizer&lt;/em&gt;, as the result is bouch of object with identifier. these object is &lt;strong&gt;understandable&lt;/strong&gt; by browser engine so we can move to next process.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Tokenization
&lt;/h2&gt;



&lt;p&gt; &lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Tokenizer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Parser&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;html-tokenizer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="c1"&gt;// * Html Tag &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;h1 class="username" id="user-name" custome-attribute="hello there"&amp;gt;my name is rio rifaldi&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;reyy&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;Tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokenize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Html&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 

&lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;start&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;opening-tag&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attribute&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;class&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;username&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attribute&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;attribute&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;custome-attribute&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hello there&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;opening-tag-end&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my name is rio rifaldi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;closing-tag&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;opening-tag&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;opening-tag-end&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;reyy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;closing-tag&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;done&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;basicly &lt;em&gt;Tokenization&lt;/em&gt; has relation with parsing. &lt;em&gt;Tokenization&lt;/em&gt; broken down string of HTML tag into small indetifier be more specific and then convert it to array of object. you can see code above there is object &lt;code&gt;{ type: 'start' } { type: 'done' }&lt;/code&gt;, the more HTML code there are, the more object &lt;code&gt;{ type: 'closing-tag }' type: '{ closing-tag }&lt;/code&gt; is in the middle&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Create Node
&lt;/h2&gt;

&lt;p&gt;after object created and idetified, browser will convert it to node. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwmkcoi5pxduxvi4reml.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwmkcoi5pxduxvi4reml.png" alt="node diagram specific object"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;if you familiar with HTML tag, node is HTML tag but in this case with javascript object. the object itself came when you &lt;code&gt;console.dir()&lt;/code&gt; element using javascript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"username"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"heading-one"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;my name is rio rifaldi&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;heading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#heading-one&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;heading&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;inside of object there are many of instance properties, instace methods or event. simple example, you can insert text on HTML hardcodedly right? like &lt;code&gt;&amp;lt;p&amp;gt; _you text in here_ &amp;lt;/p&amp;gt;&lt;/code&gt;. but what if we want change innner text P tag using javascript? this where &lt;em&gt;instance properties&lt;/em&gt; coming.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"text-para"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;hi there,&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;   
        &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// select P tag with id text-para&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paragraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#text-para&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// override inner P tag using 'innerHTML' properties&lt;/span&gt;
&lt;span class="nx"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi there! my name is rio rifaldi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;result on web : &lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwki5oirj4ct6ks9akekw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwki5oirj4ct6ks9akekw.png" alt="result test inner HTML"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Creating DOM
&lt;/h2&gt;



&lt;blockquote&gt;
&lt;p&gt;"&lt;em&gt;The Document Object Model (DOM) is the data representation of the objects that comprise the structure and content of a document on the web&lt;/em&gt;"&lt;br&gt;
 &lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;MDN&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;in simple way, DOM makes every single your node (html tag like &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; tag) connected with some short of line become &lt;strong&gt;hierarchy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vad3t4mq8c2j79xc213.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vad3t4mq8c2j79xc213.png" alt="DOM hierarchy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;why should hierarchy?&lt;br&gt;
diagram of &lt;strong&gt;&lt;em&gt;hierarchy&lt;/em&gt;&lt;/strong&gt; above if we convert to real HTML code become like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{any text}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;{any text}&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the idea of &lt;strong&gt;&lt;em&gt;hierarchy&lt;/em&gt;&lt;/strong&gt; is the syntax HTML itself like hierarchy (has children element). with DOM you can manipulate HTML page or even CSS using logical javascript file. for example creating element, update inner text html like we did before, create &lt;em&gt;eventlistener&lt;/em&gt; etc.&lt;/p&gt;

&lt;p&gt;if we wrap it up become like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdrbp50myn9flt9oerb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdrbp50myn9flt9oerb4.png" alt="diagram DOM created "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;that was HTML file, we move to CSS file. same process with HTML, CSS will sent by server as binary -&amp;gt; Parsing -&amp;gt; Tokenization -&amp;gt; Node and instead of DOM like html, CSS turn into &lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model" rel="noopener noreferrer"&gt;CSSOM&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;now we have DOM and CSSOM, these two things is &lt;strong&gt;independent&lt;/strong&gt;. DOM for content and CSSOM for styling content. if we combine DOM and CSSOM, it will become &lt;em&gt;&lt;strong&gt;&lt;a href="https://seahawkmedia.com/tech/what-is-a-render-tree/#:~:text=A%20render%20tree%20is%20a,how%20they%20should%20be%20displayed." rel="noopener noreferrer"&gt;Render three&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
render tree will display on page browser base on height and width your screen.&lt;/p&gt;




&lt;h1&gt;
  
  
  resources
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work" rel="noopener noreferrer"&gt;Populating the page: how browsers work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.logrocket.com/how-browser-rendering-works-behind-scenes/" rel="noopener noreferrer"&gt;How browser rendering works — behind the scenes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/16363419/how-to-get-binary-string-from-arraybuffer" rel="noopener noreferrer"&gt;how to get binary string from arraybuffer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/3150293/how-does-a-parser-for-example-html-work" rel="noopener noreferrer"&gt;how does html parser work&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://medium.com/weekly-webtips/understand-dom-cssom-render-tree-layout-and-painting-9f002f43d1aa" rel="noopener noreferrer"&gt;understand DOM,CSSOM,render tree and painting&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
      <category>html</category>
    </item>
    <item>
      <title>Dual Boot Linux Zorin And Windows</title>
      <dc:creator>Rio Rifaldi</dc:creator>
      <pubDate>Sun, 16 Nov 2025 16:14:34 +0000</pubDate>
      <link>https://dev.to/riorifaldi2004/dual-boot-linux-zorin-and-windows-eed</link>
      <guid>https://dev.to/riorifaldi2004/dual-boot-linux-zorin-and-windows-eed</guid>
      <description>&lt;h3&gt;
  
  
  Reader Context
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;This article is something like my daily info that I got from Gemini AI or Internet and try to implement it in real life. All the explanation below is like personal info for me, not for real explanation to make people understand. &lt;/p&gt;

&lt;p&gt;If you find yourself a curious after reading my article and want deep detail about it, please comment below. I will answer and explain as much as possible 🤗  &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Background Story
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff61q31s04jvstpk676si.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff61q31s04jvstpk676si.png" alt="arch Linux with windows" width="800" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 Months ago I initiative to dual boot with windows and archlinux. I choose archlinux because most people on internet said that this is the minimalist Linux and the one of lightweight Linux.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Yes. Minimalist and lightweight but came with setting manual price. At that time I don't understand that concept"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I downloaded ISO file, create bootable with &lt;a href="https://rufus.ie/en/" rel="noopener noreferrer"&gt;Rufus&lt;/a&gt; on my USB stick.&lt;br&gt;
Plug in go to BIOS, setup partition &lt;em&gt;Manually&lt;/em&gt; &lt;br&gt;
Installing &lt;em&gt;Grub&lt;/em&gt; for dual boot, setup manually &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I Know takes an hours only for dealing with CLI command tasks like creating partitions and connecting to Wifi"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And then the result? &lt;strong&gt;FAILED!!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows boot configuration not found...&lt;/li&gt;
&lt;li&gt;Grub configuration broken ( version incompatible if I not mistaken) ...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So much manual setup and somehow make me traumatized installing &lt;br&gt;
Operating system via Terminal&lt;/p&gt;




&lt;p&gt;Times goes on, I try to encourage myself installing Linux dual boot again but with less manual. One candidate shown on my mind is &lt;strong&gt;Ubuntu&lt;/strong&gt;, but unfortunately &lt;a href="https://ubuntu.com/" rel="noopener noreferrer"&gt;Ubuntu&lt;/a&gt; is not the one of &lt;em&gt;lightweight&lt;/em&gt; Linux gnome.&lt;/p&gt;

&lt;p&gt;Many people suggested on Reddit to find Linux based on &lt;a href="https://www.xfce.org/" rel="noopener noreferrer"&gt;XFCE desktop environment&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;XFCE is Graphical User Interface for Linux. Basically User Interface which control file management, windows manager, setting manager etc.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;XFCE count as the one of lightweight because able to run comfortably in with &lt;strong&gt;500Mb to 1Gb of RAM&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Another example of heavier than XFCE are&lt;/em&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;GNOME (GNU Network Object Model Environment) : Ubuntu, Fedora, zorin OS Core. Has minimum requirement 2Gb of RAM&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;KDE Plasma&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;After an hours of reset, I decided to install &lt;a href="https://help.zorin.com/docs/getting-started/getting-zorin-os-lite/" rel="noopener noreferrer"&gt;Zorin Lite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi8s1bhv9tl6gtuoi3tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi8s1bhv9tl6gtuoi3tv.png" alt="Zorin Lite preview" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of you might be wondering&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"why did you choose Zorin lite? Zorin lite will be sunset in a few years ahead&lt;/em&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes that is true, but I have a few consideration here :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need to install lightweight Linux for my limited laptop spec&lt;/li&gt;
&lt;li&gt; Zorin OS is very beginner friendly for person who first ever try Linux&lt;/li&gt;
&lt;li&gt;Even on same laptop, there is windows 10 that already end support. But somehow with limited spec I can't upgrade to windows 10&lt;/li&gt;
&lt;li&gt;Just do for fun and simple project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this dual boot, Zorin OS managed it automatically without any single manual setup and works perfectly&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding How does Computer Process Before OS Booted
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyknnyicevbfat69mqf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyknnyicevbfat69mqf7.png" alt="Before boot workflow graph" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When first computer powered by electricity ( powered on ), on motherboard there is software build in called &lt;em&gt;firmware&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Firmware is basically build in motherboard's software to perform initial run for component like HDD, CPU, USB, RAM so user able to get into BIOS setting.&lt;/p&gt;

&lt;p&gt;In my Dell latitude laptop, my fan's connector on motherboard somehow detected fan but does not send electricity. So I bypassed it into another connector that has 5V.&lt;br&gt;
As the result, every time I turn on my laptop there is warning "Your fan is malfunction". This is where firmware do the Job&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After firmware checking all the component, we go into bootable section. I have mentioned before about Grub boot-loader, basically every operating system has their own bootable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On windows, we have &lt;em&gt;windows boot manager&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But if you have multiple operating system store on your hard drive, your PC must choose which OS will control my hardware. To perform these action, this is where we need &lt;strong&gt;boot-loader&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;With boot-loader if you have multiple Operating system, you can  easily&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose operating system by selecting via keyboard arrow&lt;/li&gt;
&lt;li&gt;Control Default operating system every PC boot ( auto select OS )&lt;/li&gt;
&lt;li&gt;Customize advance configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of easy use boot-loader is &lt;strong&gt;GRUB&lt;/strong&gt; &lt;br&gt;
After OS selected, this is what you see on screen ( Windows, Mac, Linux ) &lt;/p&gt;

&lt;p&gt;I hope this post useful for whoever people reading this.&lt;br&gt;
Thank you✨&lt;/p&gt;

</description>
      <category>linux</category>
      <category>microsoft</category>
      <category>programming</category>
      <category>archlinux</category>
    </item>
  </channel>
</rss>
