Middle+
როგორ ანალიზებს ბრაუზერი HTML ფაილს?
sobes.tech AI
პასუხი AI-სგან
ბრაუზერი კითხულობს HTML ფაილს ბაიტ-ბაიტ. ფაილის კოდირების საფუძველზე იქმნება სიმბოლოთა ნაკადი. ეს ნაკადი პარსდება, ფორმირდება ტოკენები (გახსნის და დახურვის ტეგი, ტექსტი, კომენტარი, doctype). ტოკენები გარდაიქმნება ნოდებად (nodes), რომლებიც დაკავშირებულია ხე-ტყეზე — Document Object Model (DOM).
პარსინგის პროცესი მიმდინარეობს შემდეგ ეტაპებზე:
- ბაიტების კითხვა: ბრაუზერი იღებს ბაიტების ნაკადს.
- კოდირების განსაზღვრა: განსაზღვრა ფაილის კოდირებაზე (მაგალითად, UTF-8, Windows-1251). ეს შეიძლება მოხდეს HTTP სათაურებით,
<meta>ტეგებით ან ავტომატურად. - სიმბოლოთა გარდაქმნა: ბაიტები გარდაიქმნება სიმბოლოებად შესაბამის კოდირებაზე.
- ტოკენიზაცია: სიმბოლოთა ნაკადი ნაწილდება ტოკენებად.
<!-- ტოკენების მაგალითი --> <p> // ტოკენი: გახსნის ტეგი "p" გამარჯობა, // ტოკენი: ტექსტი "გამარჯობა, " მსოფლიო! // ტოკენი: ტექსტი "მსოფლიო!" </p> // ტოკენი: დახურვის ტეგი "p" - AST (DOM ხე) მშენებლობა: ტოკენების სერიის საფუძველზე, იქმნება ნოდების ხე (DOM). ბრაუზერი ინახავს გახსნილი ტეგების სტეკს; როდესაც შეხვდება დახურვის ტეგს, ის დახურავს შესაბამის გახსნის ტეგს სტეკიდან და დაამატებს მის ნოდს ხეს.
<!-- მარტივი DOM სტრუქტურა --> <!DOCTYPE html> <html> <head> <title>მაგალითი</title> </head> <body> <p>ტექსტი</p> </body> </html> // DOM ხე იქნება სტრუქტურით, რომელიც ასახავს ტეგების შიგთავსს. // მაგალითად, "p" ნოდი იქნება "body" ნოდის შთამომავალი. - სკრიპტებისა და სტილების პარსინგი: HTML-ის პარსინგის დროს, ბრაუზერი ხვდება
<script>და<link>/<style>ტეგებს:<script>: თავდაპირველად, HTML-ის პარსინგი შეჩერდება, სკრიპტი იტვირთება, პარსდება და შესრულდება. შესრულების შემდეგ, HTML-ის პარსინგი განახლდება.asyncდაdeferატრიბუტები ამ ქცევას იცვლიან.asyncასინქრონულად ასრულებს სკრიპტს, პარსინგს არ აფერხებს.deferგადადებს სკრიპტის შესრულებას HTML-ის პარსინგის დასრულებამდე.<link>/<style>: CSS პარალელურად პარსდება HTML-ისთან და ქმნის CSS ობიექტურ მოდელს (CSSOM).<link>-ის არსებობა<script>-ის წინ შეიძლება დააგვიანოს სკრიპტის შესრულება, რადგან ბრაუზერი შეიძლება დაელოდოს CSSOM-ის შექმნას, რათა უზრუნველყოს სტილების სწორად გამოყენება სკრიპტის შესრულებამდე।