สถานะปัจจุบันของไลบรารีผ้าใบ Javascript? [ปิด]


91

ฉันได้ทำการค้นคว้าเกี่ยวกับไลบรารีผ้าใบ HTML และฉันเจอคำถามนี้ สถานะปัจจุบันของไลบรารี JavaScript และเฟรมเวิร์กของผ้าใบ HTML เป็นอย่างไร ที่ถูกถามในปี 2010 คำตอบอันดับต้น ๆ คือ Fabric.js หลังจากทำการค้นคว้าเพิ่มเติมเล็กน้อยฉันได้พบกับhttp://www.html5canvastutorials.com/ซึ่งมีบทช่วยสอนเกี่ยวกับ KineticJs ซึ่งมีผืนผ้าใบหลายแบบเพื่อความเร็ว การวิจัยเพิ่มเติมเล็กน้อยในภายหลังเปิดเผยว่าไลบรารี Canvas ดูเหมือนจะเต็มไปด้วยความเร็วและคุณสมบัติต่างๆ สถานะปัจจุบันของไลบรารีและเฟรมเวิร์ก JavaScript Canvas ในปัจจุบันเป็นอย่างไร มีหนึ่งออกมาด้านบน?

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


2
อย่างแน่นอน ฉันเชื่อว่าตัวเลือกมีลักษณะดังนี้: 2d-context -> KineticJS, fabric.js, paper.js หรือ easel.js 3d-context (webgl) -> Three.js
Eric Rowell

1
คุณสามารถตรวจสอบลิงก์ของ kangax เพื่อเปรียบเทียบไลบรารีแคนวาส โพสต์ใหม่ที่นี่docs.google.com/spreadsheet/…
ericbowden

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

4
รู้สึกเหมือนกันกับ @puk นอกจากนี้ฉันคิดว่าความแตกแยกทางความหมายระหว่างสิ่งที่เป็นเพียง "ปลายเปิด" กับสิ่งที่ระบุว่า "ไม่สร้างสรรค์" นั้นน่าขบขัน แปลได้คร่าวๆว่าการพูดคำถามที่คำตอบที่ไม่สามารถวัดผลได้เพียงคำเดียวนั้นไม่คุ้มค่าที่จะพิจารณาในคลังความรู้ด้านการเขียนโปรแกรมที่ได้รับความนิยมและครอบคลุมมากที่สุดในโลก ฉันเข้าใจว่าพวกเขาไม่เหมาะกับ 'Q + A' ที่ดี แต่ทำไมไม่เพียงแค่ทำเครื่องหมายว่าเป็น 'อัตนัยสูง' ปิดคะแนนตัวแทนและเปิดใจไว้ ...
Mark Fox

1
เพียงแค่ชั่งน้ำหนักสำหรับ SO ฉันก็รู้สึกหงุดหงิดเช่นกันกับการปิดคำถามที่เป็นประโยชน์อย่างต่อเนื่องเพียงเพราะเป็นเรื่องส่วนตัว แล้วไง!? มันเป็นของที่มีประโยชน์มากมาย
Iain Duncan

คำตอบ:


81

Disclaimer: ผมผู้เขียนของFabric.js

ฉันจะบอกว่า Easel.js, Fabric.js และ Paper.js เป็นหนึ่งในกลุ่มที่ใช้มากที่สุดในขณะนี้ ฉันตัดสินจากจำนวนผู้เฝ้าดู Github สำหรับแต่ละที่เก็บปริมาณการสนทนาใน Google Groups และความถี่ที่ฉันได้ยินเกี่ยวกับพวกเขาที่ใช้เป็นไลบรารีผ้าใบบน Twitter

สิ่งเหล่านี้เป็นเอกสารที่เหมาะสมไม่มากก็น้อยตัวอย่าง / การสาธิตกลุ่มสนทนาและการทดสอบหน่วย (สถานะของการทดสอบในไลบรารีผ้าใบอื่น ๆ ส่วนใหญ่ค่อนข้างน่าเศร้า)

