เหตุใด Safari จึงมีการเลื่อนเฉื่อยที่สมบูรณ์แบบ (เกือบ) ใน OS X


18

ฉันประหลาดใจมากที่ Safari เป็นเบราว์เซอร์เพียงตัวเดียวใน OS X ที่สามารถเลื่อนดูเฉื่อยที่สมบูรณ์แบบได้ (เกือบ)

  • แม้จะมีเนื้อหาแฟลชจำนวนมากบนเว็บไซต์การเลื่อนของ Safari นั้นราบรื่น
  • มีเว็บไซต์ที่มีเนื้อหามากมายให้โหลดและ Safari จะเลื่อนอย่างต่อเนื่องในขณะที่กำลังโหลดและแสดงเนื้อหา
  • การติดตั้งส่วนขยายหลายรายการไม่มีผลต่อประสิทธิภาพการเลื่อน

คู่แข่งสำคัญของเบราว์เซอร์ Safari บน OS X คือ Chrome และ Firefox ทั้งสองไม่สามารถจัดการกับการเลื่อนแบบราบรื่นแบบเดียวกับที่ใช้ใน Safari:

  • การเปิดใช้งานการตั้งค่าสถานะเช่นการเรียง GPU ในทุกหน้าใน Google Chrome ( chrome://flags) หรือ ...
  • การเลื่อนอย่างราบรื่นใน Firefox ( Options > Advanced) ไม่ส่งผลการเลื่อนที่ Safari ให้ตามค่าเริ่มต้น

คำถาม

Safari ใช้ API ส่วนตัวเพื่อให้การเลื่อนราบรื่นที่นักพัฒนาซอฟต์แวร์ Chrome / Firefox ไม่สามารถเข้าถึงได้หรือไม่ ทำไมการเลื่อนของ Safari ถึงจะดีขึ้นมากและคู่แข่งไม่สามารถจัดการกับการเลื่อนที่ไม่แตกได้

ฉันสงสัยโดยเฉพาะเกี่ยวกับ Chrome เพราะโดยปกติแล้วมันจะปรับใช้กับคุณสมบัติใหม่ของ OS X อย่างรวดเร็ว


1
ฉันไม่เห็นด้วย. การเลื่อนของ Firefox นั้นเหนือกว่าของ Safari (ฉันอยู่ที่ 10.7.4 ในช่วงกลางปี ​​2011 Macbook Air): มันราบรื่นเกือบ 60Hz ในขณะที่ Safari มักจะ "ขัดขวาง" เล็กน้อย ฉันมักจะยังคงใช้ Safari แม้ว่าจะเป็นเพราะการซูมที่ดีและเอฟเฟกต์ "ปก" เมื่อเลื่อนนิ้วสองนิ้วไปด้านข้างเพื่อย้อนกลับหรือไปข้างหน้า
Steven Lu

2
บ้า นับตั้งแต่คุณชี้ให้เห็นว่าฉันสังเกตเห็น Firefox ที่ฉีกขาดมากขึ้นในขณะนี้ มันทำได้ทุกที่ ข้อความ (เหมือนในเว็บไซต์นี้) สั่นไหวและตัวสั่นเนื่องจากเคลื่อนไหวอย่างไม่สอดคล้องกันในเฟรมที่ต่อเนื่องกัน
Steven Lu

2
Safari on Lion เมื่อรวมกับอุปกรณ์ป้อนข้อมูลแบบสัมผัสของ Apple (ทัชแพด / เมาส์วิเศษ) อาจเป็นประสบการณ์การแสดงผลบนเว็บที่ใช้งานง่ายและเป็นมิตรที่สุด มันใช้อย่างถูกต้องกับ vsync ดังนั้นจึงไม่มีภาพเคลื่อนไหวที่ฉีกขาดและฉันไม่สามารถรับฟีเจอร์ pinch-zoom และการเลื่อนจากซ้ายไปขวาได้อย่างเพียงพอ บางครั้งการเลื่อน hiccups เล็กน้อย แต่ฉันคิดว่าเราต้องเข้าถึงเครื่องมือภายในเพื่อให้สามารถอธิบายสิ่งที่ทำให้เกิดปัญหาเหล่านั้นได้ ถ้าฉันได้งานที่ Apple ฉันอยากทำงานนี้
Steven Lu

1
ว้าวความคิดเห็นมากมาย ฉันกำลังเพิ่มอีกคนเนื่องจากเป็นการเก็งกำไรไม่ใช่คำตอบ ... ไม่สนใจข้อเท็จจริงที่ว่า Safari มีอยู่บน Windows (ทำไมไม่คนอื่นทำ .. ) ฉันคิดว่ามันเป็นเรื่องง่ายของ Safari ที่เขียนขึ้นสำหรับ Mac และเบราว์เซอร์ส่วนที่เหลือจำเป็นต้องใช้ร่วมกันในระดับหนึ่งโค้ดเบสกับหลายแพลตฟอร์มทำให้ยากที่จะทำให้มันสมบูรณ์แบบในแต่ละอัน
stuffe

1
เป็นการยากที่จะจินตนาการว่า Safari จะไม่ใช้ API ส่วนตัว: มี API ดังกล่าวโดยไม่มีเหตุผลอื่นนอกจากให้บริการฟีเจอร์กับซอฟต์แวร์ของ Apple แต่นั่นเป็นเพียงการคาดเดาและฉันไม่เห็นวิธีอื่น ๆ ที่จริงตอบคำถามนี้ ...
แดน J

คำตอบ:


6

ความแตกต่างนั้นน่าจะเกี่ยวข้องกับสถาปัตยกรรมและตัวเลือกการสื่อสารระหว่างกระบวนการของแต่ละเบราว์เซอร์

เว็บเบราว์เซอร์สมัยใหม่แสดงผลหน้าเว็บในกระบวนการแยกกัน Apple มีเฟรมเวิร์กที่ชื่อว่า IOSurfaceซึ่งให้วิธีการที่คล่องตัวสำหรับกระบวนการหนึ่งเพื่อส่งรูปภาพไปยังกระบวนการอื่น เฟรมเวิร์กนี้เปิดตัวใน Mac OS X 10.6 หรือที่รู้จักกันใน Snow Leopard สำหรับการทำซ้ำล่าสุดของ QuickTime

QuickTime ใช้ IOSurface เพื่อตัดการถอดรหัสภาพยนตร์เพื่อแยกกระบวนการ ไม่มีการถอดรหัสที่ต้องทำแอปพลิเคชั่น QuickTime Player จะจัดการกับส่วนติดต่อผู้ใช้ แต่เพียงผู้เดียวและแสดงภาพที่ได้จากกระบวนการถอดรหัส

ฉันสงสัยว่า Safari ได้เรียนรู้จาก QuickTime และใช้เทคนิคเดียวกัน เว็บเพจถูกถ่ายไปยังกระบวนการอื่นการเรนเดอร์และส่งคืน

Chrome และ Firefox สามารถทำสิ่งเดียวกันได้หรือไม่ ความท้าทายคือทำให้แน่ใจว่าการจัดการเธรดกับผู้ใช้ตอบสนองอย่างรวดเร็วและไม่ล่าช้ารอการเรนเดอร์ที่จะอัพเดต

Chrome ใช้กระบวนการแยกต่างหากและดูเหมือนว่าจะใช้ IOSurface บน Mac พูดถึงข้อผิดพลาดเกี่ยวกับการปรับปรุงการใช้งานของ Chrome ของ IOSurface

IOSurface เป็นกรอบงานสาธารณะสำหรับแอปพลิเคชัน Mac OS X 10.6+ อย่างไรก็ตามมีเอกสารเล็กน้อยและเป็น Mac โดยเฉพาะ

นี่คือการคาดเดาทั้งหมด


Chrome ใช้กระบวนการแยกต่างหากเพื่อแสดงเนื้อหา fwiw
Nathan Greenstein

1
ขอบคุณสำหรับคำตอบ! มันเศร้าที่มีการกำทอนน้อยมากสำหรับคำถามนี้จนถึงตอนนี้ แต่ฉันสามารถเข้าใจสิ่งนี้หากไม่สามารถอ้างถึงแหล่งข้อมูลหลัก
gentmatt

@gentmatt คุณจะพบกับประสบการณ์การเลื่อนบนเบราว์เซอร์ที่ใช้ WebKit ได้อย่างไร สิ่งนี้อาจช่วยแยกผลกระทบของเอ็นจิ้นการแสดงผลของเบราว์เซอร์จากการใช้อินเทอร์เฟซของเบราว์เซอร์โดยรอบ ฉันเชื่อว่า OmniWeb ใช้ WebKit
Graham Miln

@GrahamMiln Chrome ใช้ Webkit เช่นกัน แต่การเลื่อนของ Chrome นั้นค่อนข้างไกลจาก IMO ที่สมบูรณ์แบบ มันขึ้นอยู่กับเนื้อหาของเว็บไซต์จริงๆ โดยทั่วไปประสิทธิภาพไม่ดีนัก
gentmatt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.