ไอคอน SVG เทียบกับไอคอน PNG ในเว็บไซต์สมัยใหม่


94

ฉันสงสัยว่าทำไมเว็บไซต์สมัยใหม่เพียงไม่กี่แห่งยังคงใช้ PNG สำหรับไอคอนเท่านั้น (แต่สมมติฐานนี้เป็นเพียงการสังเกตของฉัน) จนถึงตอนนี้ฉันรู้สาเหตุหลักในการใช้ PNG บน SVG คือ IE8 และ SVG ใช้พลังงาน CPU มากกว่า (แต่ฉันไม่เชื่อว่านี่เป็นปัญหาสำหรับไอคอน 1K ธรรมดา ๆ ) ฉันเห็น (และเราใช้อยู่ในปัจจุบัน) ข้อดีหลายอย่างในการใช้ SVG ไม่ว่าจะใช้เป็นสไปรต์เป็นรูปภาพหรือ SVG แบบอินไลน์

(คำถามกำลังหางานวิจัย: แบบอักษร PNG Sprite vs SVG Sprite vs Iconมุ่งเน้นไปที่ประสิทธิภาพและไม่มีคำตอบที่เกี่ยวข้องIcon Font เทียบกับ SVG แคชและความกังวลของเครือข่ายมุ่งเน้นไปที่การรับส่งข้อมูลเครือข่าย แต่สามารถแก้ไขได้อย่างง่ายดายโดยการเทมเพลต)

หากเว็บไซต์ใหม่รองรับเฉพาะเบราว์เซอร์ที่ทันสมัยมีเหตุผลใดบ้างที่ไม่ใช้ SVG (หรือ - มีเหตุผลใดที่ใช้ PNG สำหรับไอคอน) หากเราไม่สนใจ IE8 และการใช้ SVG ได้รับการสำรองข้อมูลโดยเทมเพลตและ / หรือการแคชจะมีสิ่งใดที่ต้องพึ่งพา SVG เท่านั้น?


12
เรียนผู้มีสิทธิเลือกตั้งที่ไม่ต้องการคุณโปรดแจ้งให้เราทราบว่ามีความคิดเห็นอย่างไรโดยเฉพาะจากคำถามนี้ซึ่งฉันถามด้วยเหตุผลเฉพาะทางเทคนิค ฉันขอขอบคุณสำหรับความคิดเห็นดังกล่าวดังนั้นฉันจึงสามารถปรับปรุงคำถามเพิ่มเติมได้
Robert Goldwein

28
โรเบิร์ตดูเหมือนจะไม่ได้ใช้ความคิดเห็น แต่บางครั้งผู้คนก็เข้าสู่โหมดซอมบี้และเพียงแค่อ่านคำถามโดยไม่ได้อ่านจริงๆ
Brigand

ฉันชอบ png เพื่อความเรียบง่ายและ DOM ที่สะอาดกว่า จุดหนึ่งที่จะเพิ่มคำตอบด้านล่างคือด้วย svg คุณสามารถเปลี่ยนสีแบบไดนามิก หากไอคอนมีสามสี: ปกติแอคทีฟ & โฮเวอร์นั่นคือ 3 ภาพ png แต่มีเพียง svg เดียว
CodeToad

@Robert [ZOMBIE MODE] is excellent man :): D
QMaster

คำตอบ:


108

เหตุผลที่ SVG อาจเป็นทางเลือกที่ดี:

  • รองรับเบราว์เซอร์ทุกขนาดโดยเฉพาะอย่างยิ่งกับ css background-size
  • คุณสามารถปรับขนาดขึ้น / ลงได้เช่นไปที่เอฟเฟกต์แบบเลื่อน
  • คุณสามารถฝัง SVG และทำการแก้ไขแบบเรียลไทม์ด้วย JavaScript และ DOM
  • คุณสามารถจัดรูปแบบ SVG และบางส่วนของ SVG ด้วย CSS (เปลี่ยนสีโครงร่าง ฯลฯ )
  • คุณสามารถสร้าง SVG แบบไดนามิกทั้งบนไคลเอนต์หรือเซิร์ฟเวอร์ เนื่องจากลักษณะของข้อความคุณไม่จำเป็นต้องมีไลบรารีระดับต่ำหรือเซิร์ฟเวอร์ที่มีประสิทธิภาพในการสร้าง