ฉันยังดูแลตารางเปรียบเทียบของไลบรารีแคนวาสต่างๆซึ่งคุณสามารถดูได้ว่าไลบรารีได้รับการอัปเดตขนาดของมันการรองรับ IE <9 หรือ node.js และอื่น ๆ เมื่อเร็ว ๆ นี้เพียงใด


การเปรียบเทียบของคุณให้ข้อมูลมากมาย แต่สามารถแก้ไขได้โดยสาธารณะซึ่งควรถูก จำกัด เนื่องจากผู้ใช้รายอื่นบางรายจะแก้ไขข้อมูลเหล่านั้นอย่างไม่ถูกต้อง ฉันต้องการความช่วยเหลือคือ kineticjs จะไม่รองรับ nodjs? และคุณสามารถยกตัวอย่างเช่นโปรแกรมระบายสี windows (วาดวงกลมวัตถุด้วยผ้าของคุณ)
Thirumalai murugan

ไม่สามารถแก้ไขได้แบบสาธารณะ
kangax

1
โชคดีจังที่เจอโพสต์นี้! เคยร่วมงานกับ Kinetic แต่ยังไม่โตเต็มที่ จากนั้นก็ลอง Easel แต่มันหนักเกินไป ในที่สุดก็ย้ายไปที่ Fabric และเยี่ยมมาก!
MeLight

@kangax ขออภัยสำหรับความเข้าใจที่ไม่ถูกต้องคุณช่วยยกตัวอย่างให้ฉันได้ไหมเช่นโปรแกรมระบายสี windows (วาดวงกลมวัตถุด้วยผ้าของคุณ)
Thirumalai murugan

@Thirumalaimurugan ไปเลย: jsfiddle.net/fabricjs/nXmTC/1
kangax

67

แก้ไข: KineticJS ไม่ได้รับการบำรุงรักษาอีกต่อไป

คำเตือน: ฉันสร้าง KineticJS

KineticJS ทำได้ดีจริงๆ คุณสามารถค้นหาซอร์สโค้ดได้ที่Githubซึ่งมีผู้ใช้ 2180 คนติดดาวอยู่ในขณะนี้

สามารถรองรับรูปร่างพร้อมกันได้หลายพันรูปแบบ:

การทดสอบความเครียดแบบลากและวาง 10,000 ครั้ง: http://www.html5canvastutorials.com/labs/html5-canvas-kineticjs-drag-and-drop-stress-test-with-1000-shapes/

10,000 รูปร่างพร้อมคำแนะนำเครื่องมือ: http://www.html5canvastutorials.com/labs/html5-canvas-10000-shape-stress-test-with-kineticjs/

มีการรองรับเหตุการณ์ที่ดีมากรวมถึงกิจกรรมบนอุปกรณ์เคลื่อนที่และมีชุดการทดสอบหน่วย 100 ที่ค่อนข้างมั่นคงดังนั้นฐานรหัสจึงค่อนข้างมั่นคง

kangax: PS ใช้งาน fabric.js ได้อย่างยอดเยี่ยม! นอกจาก KineticJS (แน่นอน) ห้องสมุดโปรดอีกสองแห่งของฉันคือผ้าและกระดาษ


7
แค่ดูการสาธิตและประสิทธิภาพก็ดูดีมาก! ดีใจที่ทราบว่าคุณมีการทดสอบหน่วย ฉันเห็นว่าคุณอนุญาตให้สร้างหลายเลเยอร์ได้ นั่นเป็นสิ่งที่ดี ในผ้าเราปรับให้เหมาะสมในลักษณะเดียวกัน แต่มีเพียง 2 ชั้น - ชั้นหนึ่งสำหรับการเลือกชั้นหนึ่งสำหรับการวาดภาพ - และภายใน (ผู้ใช้ไม่สามารถสร้างเพิ่มได้) ฉันพลาด Kinetic เมื่อสร้างแผนภูมิเปรียบเทียบไลบรารี เราควรแก้ไข :)
kangax

6
อัปเดต: KineticJS อยู่ใน github แล้ว: github.com/ericdrowell/KineticJS
Eric Rowell

