Những gì lực lượng bố trí/reflow. Danh sách toàn diện.
Tất cả các thuộc tính hoặc phương thức dưới đây, khi được yêu cầu/gọi trong JavaScript, sẽ kích hoạt trình duyệt để tính toán đồng bộ kiểu và bố cục*. Điều này cũng được gọi là phản xạ hoặc bố cục đập, và là nút cổ chai hiệu suất phổ biến. Nói chung, tất cả các API cung cấp đồng bộ các số liệu bố trí sẽ kích hoạt phản xạ / bố cục bắt buộc. Đọc về các trường hợp và chi tiết bổ sung.
API phần tử
Nhận số liệu hộpelem.offsetLeft
,elem.offsetTop
,elem.offsetWidth
,elem.offsetHeight
,elem.offsetParent
elem.clientLeft
,elem.clientTop
,elem.clientWidth
,elem.clientHeight
elem.getClientRects[]
,elem.offsetTop
0
elem.offsetTop
1,elem.offsetTop
2elem.offsetTop
3,elem.offsetTop
4elem.offsetTop
5,elem.offsetTop
6elem.offsetTop
7,elem.offsetTop
8 cũng vậy, đặt chúng
elem.offsetTop
9 [nguồn]
elem.offsetWidth
0,elem.offsetWidth
1elem.offsetWidth
2 [nguồn]
Nhận kích thước cửa sổ
elem.offsetWidth
3,elem.offsetWidth
4elem.offsetWidth
5,elem.offsetWidth
6- window.VisualViewPort.height / width / offsetTop / offsetleft [nguồn]
tài liệu
elem.offsetWidth
7 chỉ có phong cách lực lượngelem.offsetWidth
8
Biểu mẫu: Cài đặt lựa chọn + tiêu điểm
elem.offsetWidth
9elem.offsetHeight
0,elem.offsetHeight
1
Sự kiện chuột: Đọc dữ liệu bù
elem.offsetHeight
2,elem.offsetHeight
3,elem.offsetHeight
4,elem.offsetHeight
5 [nguồn]
Gọi getComputedStyle []
elem.offsetHeight
6 thường sẽ buộc Style Recalc.
elem.offsetHeight
6 thường sẽ buộc bố cục.
elem.offsetHeight
6 sẽ buộc bố cục trong một trong 3 điều kiện:
- Phần tử nằm trong một cây bóng tối
- Có các truy vấn truyền thông [liên quan đến chế độ xem]. Cụ thể, một trong những điều sau đây: [nguồn
elem.offsetHeight
9,elem.offsetParent
0,elem.offsetParent
1,elem.offsetParent
2,elem.offsetParent
3,elem.offsetParent
4elem.offsetParent
5,elem.offsetParent
6,elem.offsetParent
7elem.offsetParent
8,elem.offsetParent
9,elem.clientLeft
0,elem.clientLeft
1,elem.clientLeft
2
- Tài sản được yêu cầu là một trong những điều sau: [Nguồn]
elem.offsetParent
4,elem.offsetParent
3elem.clientLeft
5,elem.clientLeft
6,elem.clientLeft
7,elem.clientLeft
8elem.clientLeft
9 [elem.clientTop
0,elem.clientTop
1,elem.clientTop
2,elem.clientTop
3 hoặc tốc ký] chỉ khi lề được sửa.elem.clientTop
4 [elem.clientTop
0,elem.clientTop
1,elem.clientTop
2,elem.clientTop
3 hoặc tốc ký] chỉ khi phần đệm được cố định.elem.clientTop
9,elem.clientWidth
0,elem.clientWidth
1elem.clientWidth
2,elem.clientWidth
3,elem.clientWidth
4elem.clientWidth
5,elem.clientWidth
6,elem.clientWidth
7,elem.clientWidth
8elem.clientWidth
1- Các mục này trước đây có trong danh sách nhưng dường như không còn nữa [kể từ tháng 2 năm 2018]:
elem.clientHeight
0,elem.clientHeight
1,elem.clientHeight
2,elem.clientHeight
3,elem.clientHeight
4,elem.clientHeight
5,elem.clientHeight
6
Nhận kích thước elem.clientHeight
7
elem.clientHeight
8,elem.clientHeight
9
SVG
Khá nhiều thuộc tính/phương thức lực lượng, nhưng tôi đã không lập một danh sách đầy đủ. Danh sách này không đầy đủ:
- SVGlocatable:
elem.getClientRects[]
0,elem.getClientRects[]
1 - SvgtextContent:
elem.getClientRects[]
2,elem.getClientRects[]
3,elem.getClientRects[]
4,elem.getClientRects[]
5,elem.getClientRects[]
6,elem.getClientRects[]
7,elem.getClientRects[]
8,elem.getClientRects[]
9,elem.offsetTop
00 - SVGUSE:
elem.offsetTop
01
Sử dụng "liên kết cây nguồn crom" bên dưới để tự mình khám phá!
hài lòng
- Rất nhiều thứ và rất nhiều thứ, bao gồm cả sao chép hình ảnh vào bảng tạm [nguồn]
* Ruột thừa
- Reflow chỉ có chi phí nếu tài liệu đã thay đổi và vô hiệu hóa kiểu hoặc bố cục. Thông thường, điều này là do DOM đã được thay đổi [các lớp được sửa đổi, các nút được thêm/loại bỏ, thậm chí thêm một psuedo-class như: Focus].
- Nếu bố cục bị ép buộc, phong cách phải được tính toán lại trước. Vì vậy, bố cục bắt buộc kích hoạt cả hai hoạt động. Chi phí của họ rất phụ thuộc vào nội dung/tình huống, nhưng thông thường cả hai hoạt động đều tương tự nhau về chi phí.
- Bạn nên làm gì về tất cả những điều này? Chà, phần
elem.offsetTop
02 bên dưới bao gồm mọi thứ chi tiết hơn, nhưng phiên bản ngắn là:elem.offsetTop
03 Các vòng lặp buộc bố trí và thay đổi DOM là điều tồi tệ nhất, tránh chúng.- Sử dụng bảng hiệu suất của DevTools để xem điều này xảy ra ở đâu. Bạn có thể ngạc nhiên khi thấy tần suất mã ứng dụng và mã thư viện của bạn đạt được điều này.
- Batch ghi của bạn và đọc cho DOM [thông qua Fastdom hoặc triển khai DOM ảo]. Đọc các số liệu của bạn ở đầu khung hình [rất bắt đầu
elem.offsetTop
04, trình xử lý cuộn, v.v.], khi các số vẫn giống hệt với bố cục lần cuối cùng được thực hiện.
- Dữ liệu trên được xây dựng bằng cách đọc nguồn nhấp nháy, vì vậy nó đúng với Chrome, Opera, Brave, Edge và hầu hết các trình duyệt Android. Bạn có thể tự mình duyệt chúng trong cây nguồn crom.
- Danh sách kích hoạt bố cục của Tony Gentilcore là cho Webkit năm 2011 và thường phù hợp với các điều trên.
- Các trường hợp của Webkit về bố cục bắt buộc của Webkit chủ yếu là nhất quán:
elem.offsetTop
05 - Tìm kiếm GitHub - WebKit/WebKit - REPECKO của Gecko dường như được yêu cầu thông qua Frameneedsreflow. Kết quả:
elem.offsetTop
06 - Mozilla -Central Searchfox - Không có dữ liệu cụ thể nào trên IE hoặc edgehtml, nhưng chúng có thể gần giống nhau, vì các giá trị trả về cho các thuộc tính này là cụ thể.
Thêm về bố cục bắt buộc
- Tránh bố cục đập - các nguyên tắc cơ bản web là tài nguyên tốt nhất để xác định và sửa chữa chủ đề này. The best resource on identifying and fixing this topic.
- CSS Kích hoạt - bao gồm những gì các hoạt động được yêu cầu là kết quả của việc cài đặt/thay đổi giá trị CSS đã cho. Tuy nhiên, danh sách trên là tất cả về những gì buộc các vòng tròn màu tím/xanh lá cây/darkgreen đồng bộ từ JavaScript.
- Khắc phục bố cục đập vào thế giới thực | Matt Andrew
- Demo Demo: Chẩn đoán Bố cục đồng bộ bắt buộc - Google Chrome
- Ngăn chặn 'Bố cục Thrashing' | Trang Wilson
- wilsonpage/fastdom
- Kết xuất: Đóng lại, Reflow / Relayout, Restyle / Stoyan
- Chúng tôi đã dành một tuần để làm cho bảng Trello tải cực kỳ nhanh. Đây là cách chúng tôi đã làm điều đó. - Blog Fog Creek
- Giảm thiểu trình duyệt refereSer & nbsp; | & nbsp; Pagespeed Insights & nbsp; | & nbsp; Nhà phát triển Google
- Tối ưu hóa nội dung web trong UIWebView và trang web trên iOS
- Kết xuất tăng tốc trong chrome
- Hiệu suất web cho sự tò mò
- Jank miễn phí
Cập nhật một chút vào tháng 4 năm 2020. Liên kết CodeSearch và một vài thay đổi đối với các thuộc tính phần tử có liên quan.