เหตุผลที่ PNG อาจเป็นทางเลือกที่ดี:

  • รองรับเบราว์เซอร์
  • เครื่องมือที่มีอยู่สำหรับการสร้าง PNG สไปรต์ชีท
  • คนส่วนใหญ่มีโปรแกรมแก้ไขที่เข้ากันได้กับ PNG ในคอมพิวเตอร์
  • กราฟิกของคุณเป็นภาพถ่ายหรือภาพเวกเตอร์ที่ยากอื่น ๆ

ข้อกังวลอื่น ๆ :

  • โปรแกรมแก้ไข SVG บางตัวอาจจัดเก็บข้อมูลเมตาไว้ใน SVG ของคุณทำให้ขนาดไฟล์เพิ่มขึ้นและอาจเปิดเผยข้อมูลโดยไม่ได้ตั้งใจ
    • เช่นเมื่อคุณส่งออก PNG ใน Inkscape มันได้ / ไม่บันทึกเส้นทางที่แน่นอนไปยังไดเรกทอรีนี้ใน SVG เมื่อคุณบันทึก
    • คอมเพรสเซอร์ SVG อาจลบสิ่งนี้ออก แต่ฉันยังไม่ได้ทดสอบ (อย่าลังเลที่จะแก้ไขถ้าคุณมี)

ขอบคุณคนกราฟิกของเราสร้าง SVG ใน Illustrator จากนั้นแก้ไขด้วยมือดังนั้นโดยปกติแล้วมันจะ <svg> ที่มีองค์ประกอบและแอตทริบิวต์เพียงเล็กน้อยดังนั้นข้อกังวลเหล่านี้จึงถูกปิด - ความกังวลของฉันคือฉันมองข้ามบางสิ่งที่ร้ายแรงเนื่องจากฉันเห็นประโยชน์เกือบเท่านั้น มากกว่า PNG แบบคลาสสิก - แต่มันอาจจะเดือดถึง <= IE8 หรือ> IE8 เช่นไอคอนมาตรฐานที่มีวงกลมพร้อมเครื่องหมายบวกจะมีขนาดกะทัดรัดใน SVG มากกว่าใน PNG
Robert Goldwein

ใช่บางคนได้รับ SVG จากบุคคลที่สามและไม่ได้เปิดในโปรแกรมแก้ไขข้อความหรือตรวจสอบว่ามีการบีบอัด แค่ไม่ต้องการที่จะออกไป มีปัญหาเดียวกันกับ PNG ตอนนี้ที่ฉันคิดเกี่ยวกับเรื่องนี้ มักจะมีการจัดเก็บข้อมูลที่ไร้ประโยชน์ (ในบริบทของเว็บ) ข้อมูลนี้ถูกใช้โดยบรรณาธิการเบราว์เซอร์ไฟล์และโปรแกรมอื่น ๆ นี่เป็นเรื่องปกติมากขึ้นกับ jpegs แม้ว่า (กล้องจะเก็บยี่ห้อรุ่นเลนส์การตั้งค่า ฯลฯ )
Brigand

1
ขอบคุณดังนั้นฉันเดาว่าไม่มีข้อเสียใด ๆ สำหรับการใช้ SVG ในโครงการของเราและเราจะผสานรวมให้ลึกยิ่งขึ้น ขอบคุณสำหรับข้อมูลเชิงลึก
Robert Goldwein

วิธีที่เหมาะสมในการใช้ไอคอนเวกเตอร์คือ Icon Fonts สำหรับฉันข้อเสียที่ใหญ่ที่สุดของไอคอน SVG คือแอตทริบิวต์ข้อมูลใน CSS ใช้ไม่ได้กับ IE10 / 11
Gerfried

แบบอักษรไอคอน @Gerfried มีปัญหาการเข้าถึงหลายอย่าง ทันทีที่ผู้ใช้ตัดสินใจบล็อกฟอนต์ของเว็บหรือแทนที่ฟอนต์ทั้งหมดด้วยของตัวเอง (ไม่ว่าจะด้วยเหตุผลใดก็ตาม) ไอคอนสวย ๆ เหล่านั้นก็จะแตกทันที มีทางเลือกอื่น แต่ตัวฉันเองยังไม่เห็นโซลูชันที่ใช้งานได้ 100% นี่ไม่ใช่กรณีของภาพ SVG
tomasz86

