ปริมาณการใช้หน่วยความจำ Redux [ปิด]


23

กรอบ Redux สนับสนุนกระบวนทัศน์ของฟังก์ชันบริสุทธิ์ / ไม่เปลี่ยนรูปแบบซึ่งส่งเสริมการสร้างสถานะใหม่จากสถานะก่อนหน้าในแง่ของการกระทำในปัจจุบัน การบังคับใช้กระบวนทัศน์นี้ไม่อาจปฏิเสธได้

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

มีใครเปรียบเทียบการใช้หน่วยความจำของแอพพลิเคชัน Redux กับสถาปัตยกรรม Flux แบบดั้งเดิมบ้างไหม ถ้าเป็นเช่นนั้นพวกเขาสามารถแบ่งปันสิ่งที่ค้นพบของพวกเขา?


4
ฉันลงคะแนนให้ปิดคำถามนี้เป็นนอกหัวข้อเนื่องจากมีการขอข้อมูลโปรไฟล์หน่วยความจำโดยพลการ

ได้คุณประวัติมันได้หรือไม่

ทำไมฉันถึงควรโพรไฟล์ เพื่อยืนยันความชัดเจน? มันไม่ได้เป็นความรู้สึกทั่วไปที่วางไข่วัตถุที่คล้ายกันซ้ำแล้วซ้ำอีกก่อให้เกิดค่าใช้จ่ายที่ร้ายแรงในแง่ของการใช้หน่วยความจำ? คำตอบของ @ Dan ให้วิธีการลดค่าใช้จ่ายนั้นและนั่นคือคำตอบที่ดีที่สุด
000

คำตอบ:


30

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

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

คุณจะต้องสำรวจโดยใช้ห้องสมุดอย่าง Immutable.js ที่ใช้งานรายการและแผนที่ที่ไม่เปลี่ยนแปลงอย่างมีประสิทธิภาพโดยใช้การแบ่งปันโครงสร้างภายใน ด้วยวิธีนี้การเปลี่ยนแปลงบางรายการในรายการไม่เกี่ยวข้องกับการคัดลอกมากนักเนื่องจากหน่วยความจำภายในส่วนใหญ่ใช้ร่วมกันระหว่างโครงสร้างข้อมูลรุ่นต่าง ๆ

แต่ในท้ายที่สุดวิธีเดียวที่จะบอกได้คือการเขียนแบบทดสอบความเครียดที่เลียนแบบการใช้งานแอพของคุณอย่างตั้งใจและวัดประสิทธิภาพสำหรับตัวคุณเอง


10
อย่าข้ามไปที่ Immutable.js อย่างรวดเร็ว มันกลายเป็นหมูหน่วยความจำที่ร้ายแรงในกรณีของเรา Immutable.js นำสิ่งของธรรมดาธรรมดาของคุณ (สันนิษฐาน) และทำให้พวกมันกลายเป็นสัตว์ประหลาดที่จำความทรงจำ ดูตัวอย่างนี้: jsfiddle.net/sn70x2p6หลังจากโหลดแท็บจะใช้หน่วยความจำ 61,000KB หลังจากสร้างวัตถุธรรมดาหนึ่งล้านชิ้นมันคือ 211,000KB บ้า. ตอนนี้คลิก "ทำให้ไม่เปลี่ยนรูป" และดูว่าเกิดอะไรขึ้น มันกระโดดมากกว่าการใช้หน่วยความจำ 1GB ประสบการณ์ของคุณอาจแตกต่างกัน แต่ไม่มาก
Olav Kokovkin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.