Mengapa hanya Safari yang memiliki (hampir) pengguliran inersia sempurna di OS X?

18

Saya cukup kagum bahwa Safari adalah satu-satunya browser di OS X yang berhasil mendapatkan (hampir) pengguliran inersia yang sempurna.

  • Bahkan dengan banyak konten flash di situs web, pengguliran Safari lancar.
  • Ada situs web dengan banyak konten untuk dimuat dan Safari akan terus menggulir dengan lancar saat konten sedang dimuat dan dirender.
  • Memasang beberapa ekstensi tidak berpengaruh pada kinerja gulir.

Pesaing utama browser Safari di OS X adalah Chrome dan Firefox. Keduanya tidak berhasil memberikan pengguliran mulus yang sama seperti yang digunakan di Safari:

  • Mengaktifkan tanda seperti pengomposisian GPU di semua halaman di Google Chrome ( chrome://flags) atau ...
  • gulir mulus di Firefox ( Options > Advanced) tidak memberikan kinerja gulir yang diberikan Safari per default.

Pertanyaan

Apakah Safari menggunakan API pribadi untuk memberikan scrolling lancar yang tidak dapat diakses oleh pengembang Chrome / Firefox? Kenapa scrolling Safari jauh lebih baik dan pesaing tidak berhasil mengirimkan scrolling yang tidak rusak.

Saya bertanya-tanya terutama tentang Chrome karena biasanya beradaptasi dengan fitur OS X baru sangat cepat.

gentmatt
sumber
1
Saya tidak setuju. Scrolling Firefox jauh lebih unggul daripada Safari (saya menggunakan 10.7.4 pada pertengahan 2011 Macbook Air): Ini hampir selalu 60Hz mulus sementara Safari selalu "merobek" sedikit. Saya cenderung masih menggunakan Safari karena efek zooming dan "cover" yang bagus ketika menggesekkan dua jari ke samping untuk mundur atau maju.
Steven Lu
2
Sialan. Sejak Anda menunjukkannya, saya memperhatikan Firefox lebih banyak merobeknya sekarang. Itu terjadi di semua tempat. Teks (seperti di situs ini) berkedip-kedip dan bergidik ketika mereka bergerak secara tidak konsisten melintasi bingkai yang berurutan.
Steven Lu
2
Bagaimanapun, Safari on Lion, dikombinasikan dengan perangkat input sentuh Apple (touchpad / mouse ajaib) mungkin pengalaman web rendering yang paling ramah pengguna dan terbaik yang tersedia di mana saja. Ini berlaku dengan benar vsync dan jadi tidak ada animasi yang sobek, dan saya tidak bisa mendapatkan cukup dari fitur pinch-zoom dan scroll-left-to-go-back yang ketat. Kadang-kadang sedikit menggulung cegukan, tapi saya pikir kita perlu akses ke alat internal untuk dapat membuat profil apa yang menyebabkan masalah tersebut. Jika saya mendapatkan pekerjaan di Apple, saya ingin mengerjakan ini.
Steven Lu
1
Wow, banyak komentar. Saya menambahkan yang lain, karena ini spekulasi, bukan jawaban ... Mengabaikan fakta bahwa Safari tersedia di Windows (Mengapa tidak, semua orang melakukannya ..), saya pikir ini masalah sederhana Safari yang ditulis untuk Mac, dan browser lainnya harus berbagi, sampai batas tertentu, basis kode dengan beberapa platform, sehingga sulit untuk membuatnya sempurna di masing-masing browser.
Stuffe
1
Sulit membayangkan bahwa Safari tidak akan menggunakan API pribadi: API semacam itu tidak ada alasan lain selain menyediakan fitur untuk perangkat lunak Apple. Tapi itu hanya dugaan, dan saya tidak melihat cara lain untuk benar-benar menjawab pertanyaan ini ...
Dan J

Jawaban:

6

Perbedaannya mungkin berkaitan dengan arsitektur dan pilihan komunikasi interprocess dari masing-masing browser.

Browser web modern membuat halaman dalam proses terpisah. Apple memiliki kerangka kerja yang disebut IOSurface yang menyediakan cara efisien untuk satu proses untuk meneruskan gambar ke proses lain. Kerangka kerja ini diperkenalkan di Mac OS X 10.6, alias Snow Leopard, untuk iterasi terbaru QuickTime.

QuickTime menggunakan iOSurface untuk mengeluarkan film decoding ke proses yang terpisah. Dengan tidak adanya decoding, aplikasi QuickTime Player dibiarkan berurusan hanya dengan antarmuka pengguna dan menampilkan gambar yang disediakan oleh proses decoding.

Saya menduga Safari telah belajar dari QuickTime dan menggunakan teknik yang sama. Halaman web diturunkan ke proses lain, dirender, dan dikirimkan kembali.

Bisakah Chrome dan Firefox melakukan hal yang sama, tentu saja. Tantangannya adalah memastikan utas yang berhubungan dengan pengguna merespons dengan cepat dan tidak tertunda menunggu rendering diperbarui.

Chrome memang menggunakan proses terpisah dan tampaknya menggunakan iOSurface di Mac; bug ini berbicara tentang peningkatan penggunaan iOSurface di Chrome .

IOSurface adalah kerangka kerja publik yang tersedia untuk semua aplikasi Mac OS X 10.6+. Namun ada sedikit dokumentasi dan spesifik untuk Mac.

Ini semua dugaan.

Graham Miln
sumber
Chrome memang menggunakan proses terpisah untuk merender konten, fwiw.
Nathan Greenstein
1
Terima kasih atas jawaban Anda! Sangat menyedihkan bahwa sejauh ini hanya ada sedikit resonansi terhadap pertanyaan ini. Tapi saya bisa mengerti ini jika seseorang tidak dapat merujuk ke sumber primer.
Gentmatt
@ gentmatt bagaimana Anda menemukan pengalaman gulir di browser yang menggunakan WebKit? Ini dapat membantu memisahkan dampak mesin rendering browser dari implementasi antarmuka browser di sekitarnya. Saya percaya OmniWeb menggunakan WebKit.
Graham Miln
@GrahamMiln Chrome juga menggunakan Webkit. Tetapi pengguliran Chrome cukup jauh dari sempurna, IMO. Ini sangat tergantung pada konten situs web. Secara umum, kinerjanya tidak begitu baik.
Gentmatt