13

เว้นแต่ว่าคุณจะแสดงรูปทรง / การออกแบบที่เรียบง่ายหรือต้องการแก้ไขบางส่วนของกราฟิกด้วยแอปโดยเฉพาะไม่มีแรงจูงใจในการใช้ SVG มากนัก คุณสามารถสร้าง PNG ได้เป็นสองเท่าของขนาดต้นฉบับ (สำหรับจอแสดงผลเรตินา) และยังคงมีขนาดไฟล์ตามลำดับความสำคัญที่เล็กลง - ไม่ต้องพูดถึงการครอบคลุมที่ดีกว่าสำหรับเบราว์เซอร์เดิม (ไม่จำเป็นต้องใช้จาวาสคริปต์หรือโพลีฟิลล์)

ฉันพูดแบบนี้ในฐานะคนที่สร้าง UI ด้วยกราฟิกเวกเตอร์ เป็นเครื่องมือออกแบบที่ยอดเยี่ยม แต่สำหรับการจัดส่ง / แบนด์วิดท์ / การเข้าถึงนั้นยากที่จะทำให้ PNG ติดอันดับต้น ๆ เมื่อคืนฉันได้ทดสอบโลโก้ที่รู้จักกันดี CocaCola.svg เกือบ 20K เนื่องจากเป็นสีทึบ / แบนฉันจึงส่งออกเป็น PNG-8 พร้อมการบีบอัดจานสี 12 สีและลดลงเหลือ 1.6K (!!!) สำหรับโลโก้เพียงไม่กี่โลโก้ไม่ใช่เรื่องใหญ่ แต่เมื่อคุณต้องแสดง 40 ของพวกเขา .. ดีคุณได้ภาพ

ส่วนที่ดีที่สุดคือคุณสามารถเปลี่ยน PNG เป็น uri ข้อมูล base64 และฝังไว้ในสไตล์ชีตของคุณได้เลย ไม่แนะนำให้ใช้กับ SVG ซึ่งเป็นรูปแบบที่มีชื่อเสียงในด้านประสิทธิภาพและความเข้ากันได้อยู่แล้วโดยเฉพาะในเบราว์เซอร์มือถือ

ในการปิดท้ายฉันต้องบอกว่ามีจุดแข็งและกรณีการใช้งานสำหรับทั้งสองอย่าง แต่ PNG ได้ระเบิดเส้นทางมากขึ้นและคุณต้องเผชิญกับการต่อต้านน้อยลงเมื่อคุณไปกับกระแส สำหรับกรณีแปลก ๆ ที่ SVG เหมาะสมกว่าฉันขอแนะนำบทความนี้และแหล่งเรียนรู้นี้

ออกแบบให้มีความสุข!


IMO นี่คือคำตอบที่ดีที่สุด
Marco Demaio

คุณควรระบุโลโก้ Coca Cola ที่คุณใช้งานด้วย โลโก้ปัจจุบันจาก 2007 เป็นง่ายมากและเป็นรอบ8KB มันยังไม่มีอะไรเทียบกับ PNG-8 แต่ดีกว่า 20KB มาก
Caleb Taylor

12

SVG นั้นยอดเยี่ยม (วิธีที่ FakeRainBrigand อธิบายไว้อย่างดี) และแสดงผลได้สวยงาม แต่ก็ค่อนข้างซับซ้อน เบราว์เซอร์มีงานที่ต้องทำมากขึ้นเมื่อจัดการกับข้อมูลเวกเตอร์แทนที่จะเป็นภาพที่ใช้พิกเซล รูปภาพเป็นองค์ประกอบหนึ่ง SVG อาจมีลูกจำนวนมากที่สามารถเพิ่มลงใน DOM ได้เมื่อใช้แบบอินไลน์

