2012-01-30 35 views
13

Có rất nhiều các trang web những ngày này giới thiệu bạn thêm các quy tắc để nội dung của bạn để làm cho nó tăng tốc phần cứng:Tại sao các trình duyệt không đủ thông minh để tăng tốc phần cứng mà không có thủ thuật?

transform: translate3d(0,0,0); 
-webkit-transform: translate3d(0,0,0); 

này luôn làm cho tôi như vô lý. Tại sao trình duyệt cần sự trợ giúp của tôi để quyết định tăng tốc phần cứng? Nó sẽ nhanh hơn, đúng không? Vậy tại sao không chỉ làm điều đó? Tại sao chờ tôi "lừa" trình duyệt vào nó?


Một cách khác để hỏi câu hỏi này có thể là, tại sao không phải mọi cơ sở/thiết lập lại stylesheet bao gồm các dòng

* { 
    transform: translate3d(0,0,0); 
    -webkit-transform: translate3d(0,0,0); 
} 
+0

Lần đầu tiên tôi thấy một kỹ thuật như thế là có [câu hỏi này] (http: // stackoverflow.com/questions/9012753/is-there-a-firefox-tương đương-to-chromes-translatez0-to-force-gpu-accelera), với một câu trả lời "không" tốt đẹp của một trong những nhà phát triển của Mozilla. Đó là * gần như * là vô lý khi thêm '! Quan trọng' để giải quyết một câu hỏi cụ thể ... * gần như *. – BoltClock

Trả lời

25

Nó không đến nỗi các trình duyệt không thể hoặc không thông minh đủ để sử dụng tăng tốc phần cứng. Thay vào đó, những gì bạn đang đề cập đến chỉ thực sự áp dụng cho WebKit, và đặc biệt là cho các phiên bản di động của WebKit. Firefox và IE đều tăng tốc phần cứng mọi thứ và chúng tự động chia trang thành các "lớp" được tổng hợp trên GPU. Đó là lý do tại sao họ thường thổi qua Chrome khi thử nghiệm tốc độ. WebKit, mặt khác, chưa bao giờ thực sự thích ứng với việc tăng tốc các lớp đơn giản. Bởi vì Firefox và IE có thể tận dụng lợi thế của Direct2D rendering trên nền tảng Windows (nơi mà mọi thao tác vẽ đơn lẻ được tăng tốc phần cứng), về bản chất nó là một yêu cầu mà họ có thể làm việc tổng hợp tăng tốc phần cứng là tốt. Nếu họ chỉ tăng tốc hoạt động vẽ và không phải là sự kết hợp, họ sẽ mất hầu hết lợi thế về tốc độ khi sử dụng Direct2D ngay từ đầu vì nó sẽ yêu cầu sao chép giữa GPU và bộ nhớ hệ thống, chậm. Mặt khác, tất cả WebKit đều hiển thị các phần phụ trợ mà tôi biết là thực hiện hiển thị hoàn toàn trong phần mềm và phải chịu hình phạt từ bản sao tới GPU khi chúng kết hợp (nếu sử dụng kết hợp GPU). Vì vậy, nó kết thúc là một sự cân bằng. Nếu lớp bạn đang tổng hợp không mất nhiều thời gian để render trên CPU, nó không phải lúc nào cũng có ý nghĩa để thực hiện bản sao và tổng hợp trên GPU.

Do điều này, và cũng có tính chất cực kỳ hạn chế của GPU di động, không có trình duyệt WebKit nào bắt đầu thực hiện tăng tốc phần cứng tự động trừ khi được yêu cầu hoàn toàn (ví dụ: khi cài đặt biến đổi 3D). Nếu bạn muốn ý kiến ​​của tôi, tôi cũng sẽ thêm rằng tôi nghĩ rằng sự lười biếng trên một phần của các nhà phát triển WebKit và các công ty hỗ trợ cũng là một yếu tố ở đây. Sử dụng GPU là một nguồn chính của lỗi, vì vậy nó dễ dàng hơn cho họ để không chỉ sử dụng nó thay vì sửa chữa các vấn đề.

Nhân tiện, Firefox dành cho Android có thể làm GPU tổng hợp mọi lúc, mặc dù bạn có thể phải bật nó trong about: config; Tôi không biết nếu nó được bật theo mặc định. Đối với PC, tôi khuyên bạn nên sử dụng Firefox hoặc IE để hiển thị nhanh.

EDIT: Tôi cũng nên thêm rằng trong các phiên bản mới nhất của Android, Google đã thêm phần cứng tăng tốc cho Skia, xử lý gần như tất cả hiển thị 2D trên hệ điều hành. Không có nhiều thiết bị trong tự nhiên có điều này được nêu ra, nhưng nó có nghĩa là hiệu suất sẽ cải thiện cho tất cả mọi thứ trên Android trong tương lai gần. Điều đó nói rằng, tôi không biết liệu việc triển khai Skia của họ có hoạt động trơn tru như OpenGL như chúng ta có thể muốn hay không. Việc tổng hợp vẫn có thể phải chịu thêm một số bản sao cho đến khi chúng xử lý.

+0

Wow, câu trả lời tuyệt vời; cảm ơn bạn. Tôi sẽ để điều này mở lâu hơn một chút để xem liệu có ai có thể cung cấp thông tin chi tiết hơn về phía WebKit về mọi thứ không, nhưng điều này được đánh giá cao. – Domenic

+3

Câu trả lời này chứa một số hiểu lầm. "chưa bao giờ thực sự thích ứng với việc tăng tốc các lớp đơn giản" chỉ đơn giản là sai. Do cách tiếp cận trừu tượng nền tảng của WebKit (xem http://ariya.ofilabs.com/2011/06/your-webkit-port-is-special-just-like-every-other-port.html), sự tăng tốc của nguyên thủy bản vẽ được giao cho ngăn xếp đồ họa nền tảng. Trên Mac, CoreGraphics tận dụng GPU ở mức độ nhất định. Ngay cả trên cổng Qt WebKit, có các lựa chọn từ OpenVG, OpenGL, OpenGL ES, v.v ... để tăng tốc. –

+0

Đó là sự thật rằng nó chủ yếu là đại biểu vẽ cho nền tảng này, nhưng không có ngăn xếp đồ họa nền tảng sử dụng tăng tốc phần cứng nhiều hiện nay ngoại trừ Direct2D trên Windows. CoreGraphics chỉ thực hiện gia tốc đơn giản cho việc rỗ và như vậy, và những thứ phức tạp như văn bản không thực sự tăng tốc chút nào. Tôi đã nói về phiên bản Skia mới của Android trong bản chỉnh sửa ở trên. Cổng Qt không được sử dụng bởi bất kỳ triển khai trình duyệt chính nào mà tôi biết, và trong khi sử dụng OpenVG sẽ rất tuyệt, cũng không có nhiều triển khai thực hiện công việc đó. –

1

Để biết thêm về cách tiếp cận webkit, Ariya Hidayat (người đánh giá webkit) đã viết pretty good introductory blog post on hardware acceleration and webkit cho blog của chúng tôi. Thưởng thức.

[Các Punchline là HW tăng tốc có thể nhai lên rất nhiều bộ nhớ, vì vậy hãy khôn ngoan.]

+0

Hai đoạn văn cuối cùng đặc biệt khai sáng. Cảm ơn bạn! – Domenic

Các vấn đề liên quan