Tại sao chỉ Safari có (gần) cuộn cuộn quán tính hoàn hảo trong OS X?


18

Tôi khá ngạc nhiên khi Safari là trình duyệt duy nhất trong OS X quản lý để có được (gần) cuộn quán tính hoàn hảo.

  • Ngay cả với nhiều nội dung flash trên một trang web, việc cuộn của Safari vẫn mượt mà.
  • Có những trang web có rất nhiều nội dung để tải và Safari sẽ tiếp tục cuộn trơn tru trong khi nội dung đang được tải và hiển thị.
  • Cài đặt một số tiện ích mở rộng không ảnh hưởng đến hiệu suất cuộn.

Các đối thủ chính của trình duyệt Safari trên OS X là Chrome và Firefox. Cả hai đều không quản lý để cung cấp cùng một cuộn mượt mà giống như được sử dụng trong Safari:

  • Kích hoạt các cờ như kết hợp GPU trên tất cả các trang trong Google Chrome ( chrome://flags) hoặc ...
  • cuộn trơn tru trong Firefox ( Options > Advanced) không mang lại hiệu suất cuộn mà Safari cung cấp theo mặc định.

Câu hỏi

Safari có sử dụng API riêng để phân phối cuộn mượt mà các nhà phát triển Chrome / Firefox không thể truy cập không? Làm thế nào đến việc cuộn của Safari tốt hơn nhiều và các đối thủ cạnh tranh không quản lý để cung cấp cuộn không bị hỏng.

Tôi đặc biệt thắc mắc về Chrome vì nó thường thích ứng với các tính năng OS X mới rất nhanh.


1
Tôi không đồng ý. Tính năng cuộn của Firefox vượt trội hơn nhiều so với Safari (Tôi là ngày 10.7.4 trên Macbook Air giữa năm 2011): Nó hầu như luôn luôn mượt mà 60Hz trong khi Safari luôn "chộp" một chút. Tôi có xu hướng vẫn sử dụng Safari mặc dù hiệu ứng thu phóng và "che phủ" đẹp mắt khi vuốt hai ngón tay sang một bên để quay lại hoặc chuyển tiếp.
Steven Lu

2
Chết tiệt. Kể từ khi bạn chỉ ra rằng tôi nhận thấy Firefox đang xé rách nhiều hơn bây giờ. Nó làm tất cả mọi nơi. Văn bản (như trên trang web này) nhấp nháy và rùng mình khi chúng di chuyển không nhất quán trên các khung liên tiếp.
Steven Lu

2
Ở mọi mức độ, Safari on Lion, kết hợp với các thiết bị đầu vào cảm ứng của Apple (touchpad / chuột ma thuật) có lẽ là trải nghiệm web hiển thị thân thiện và đẹp nhất cho người dùng nhất có sẵn ở bất cứ đâu. Nó áp dụng chính xác vsync và do đó không có hình ảnh động nào bị rách, và tôi không thể có đủ các tính năng pinch-zoom và cuộn từ trái sang phải để quay lại. Đôi khi cuộn nấc nhẹ, nhưng tôi nghĩ rằng chúng ta sẽ cần truy cập vào các công cụ nội bộ để có thể xác định nguyên nhân gây ra những vấn đề đó. Nếu tôi từng có một công việc tại Apple, tôi muốn làm việc này.
Steven Lu

1
Wow, vô số ý kiến. Tôi đang thêm một câu hỏi khác, vì đó là suy đoán, không phải là câu trả lời ... Bỏ qua thực tế là Safari có sẵn trên Windows (Tại sao không, mọi người khác cũng vậy ..), tôi nghĩ rằng vấn đề đơn giản là Safari được viết cho Mac, và phần còn lại của các trình duyệt nhất thiết phải chia sẻ, ở một mức độ nào đó, cơ sở mã hóa với nhiều nền tảng, khiến cho việc hoàn thiện nó trên mỗi nền tảng trở nên khó khăn.
nhồi vào

1
Thật khó để tưởng tượng rằng Safari sẽ không sử dụng các API riêng tư: các API như vậy tồn tại không vì lý do nào khác ngoài việc cung cấp các tính năng cho phần mềm của Apple. Nhưng đó chỉ là phỏng đoán và tôi không thấy cách nào khác để thực sự trả lời câu hỏi này ...
Dan J

Câu trả lời:


6

Sự khác biệt có thể xảy ra với các lựa chọn giao tiếp và kiến ​​trúc của mỗi trình duyệt.

Các trình duyệt web hiện đại kết xuất các trang trong các quy trình riêng biệt. Apple có một khung gọi là IOSurface cung cấp một cách hợp lý cho một quy trình để truyền hình ảnh sang quy trình khác. Khung này đã được giới thiệu trong Mac OS X 10.6, hay còn gọi là Snow Leopard, cho lần lặp mới nhất của QuickTime.

QuickTime sử dụng IOSurface để giảm tải giải mã phim cho các quy trình riêng biệt. Không có giải mã để làm, ứng dụng QuickTime Player chỉ giao dịch với giao diện người dùng và hiển thị hình ảnh được cung cấp bởi các quá trình giải mã.

Tôi nghi ngờ Safari đã học được từ QuickTime và đang sử dụng các kỹ thuật tương tự. Các trang web được giảm tải cho các quy trình khác, được hiển thị và được gửi lại.

Chrome và Firefox có thể làm điều tương tự, hoàn toàn. Thách thức là đảm bảo luồng xử lý với người dùng phản hồi nhanh chóng và không bị trì hoãn chờ kết xuất để cập nhật.

Chrome sử dụng các quy trình riêng biệt và dường như sử dụng IOSurface trên máy Mac; lỗi này nói về việc cải thiện việc sử dụng IOSurface của Chrome .

IOSurface là một khung công khai có sẵn cho bất kỳ ứng dụng Mac OS X 10.6+ nào. Tuy nhiên có rất ít tài liệu và nó là Mac cụ thể.

Đây là tất cả những phỏng đoán.


Chrome sử dụng các quy trình riêng biệt để hiển thị nội dung, fwiw.
Nathan Greenstein

1
Cảm ơn bạn vì câu trả lời! Thật đáng buồn khi có rất ít sự cộng hưởng cho câu hỏi này cho đến nay. Nhưng tôi có thể hiểu điều này nếu người ta không thể tham khảo các nguồn chính.
gentmatt

@gentmatt làm thế nào để bạn tìm thấy trải nghiệm cuộn trên các trình duyệt sử dụng WebKit? Điều này có thể giúp tách biệt tác động của công cụ kết xuất của trình duyệt khỏi việc triển khai giao diện trình duyệt xung quanh. Tôi tin rằng OmniWeb sử dụng WebKit.
Graham Miln

@GrahamMiln Chrome cũng sử dụng Webkit. Nhưng cuộn của Chrome khá xa, hoàn hảo, IMO. Nó thực sự phụ thuộc vào nội dung của trang web. Nói chung, hiệu suất không tốt lắm.
gentmatt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.