ฉันไม่ได้ทำการทดสอบประสิทธิภาพที่มีค่าใด ๆ แต่จากมุมมองเชิงตรรกะควรใช้ SVG อย่างระมัดระวังในเรื่องประสิทธิภาพโดยเฉพาะอย่างยิ่งเมื่อจัดการกับเบราว์เซอร์มือถือวัยกลางคน (ความเครียดของ CPU) จะมีประโยชน์มากในการมีแผนภูมิที่คุณสามารถดูพลังงานของ CPU ที่ใช้โดย 100 ภาพ SVG เทียบกับ 100 ภาพ PNG บนอุปกรณ์ Android และ IOS ที่แตกต่างกัน ...

สิ่งที่น่ารำคาญอีกอย่างของ SVG คือแท็กต้องการแอตทริบิวต์ความกว้างและความสูงสำหรับ Android / Samsung บางเบราว์เซอร์และ IE เก่าที่ดีของเรา และบรรณาธิการ SVG ที่ทันสมัยที่สุดเช่น A *** e Illustrator เพียงแค่เพิ่มแอตทริบิวต์ "viewBox"

สิ่งที่ยอดเยี่ยมที่สุดเกี่ยวกับ SVG คือการแสดงผลที่สวยงามและคมชัดในทุกความหนาแน่นของพิกเซล


3

เป็นเรื่องจริง png ถูกใช้เกือบทุกที่ ฉันคิดว่าเป็นเพราะโดยส่วนใหญ่ SVG นั้นค่อนข้างไร้ประโยชน์ภาพควรจะใหญ่ขึ้น (ฉันคิดว่า) และคอมพิวเตอร์ต้องสร้างภาพใหม่ทุกครั้งที่คุณซูม (เพราะคุณซูมภาพตลอดเวลาไม่ใช่เหรอ ?) ฉันคิดว่านี่เป็นเหตุผลที่สำคัญที่สุด


26
SVG มีประโยชน์มากสำหรับไอคอนซึ่งมีอยู่ทั่วไปในเว็บไซต์สมัยใหม่ (มือถือ) พวกเขานำเสนอการปรับขนาดและการจัดรูปแบบ css โดยไม่มีบทลงโทษด้านคุณภาพคุณลักษณะสำคัญสองประการที่ไม่มีอยู่ใน png
user1884155

จากมุมมองของผู้ใช้มันไม่มีจุดหมาย แต่ในฐานะผู้พัฒนามัลติมีเดียการใช้ไฟล์เพียงไฟล์เดียวที่สามารถใช้กับหน้าจอใดก็ได้และจะรักษาคุณภาพเดียวกันไว้เสมอ
sebastian romero

2

โปรดทราบว่าSVG ที่มีประสิทธิภาพอาจกลายเป็นสิ่งที่น่ากลัว แม้แต่ในเบราว์เซอร์สมัยใหม่เช่น Chrome (เขียนสิ่งนี้ในปี 2019!) หน้าคล้าย CMS ที่มีไอคอน svg ไม่กี่ 100s (เกือบ 3-800) จะแขวนเบราว์เซอร์เป็นเวลา 5+ วินาทีเพื่อสิ้นสุดการเรนเดอร์ ในขณะเดียวกันกำลังขยาย CPU ออก

ตามที่ระบุไว้ที่อื่น ๆ นับ SVGs ฝังอยู่ในหน้าexpontentiallyเพิ่มภาระในเบราว์เซอร์ดังนั้นหากคุณเกิดขึ้นที่จะเผชิญกับสถานการณ์เช่นนี้

ตัวเลือก # 1: แปลง svgs เป็น webfont (ดูแผนภูมิประสิทธิภาพที่นี่: http://frozeman.de/blog/2013/08/why-is-svg-so-slow/ )

ตัวเลือก # 2: ถอยกลับไปใช้ PNG แบบเดิม ๆ

ในสถานการณ์เช่นนี้ที่คุณ ~ ไม่อยากทำอะไรแปลก ๆ เช่นการปรับเปลี่ยนสีแบบทันทีและคุณมี SVG หลายอินสแตนซ์ PNG รุ่นเก่าจะทำงานและช่วยชีวิตทั้งวัน!


ฉันไม่คิดอย่างนั้น SVG มีประสิทธิภาพที่ดีกว่า อยากแนะนำให้อ่านสิ่งนี้: vecta.io/blog/comparing-svg-and-png-file-sizes
Harry Sarshogh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.