ใน Laravel Octane ความแตกต่างที่สำคัญระหว่างอินสแตนซ์แซนด์บ็อกซ์และอินสแตนซ์ทั่วไปคือ:
อินสแตนซ์แซนด์บ็อกซ์
1. อินสแตนซ์แอปพลิเคชันแบบโคลน: ออกเทนจะโคลนอินสแตนซ์แอปพลิเคชันดั้งเดิมเพื่อสร้างอินสแตนซ์แบบแซนด์บ็อกซ์สำหรับคำขอที่เข้ามาแต่ละรายการ เพื่อให้แน่ใจว่าแต่ละคำขอมีสภาพแวดล้อมที่แยกออกมาเป็นของตัวเอง ช่วยป้องกันปัญหาการคงอยู่ของสถานะระหว่างคำขอ2. การกำหนดค่าใหม่ทั้งหมด: อินสแตนซ์แซนด์บ็อกซ์มีสำเนาใหม่ของที่เก็บการกำหนดค่า ซึ่งโคลนจากอินสแตนซ์แซนด์บ็อกซ์ใหม่ เพื่อให้แน่ใจว่าการเปลี่ยนแปลงการกำหนดค่าจะส่งผลต่อแซนด์บ็อกซ์เท่านั้น
3. Flushed Cache และ Session: อินสแตนซ์ Sandbox จะล้างแคชและสถานะเซสชันเพื่อป้องกันไม่ให้ข้อมูลคงอยู่ในคำขอต่างๆ
4. นักแปลที่แปลเป็นภาษาท้องถิ่น: อินสแตนซ์แซนด์บ็อกซ์จะตั้งค่าภาษาภายในตัวแปลเป็นภาษาดั้งเดิมเพื่อให้แน่ใจว่านักแปลจะถูกรีเซ็ตสำหรับแต่ละคำขอ
5. การลืมการตรวจสอบสิทธิ์: อินสแตนซ์แซนด์บ็อกซ์จะลืมการป้องกันใดๆ ที่ตั้งไว้ในระหว่างการร้องขอครั้งก่อนเพื่อให้แน่ใจว่ามีสถานะที่ปลอดภัย
ตัวอย่างปกติ
1. อินสแตนซ์แอปพลิเคชันดั้งเดิม: อินสแตนซ์ปกติคืออินสแตนซ์แอปพลิเคชันดั้งเดิม ซึ่งคงอยู่ข้ามคำขอ2. การกำหนดค่าแบบถาวร: อินสแตนซ์ทั่วไปใช้พื้นที่เก็บข้อมูลการกำหนดค่าดั้งเดิม ซึ่งอาจนำไปสู่ปัญหาสถานะคงอยู่ระหว่างคำขอได้
3. แคชและเซสชันถาวร: อินสแตนซ์ปกติไม่ล้างแคชและสถานะเซสชัน ทำให้ข้อมูลคงอยู่ข้ามคำขอได้
4. ไม่มีตัวแปลที่แปลเป็นภาษาท้องถิ่น: อินสแตนซ์ปกติจะไม่รีเซ็ตภาษาของนักแปล ซึ่งอาจนำไปสู่ปัญหาได้หากแอปพลิเคชันอาศัยการตั้งค่าเฉพาะภาษา
5. Persistent Auth Guards: อินสแตนซ์ปกติจะไม่ลืมการป้องกันใดๆ ที่ตั้งไว้ในระหว่างการร้องขอก่อนหน้านี้ ซึ่งอาจนำไปสู่ปัญหาด้านความปลอดภัยได้หากไม่ได้รับการจัดการอย่างเหมาะสม
แนวทางปฏิบัติที่ดีที่สุด
1. หลีกเลี่ยงการส่งผ่านอินสแตนซ์ของแอปพลิเคชัน: หลีกเลี่ยงการส่งผ่านอินสแตนซ์ของแอปพลิเคชันโดยตรงไปยังบริการหรือซิงเกิลตัน ให้ใช้ตัวช่วย `app()` หรือ `Container::getInstance()` แทนเพื่อให้แน่ใจว่ามีการใช้อินสแตนซ์ที่ถูกต้อง2. ใช้การโทรกลับ: ใช้การโทรกลับเพื่อส่งคืนอินสแตนซ์ Sandbox แทนที่จะส่งผ่านอินสแตนซ์ของแอปพลิเคชันโดยตรง
เมื่อเข้าใจความแตกต่างเหล่านี้และปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด คุณจะมั่นใจได้ว่าแอปพลิเคชันของคุณทำงานได้อย่างมีประสิทธิภาพและปลอดภัยด้วยค่าออกเทน[1][5]
การอ้างอิง:[1] https://www.getoctane.io/sandbox
[2] https://salesforce.stackexchange.com/questions/42163/Performance-difference-between-sandbox-and-production-instances
[3] https://otoy1473900221.zendesk.com/hc/en-us/articles/115001577606-Instances
[4] https://blog.octanesolutions.com.au/sandbox-analysis.delivered
[5] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-and-handling-requests