7
KineticJS เปรียบเทียบกับ EaselJS อย่างไร? เมื่อใดควรใช้อะไร
geeky_monster

1
ต้องการชี้ให้เห็นว่า KineticJS รองรับเวกเตอร์ SVG เช่นกันผ่าน Kinetic.Path () รูปร่างhtml5canvastutorials.com/kineticjs/…
Eric Rowell

2
@EricRowell Mate ฉันรัก KineticJS ความเร็วการแต่งงานกับ GSAP แต่สิ่งที่ทำให้หัวของฉันหมุนได้มีวิธีเปลี่ยนวัตถุ KineticJS อย่างอิสระเหมือนใน FabricJS หรือไม่? นี่คือลิงค์อ้างอิงถึงสิ่งที่ฉันพยายามจะพูด: fabricjs.com/customizationฉันไม่ต้องการใช้ FabricJs เนื่องจากมันช้ามากและประสิทธิภาพต่ำก็เห็นได้ชัดจากการทดสอบหน่วยต่างๆ ฉันรอคอยที่จะหาวิธีที่จะสามารถเปลี่ยนวัตถุใน KineticJS ได้อย่างอิสระเพราะมันจะทำให้ชีวิตง่ายขึ้นมาก ขอบคุณ Praney
praneybehl

62

สำหรับผู้อ่านล่าสุด ณ เดือนมกราคม 2013 ฉันได้ประเมิน:

  • Kinetic
  • ผ้า
  • กระดาษ
  • ขาตั้ง

ด้วยการ "ประเมิน" ฉันทำมากกว่าอ่านเอกสาร ฉันสร้างแอปต้นแบบ

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

  • ความไม่สอดคล้องกันของ API ที่แปลกและไม่มีเอกสารซึ่งทำให้เสียเวลาไปมากโดยไม่จำเป็น
  • การสนับสนุนเหตุการณ์ตัวชี้ที่ไม่สอดคล้องกัน โดยเฉพาะอย่างยิ่ง Fabric ไม่ถือว่า "Path" เป็นวัตถุรูปทรงที่แท้จริงซึ่งสามารถเลือกและสังเกตได้ สิ่งนี้ไม่ตรงตามความต้องการของฉันเนื่องจากเส้นทางแบบโต้ตอบเป็นข้อกำหนดหลักของแอปของฉัน
  • เบื้องหลังการแปลเพิ่มเติมใน Canvas เพื่อวางตำแหน่งวัตถุ สำหรับฉัน Fabric พยายามที่จะฉลาดเกินไปในเรื่องนี้โดยไม่ต้องแจ้งให้ผู้พัฒนาทราบว่ากำลังทำอะไรอยู่
  • ความคิดเห็นที่รุนแรงเกินไปเกี่ยวกับวิธีการเคลื่อนไหวปรับขนาดและหมุนการโต้ตอบ ในหลาย ๆ วิธีเป็นเรื่องดีที่มีการสร้างฟังก์ชันนี้ไว้ในเฟรมเวิร์ก แต่ในกรณีของฉันฉันไม่เห็นด้วยกับวิธีการใช้งานซึ่งหมายความว่าโดยพื้นฐานแล้วต้องนำมาใช้ใหม่ด้วยตัวเองอยู่ดี
  • เอกสารกระจัดกระจาย - หลายกรณีที่เอกสารของวิธีการเป็นรูปแบบ: "setX (Y) - ตั้งค่า X เป็น Y" :-)

ฉันมองไปที่ Paper และไม่ได้ไกลเกินไป ดูเหมือนว่าฉันจะปวกเปียกมากเกินไปและอยู่ระหว่าง IMO ที่มีอุจจาระมากเกินไป - ห้องสมุดการแสดงภาพมีมากเกินไปที่จะเป็นแบบจำลองวัตถุอย่างง่ายสำหรับ Canvas แต่ไลบรารีการแสดงภาพไม่เพียงพอที่จะแข่งขันกับ D3 นอกจากนี้เอกสารอีกครั้งก็ไม่สามารถเข้าถึงได้โดยเฉพาะ

ฉันคิดว่า Easel น่าจะสมเหตุสมผลมากถ้าคุณมีพื้นหลัง Flash / ActionScript แต่ฉันไม่ทำ นอกจากนี้ดูเหมือนว่าจะเน้นเกมมากเกินไปสำหรับความต้องการของฉัน เล็บในโลงศพเป็นเอกสารอีกครั้ง - ไม่เพียงพอและนำเสนอในรูปแบบที่ไม่ได้มาตรฐาน

ดังนั้นฉันจึงไปกับ Kinetic เพราะ:

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

Kinetic ไม่สมบูรณ์แบบด้วยวิธีการใด ๆ และมีอยู่สองสามครั้งที่ฉันต้องดำลึกลงไปในซอร์สโค้ดเพื่อหาสิ่งที่เกิดขึ้นจริงภายใต้ฝาครอบ นอกจากนี้ฉันพลาดการแยกวิเคราะห์ SVG และผลลัพธ์ของ Fabric


1
ขอบคุณสำหรับคำตอบนี้ช่วยฉันประหยัดเวลาได้มาก ฉันจะไปกับ Kinetic และหวังว่าคุณจะค้นพบสิ่งที่คุณพูดไปแล้ว
Bashevis

ฉันได้ทำการทดสอบผู้ใช้ที่ไม่ใช่ทางวิทยาศาสตร์เกี่ยวกับการสาธิตแบบลากแล้วปล่อยสำหรับไลบรารีด้านบนบน iPad3 และ Samsung Galaxy Tab2 KineticJS ออกมาเป็นผู้ชนะที่ชัดเจนเช่นกันที่นี่ตอบสนองได้ดีขึ้นและมีความแน่นอนมากขึ้นในการวางตำแหน่งการสัมผัส
Per Quested Aronsson

1
ฉันกำลังประเมินทั้งสองอย่างและในขณะนี้ fabricjs ด้วยความจริงใจดูเหมือนว่าจะสมบูรณ์กว่าและได้รับการบันทึกไว้เป็นอย่างดี
albanx

9
Jeremy ฉันอยากทราบข้อมูลเพิ่มเติมเกี่ยวกับความไม่สอดคล้องกันของ APIใน Fabric ฉันพยายามทำให้มันง่ายที่สุดเท่าที่จะเป็นไปได้ดังนั้นหากมีอะไรแปลก ๆ ฉันก็อยากจะดูแลมันอย่างแน่นอน คุณสามารถยื่นตั๋วหรือพูดถึงที่นี่ได้หรือไม่? เอกสารได้รับการปรับปรุงตั้งแต่เดือนมกราคมแม้ว่าจะยังไม่ดีเท่าที่ฉันต้องการ ความคิดเห็นที่ชัดเจนเกี่ยวกับการโต้ตอบ - ฉันเดาว่าคุณสามารถพูดได้แม้ว่าจะมีการปรับแต่งมากมายที่คุณสามารถทำได้ สิ่งที่คุณต้องการแตกต่างกันอย่างไร? ในที่สุดเหตุการณ์ตัวชี้ - ไม่แน่ใจว่าคุณหมายถึงอะไร เส้นทางเป็นรูปร่างที่แท้จริง: fabricjs.com/quadratic-curve
kangax

23

ฉันอยากจะแนะนำ Pixijs ไลบรารีแคนวาสประสิทธิภาพสูง

Pixi.js เป็นโปรแกรมแสดงผล webGL 2 มิติที่มีทางเลือกผ้าใบที่ไร้รอยต่อซึ่งช่วยให้สามารถทำงานได้กับเบราว์เซอร์สมัยใหม่ทั้งหมดทั้งเดสก์ท็อปและมือถือ

http://www.goodboydigital.com/pixi-js-is-out/


3
เมื่อเดือนกรกฎาคม 2014 สิ่งนี้ดูเหมือนจะเป็นห้องสมุดผ้าใบที่ดีที่สุด ด้วยผู้คน 4k แสดงมันบน Github และถูกใช้โดย บริษัท และหน่วยงานใหญ่ ๆ pixijs.com/projectsเช่น Google
Vennsoh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.