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.
Jawaban:
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.
sumber