4
แนวทางปฏิบัติที่ดีที่สุดในการลดกิจกรรม Garbage Collector ใน Javascript
ฉันมีแอป Javascript ที่ค่อนข้างซับซ้อนซึ่งมีลูปหลักที่เรียกว่า 60 ครั้งต่อวินาที ดูเหมือนว่าจะมีการรวบรวมขยะจำนวนมากเกิดขึ้น (ตามเอาต์พุต 'ฟันเลื่อย' จากไทม์ไลน์หน่วยความจำในเครื่องมือ Chrome dev) - และสิ่งนี้มักส่งผลกระทบต่อประสิทธิภาพของแอปพลิเคชัน ดังนั้นฉันจึงพยายามค้นคว้าแนวทางปฏิบัติที่ดีที่สุดในการลดปริมาณงานที่พนักงานเก็บขยะต้องทำ (ข้อมูลส่วนใหญ่ที่ฉันสามารถหาได้บนเว็บเกี่ยวกับการหลีกเลี่ยงการรั่วไหลของหน่วยความจำซึ่งเป็นคำถามที่แตกต่างกันเล็กน้อย - หน่วยความจำของฉันได้รับการปลดปล่อยเพียงแค่มีการรวบรวมขยะมากเกินไป) ฉันสมมติว่า สิ่งนี้ส่วนใหญ่มาจากการนำวัตถุกลับมาใช้ใหม่ให้มากที่สุด แต่แน่นอนว่าปีศาจอยู่ในรายละเอียด แอปพลิเคมีโครงสร้างใน 'เรียน' ตามสายของจอห์นเรซิกง่าย JavaScript มรดก ฉันคิดว่าปัญหาหนึ่งคือบางฟังก์ชันสามารถเรียกได้หลายพันครั้งต่อวินาที (เนื่องจากมีการใช้งานหลายร้อยครั้งในระหว่างการวนซ้ำของลูปหลักแต่ละครั้ง) และบางทีตัวแปรการทำงานภายในในฟังก์ชันเหล่านี้ (สตริงอาร์เรย์ ฯลฯ ) อาจเป็นปัญหา ฉันตระหนักถึงการรวมกันของวัตถุสำหรับวัตถุที่ใหญ่กว่า / หนักกว่า (และเราใช้สิ่งนี้ในระดับหนึ่ง) แต่ฉันกำลังมองหาเทคนิคที่สามารถนำไปใช้ทั่วกระดานโดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับฟังก์ชันที่เรียกหลายครั้งในการวนซ้ำที่แน่นหนา . ฉันสามารถใช้เทคนิคอะไรเพื่อลดปริมาณงานที่พนักงานเก็บขยะต้องทำ? และบางทีอาจใช้เทคนิคอะไรในการระบุว่าวัตถุใดถูกเก็บขยะมากที่สุด (เป็นโค้ดเบสที่ใหญ่มากดังนั้นการเปรียบเทียบสแน็ปช็อตของฮีปจึงไม่เกิดผลมากนัก)