@nhoxbuondkny
Cái khóa này em thấy đáng để suy ngẫm.
Riêng về vấn đề giảm sự cạnh tranh tài nguyên máy của các firefox process/thread em cũng có quan tâm. Dưới đây là 1 số quan sát:
Vào about:config sẽ thấy
content.notify.interval có giá trị mặc định là 120k micro giây. Tức là từ lúc initial paint, cứ mỗi 0,12 giây thì Firefox reflow 1 lần cho đến khi tải xong.
Giả :
- ti là thời điểm thực hiện initial paint (ti sẽ = thời gian tải DOM + thời gian delay, vd: nếu nglayout.initialpaint.delay = 2 giây thì ti = tDOMContentLoaded + 2)
- tf là thời điểm tải xong page resource
thì từ lúc initial paint đến lúc tải xong Firefox sẽ reflow số lần là:
(tf - ti)/0,12
Nếu hiệu số trên tử số chỉ cần là vài giây thì tổng số lần reflow vẫn là hàng chục lần.
Cũng từ phân số trên suy ra nếu chỉ muốn giảm tổng số lần reflow xuống thấp nhất có 2 cách là tăng
content.notify.interval hoặc nglayout.initialpaint.delay lên thật cao, vài chục giây chẳng hạn.
Ngoài ra còn cách thứ 3 là chỉnh cái khóa
content.notify.backoffcount về bằng
0.
3 cách đó đều giới hạn số lần reflow về con số tối thiểu nhưng lại đem lại trải nghiệm không hề giống nhau. Cụ thể là việc tăng thời gian delay initial paint sẽ khác hoàn toàn với tăng reflow interval hoặc giảm reflow backoff count.
Cái khác ở đây là
perceived speeeeeeeeeeeed.
Chọn trang wired.com làm ví dụ đi.
Nếu delay paint thì sẽ phải đợi nhưng nếu chọn 2 cách kia thì sẽ thấy ngay nội dung text và style căn bản của page (vd title, body bài viết, navigation items...) chỉ còn chờ ảnh load xong và hiện ra. Rõ ràng 2 cách sau khiến mình đỡ sốt ruột hơn và tiết kiệm thời gian vì đọc được ngay text (thực tế duyệt web đôi khi cũng chỉ cần đọc text).
Mấy năm trước Mozilla đã có dự án
Faster startup firstpaint cũng hoàn toàn là để cải thiện cái perceived speed này (nhưng là lúc khởi động Firefox), tất nhiên nó không làm firefox khởi động nhanh hơn nhưng stop hoàn toàn được việc các bà các chị các mẹ click 1 cái chưa thấy firefox mở bèn ckick thêm vài cái nữa, lúc sau nó mở ra 1 đống cửa sổ.