Sobes.tech
Middle+

როგორ ანალიზებს ბრაუზერი HTML ფაილს?

sobes.tech AI

პასუხი AI-სგან

ბრაუზერი კითხულობს HTML ფაილს ბაიტ-ბაიტ. ფაილის კოდირების საფუძველზე იქმნება სიმბოლოთა ნაკადი. ეს ნაკადი პარსდება, ფორმირდება ტოკენები (გახსნის და დახურვის ტეგი, ტექსტი, კომენტარი, doctype). ტოკენები გარდაიქმნება ნოდებად (nodes), რომლებიც დაკავშირებულია ხე-ტყეზე — Document Object Model (DOM).

პარსინგის პროცესი მიმდინარეობს შემდეგ ეტაპებზე:

  1. ბაიტების კითხვა: ბრაუზერი იღებს ბაიტების ნაკადს.
  2. კოდირების განსაზღვრა: განსაზღვრა ფაილის კოდირებაზე (მაგალითად, UTF-8, Windows-1251). ეს შეიძლება მოხდეს HTTP სათაურებით, <meta> ტეგებით ან ავტომატურად.
  3. სიმბოლოთა გარდაქმნა: ბაიტები გარდაიქმნება სიმბოლოებად შესაბამის კოდირებაზე.
  4. ტოკენიზაცია: სიმბოლოთა ნაკადი ნაწილდება ტოკენებად.
    <!-- ტოკენების მაგალითი -->
    <p> // ტოკენი: გახსნის ტეგი "p"
      გამარჯობა, // ტოკენი: ტექსტი "გამარჯობა, "
      მსოფლიო! // ტოკენი: ტექსტი "მსოფლიო!"
    </p> // ტოკენი: დახურვის ტეგი "p"
    
  5. AST (DOM ხე) მშენებლობა: ტოკენების სერიის საფუძველზე, იქმნება ნოდების ხე (DOM). ბრაუზერი ინახავს გახსნილი ტეგების სტეკს; როდესაც შეხვდება დახურვის ტეგს, ის დახურავს შესაბამის გახსნის ტეგს სტეკიდან და დაამატებს მის ნოდს ხეს.
    <!-- მარტივი DOM სტრუქტურა -->
    <!DOCTYPE html>
    <html>
      <head>
        <title>მაგალითი</title>
      </head>
      <body>
        <p>ტექსტი</p>
      </body>
    </html>
    
    // DOM ხე იქნება სტრუქტურით, რომელიც ასახავს ტეგების შიგთავსს.
    // მაგალითად, "p" ნოდი იქნება "body" ნოდის შთამომავალი.
    
  6. სკრიპტებისა და სტილების პარსინგი: HTML-ის პარსინგის დროს, ბრაუზერი ხვდება <script> და <link>/<style> ტეგებს:
    • <script>: თავდაპირველად, HTML-ის პარსინგი შეჩერდება, სკრიპტი იტვირთება, პარსდება და შესრულდება. შესრულების შემდეგ, HTML-ის პარსინგი განახლდება. async და defer ატრიბუტები ამ ქცევას იცვლიან. async ასინქრონულად ასრულებს სკრიპტს, პარსინგს არ აფერხებს. defer გადადებს სკრიპტის შესრულებას HTML-ის პარსინგის დასრულებამდე.
    • <link> / <style>: CSS პარალელურად პარსდება HTML-ისთან და ქმნის CSS ობიექტურ მოდელს (CSSOM). <link>-ის არსებობა <script>-ის წინ შეიძლება დააგვიანოს სკრიპტის შესრულება, რადგან ბრაუზერი შეიძლება დაელოდოს CSSOM-ის შექმნას, რათა უზრუნველყოს სტილების სწორად გამოყენება სკრიპტის შესრულებამდე।