React Native

การจัดการหน่วยความจำ

Memory leaks, cleanup, useEffect cleanup, listeners, timers, การจัดการรูปภาพขนาดใหญ่

20 คำถามสัมภาษณ์·
Senior
1

memory leak ในแอปพลิเคชัน React Native คืออะไร?

คำตอบ

memory leak เกิดขึ้นเมื่อออบเจกต์ในหน่วยความจำไม่ถูกใช้งานโดยแอปพลิเคชันอีกต่อไป แต่ garbage collector ไม่สามารถคืนหน่วยความจำได้เพราะยังมีการอ้างอิงถึงออบเจกต์เหล่านั้นอยู่ ใน React Native มักเกิดจาก subscription ที่ไม่ได้ทำ cleanup, timer ที่ยังทำงานอยู่หลังจาก unmount หรือ closure ที่จับการอ้างอิงเก่าเอาไว้ memory leak จะค่อย ๆ ลดประสิทธิภาพและอาจทำให้แอปแครชในเซสชันที่ยาวนาน

2

ฟังก์ชันที่ return ออกมา (cleanup function) ใน useEffect มีบทบาทอย่างไรในการจัดการหน่วยความจำ?

คำตอบ

cleanup function ที่ useEffect return ออกมาจะถูกเรียกก่อนที่ component จะถูก unmount หรือก่อนที่ effect จะถูกเรียกใหม่ด้วย dependency ใหม่ บทบาทหลักของมันคือการเคลียร์ทรัพยากรที่ effect จองไว้ เช่น ยกเลิก subscription, clearTimeout/clearInterval, ลบ event listener หรือยกเลิก request ที่ค้างอยู่ หากไม่มี cleanup นี้ ทรัพยากรเหล่านี้จะยังคงอยู่ในหน่วยความจำและอาจพยายามอัปเดต component ที่ถูก unmount ไปแล้ว

3

ทำไมการใช้ clearTimeout และ clearInterval ใน cleanup function ของ useEffect จึงสำคัญ?

คำตอบ

timer ที่สร้างด้วย setTimeout และ setInterval จะยังคงทำงานต่อแม้หลังจาก component ถูก unmount แล้ว หาก callback ของ timer พยายามอัปเดต state ของ component ที่ถูก unmount จะทำให้เกิด warning 'Can't perform a React state update on an unmounted component' และกลายเป็น memory leak timer จะเก็บการอ้างอิงไปยัง callback และ closure ของมัน ทำให้ garbage collector ไม่สามารถคืนทรัพยากรเหล่านี้ได้ การใช้ clearTimeout/clearInterval ใน cleanup ช่วยให้ยกเลิก timer เหล่านี้ได้อย่างถูกต้อง

4

จะป้องกัน memory leak อย่างไรเมื่อใช้ event listener ใน React Native?

5

closure ส่งผลต่อการจัดการหน่วยความจำในคอมโพเนนต์ React Native อย่างไร?

+17 คำถามสัมภาษณ์

หัวข้อสัมภาษณ์ React Native อื่นๆ

พื้นฐาน JavaScript

Junior
25 คำถาม

พื้นฐาน React

Junior
20 คำถาม

พื้นฐาน React Native

Junior
22 คำถาม

React Hooks

Junior
20 คำถาม

TypeScript สำหรับ React และ React Native

Junior
22 คำถาม

คอมโพเนนต์และ API ของ React Native

Junior
20 คำถาม

การจัดสไตล์และเลย์เอาต์ใน React Native

Junior
18 คำถาม

การนำทางใน React Native

Mid-Level
22 คำถาม

การจัดการ State ใน React Native

Mid-Level
24 คำถาม

Networking และ API ใน React Native

Mid-Level
20 คำถาม

การคงอยู่ของข้อมูล

Mid-Level
20 คำถาม

ฟอร์มและการตรวจสอบความถูกต้อง

Mid-Level
18 คำถาม

แอนิเมชัน React Native

Mid-Level
22 คำถาม

Native Modules & Bridge

Mid-Level
20 คำถาม

โค้ดเฉพาะแพลตฟอร์ม

Mid-Level
18 คำถาม

สิทธิ์และ Device API

Mid-Level
20 คำถาม

Push Notifications

Mid-Level
18 คำถาม

การทดสอบ React Native

Mid-Level
20 คำถาม

การ Debug React Native

Mid-Level
18 คำถาม

Build & Deployment

Mid-Level
20 คำถาม

Expo vs React Native Bare

Mid-Level
18 คำถาม

การเพิ่มประสิทธิภาพ

Senior
24 คำถาม

Architecture Patterns

Senior
22 คำถาม

React Native New Architecture

Senior
24 คำถาม

แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย

Senior
20 คำถาม

Offline-First Architecture

Senior
20 คำถาม

CI/CD React Native

Senior
20 คำถาม

Monorepo และการแชร์โค้ด

Senior
18 คำถาม

หัวข้อขั้นสูง

Senior
22 คำถาม

วงจรชีวิตแอปและการทำงานเบื้องหลัง

Mid-Level
20 คำถาม

การยืนยันตัวตนและการจัดการเซสชัน

Mid-Level
22 คำถาม

Monitoring & Crash Reporting

Senior
20 คำถาม

เชี่ยวชาญ React Native สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี