เหตุใดไฟล์ของ React จึงมีขนาดใหญ่มากเนื่องจาก API ขนาดเล็ก


88

นี่คือตัวเลข

  • นาที + gzip 26k
  • gzip 90k
  • เดิม 450 + k

และ React ไม่มีคุณสมบัติมากมายในเอกสารประกอบ ทำไมมันใหญ่จัง

ฉันรู้สึกว่าเป็นการใช้งาน DOM ที่มีน้ำหนักเบา แต่ฉันต้องการความแน่ใจ


4
คุณได้ดูแหล่งที่มาเพื่อดูว่ามันทำอะไร? เคล็ดลับที่เป็นประโยชน์อย่าดูที่เวอร์ชันย่อส่วน
Mr Lister

6
ฉันตัดสินใจที่จะถามก่อนที่จะดำน้ำในรหัส แม้ว่าฉันกำลังวางแผนที่จะใช้การตอบสนองฉันก็จะไปดำน้ำที่นั่นอยู่ดี)
Eldar Djafarov

2
26k ไม่ได้ใหญ่ขนาดนั้น ..
BT

ผู้คนบอกว่าปฏิกิริยาไม่ใหญ่ ใช่ reactjs มีขนาดเล็กมาก (6.41KB สำหรับเวอร์ชัน 16.1.1) แต่โปรดจำไว้ว่า React ต้องการ ReactDOM ในการทำงานและ ReactDOM มีขนาด 92.4KB
Dinh Tran

คำตอบ:


187

React ไม่น้อย! ส่วนที่ใหญ่ที่สุดที่ไม่สามารถเปิดเผยได้ของ React น่าจะเป็นระบบเหตุการณ์ - ไม่เพียง แต่ React ใช้การจัดส่งและการทำให้เกิดเหตุการณ์ของตัวเองเท่านั้น แต่ยังทำให้เหตุการณ์ทั่วไปในเบราว์เซอร์เป็นปกติเพื่อที่คุณจะได้ไม่ต้องกังวลกับมันมากนัก ตัวอย่างเช่นSelectEventPluginเป็น "ปลั๊กอิน" ในตัวซึ่งมีonSelectเหตุการณ์ที่ทำงานในลักษณะเดียวกันในทุกเบราว์เซอร์

การใช้งานDOM เสมือนจะใช้โค้ดในปริมาณที่เหมาะสมเช่นกัน ใช้ความพยายามอย่างมากในการเพิ่มประสิทธิภาพซึ่งเป็นสาเหตุที่เวอร์ชันที่ไม่ได้รับการปรับปรุงรวมถึงReactPerfซึ่งเป็นเครื่องมือในการวัดประสิทธิภาพการแสดงผล ในการอัปเดต DOM React ยังทำสิ่งอำนวยความสะดวกบางอย่างให้กับคุณเช่นรักษาการเลือกอินพุตและรักษาตำแหน่งการเลื่อนปัจจุบันให้เหมือนเดิม

React ยังมีเทคนิคอื่น ๆ อีกเล็กน้อยที่แขนเสื้อ หนึ่งในสิ่งที่ยอดเยี่ยมที่สุดคือรองรับการแสดงผลคอมโพเนนต์เป็นสตริง HTML ได้อย่างสมบูรณ์แม้ว่าคุณจะไม่มีสภาพแวดล้อมของเบราว์เซอร์ก็ตามดังนั้นคุณสามารถส่งหน้าที่ทำงานได้ก่อนที่ JS จะโหลด


คุณกำลังเปรียบเทียบ React กับอะไร? react-15.0.2.min.jsเป็น43k (gzipped)แต่ jQuery เป็น 33k ในขณะที่เป็นember-2.6.0.prod.js 363k (also gzipped)เห็นได้ชัดว่าเฟรมเวิร์กเหล่านี้ไม่ได้ทำสิ่งเดียวกันทุกประการ แต่มันมีความทับซ้อนกันมากดังนั้นฉันคิดว่าการเปรียบเทียบนั้นสมเหตุสมผล

หากคุณกังวลเกี่ยวกับขนาดการดาวน์โหลดฉันจะไม่กังวลมากเกินไปเกี่ยวกับรหัส JS ที่มีส่วนในสิ่งนั้น นี่คือโฆษณาที่ฉันเห็นทางด้านขวาของหน้า Stack Overflow ตอนนี้:

ขนาดการดาวน์โหลดคือ 95k - ฉันจะไม่คิดสองครั้งเกี่ยวกับการรวมรูปภาพแบบนั้นไว้ในหน้าเว็บเพราะ (แม้ว่าฉันจะกังวลเกี่ยวกับประสิทธิภาพ) มักจะมีสิ่งอื่น ๆ ที่เกี่ยวข้องกับประสิทธิภาพมากมายให้แก้ไขซึ่งมีกำไรมากกว่า


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

… แต่นั่นเป็นคำถามที่แยกจากกันโดยสิ้นเชิง :) หวังว่าฉันจะตอบคำถามของคุณ - ยินดีที่จะขยายความหากฉันไม่เข้าใจ


4
คุณตอบคำถามของฉันโดยสิ้นเชิง React น่ากลัว ฉันกำลังคิดว่าจะใช้มันสำหรับมือถือดังนั้นขนาดจึงสำคัญ มีเพียงข้อมูลไม่มากเกี่ยวกับสิ่งที่ทำ และฉันคิดว่ามีเทคนิคอื่น ๆ ที่ฉันสามารถใช้ได้ :) ฉันรู้สึกว่าฉันสามารถกำจัดสิ่งที่เป็น jquery ได้ และ paulmillr / exoskeleton ก็ทันเวลา :)
Eldar Djafarov

2
ฉันกำลังขุดแนวคิดเกี่ยวกับการสร้างแอปที่แตกต่างกันโดยสิ้นเชิง ตรวจสอบvimeo.com/78151404และgithub.com/component/component - โดยใช้สิ่งที่คุณไม่ได้ใช้ jQuery เลยและ compy เล่นได้ดีกับ jsxtransformations และ React ทำงานได้ยากที่สุด - ทุกอย่างอื่น ๆ (โมเดลเส้นทางการสื่อสารของเซิร์ฟเวอร์) สามารถครอบคลุมได้โดยไมโครคอมโพเนนต์
Eldar Djafarov

30
โปรดทราบว่าเรากำลังใช้ React บนเว็บไซต์บนมือถือของ Facebook ซึ่งขนาดมีความสำคัญอย่างยิ่ง :)
Vjeux

4
@lightblade อืม ... การใช้หน่วยความจำขึ้นอยู่กับจำนวนการจัดสรรรหัสของคุณ React พยายามอย่างมากที่จะหลีกเลี่ยงการจัดสรร
Dan Abramov

2
@ 1nfiniti โอเคอัปเดตหมายเลขใหม่เนื่องจากเป็นเวลาสองปีครึ่งแล้ว
Sophie Alpert

-1

สองสามความคิด .. ฉันมีความกังวลเหมือนกันกับขนาดของมัน แต่หลังจากใช้แล้วไม่ตลกฉันจะใช้มันถ้ามีขนาด 5MB มันดีแค่นั้นเอง ที่กล่าวว่าฉันตัดสินใจที่จะลดการพึ่งพาไลบรารีอื่น ๆ ให้ได้มากที่สุด ฉันใช้ jquery สำหรับสองสิ่ง .. ajax และการตอบสนอง ajax อัตโนมัติและการจัดการคำขอ (beforeSend ฯลฯ ) ที่จะจัดการเมื่อโทเค็นอยู่ในการตอบสนองหลังการเข้าสู่ระบบจากนั้นตรวจสอบให้แน่ใจว่าทุกคำขอของ ajax เพิ่มลงในส่วนหัวการอนุญาตก่อน การส่ง. ฉันแทนที่สิ่งนี้ด้วยจาวาสคริปต์ดั้งเดิมขนาดเล็กสุด ๆ ใช้งานได้ดี นอกจากนี้ฉันพยายามใช้ _underscore ฉันได้แทนที่ด้วย lodash ซึ่งมีขนาดเล็กและเร็วกว่าแม้ว่าตอนนี้ฉันไม่ได้ใช้มันดังนั้นอาจลบออกทั้งหมด

นี่คือบทความหนึ่งจากหลาย ๆ บทความใน Google ที่ฉันพบว่ามีทางเลือกอื่นโดยใช้ JS เนทีฟเหนือ jquery

http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms/


1
คุณยังสามารถสร้าง jQuery เวอร์ชันที่กำหนดเองด้วยชิ้นส่วนที่คุณใช้หากคุณกำหนดเป้าหมายไปที่เบราว์เซอร์หลายตัว
Dan Heberden
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.