Mọi người đều biết bộ chọn DOM như document.getElementByID(...)
và document.querySelector(...)
làm và cách bạn có thể sử dụng bộ chọn này với các lớp, thuộc tính, id và v.v.QuerySelector hoạt động như thế nào dưới mui xe?
Nhưng tôi không thể tìm thấy nó hoạt động như thế nào dưới mui xe (tôi có thể tìm thấy perf test comparisons nhưng tôi quan tâm đến lý thuyết). Tôi biết rằng trang html được tải, được phân tích bởi trình duyệt và cây DOM được xây dựng. Nhưng làm thế nào để mỗi bộ chọn đi ngang qua cây DOM để tìm các phần tử.
Tôi đã xem xét một số spec for parsing algorithm và đọc thực sự tốt đẹp explanation how Browsers work, nhưng cũng cung cấp giải thích tuyệt vời về HTML, phân tích CSS và luồng hiển thị không giải thích cách mỗi bộ chọn này đi qua cây này để tìm các phần tử.
Tôi giả định rằng để tìm thứ gì đó như .black
hoặc span
, nó cần phải đi qua toàn bộ cây, nhưng để tìm #id
, nó có thể đi qua một số cấu trúc dữ liệu bổ sung và do đó làm cho nó nhanh hơn nhiều. Vui lòng không viết các giả định của bạn, tôi đang tìm kiếm kiến thức cụ thể với bản sao lưu để đặc tả hoặc triển khai trong một số trình duyệt.
Tôi nghĩ điều này sẽ được yêu cầu tốt hơn tại http://programmers.stackexchange.com – spender
Đó là chi tiết triển khai và sẽ khác nhau tùy theo công cụ bạn đang sử dụng. Bạn sẽ phải đọc mã nguồn của việc triển khai khác nhau nếu bạn muốn biết. Xem http://en.wikipedia.org/wiki/List_of_ECMAScript_engines làm điểm bắt đầu. – slashingweapon
@slashingweapon Tôi không thực sự nghĩ như vậy. Đây là một tính năng khá cơ bản và hầu hết có lẽ tôi sẽ được triển khai thực sự tương tự trong các trình duyệt chính. –