Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ฉันจะแยกความแตกต่างระหว่าง singletons ที่ยังคงมีอยู่และผู้ที่ไม่ได้อยู่ในออกเทนได้อย่างไร


ฉันจะแยกความแตกต่างระหว่าง singletons ที่ยังคงมีอยู่และผู้ที่ไม่ได้อยู่ในออกเทนได้อย่างไร


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

ซิงเกิลที่ยังคงมีอยู่

1. Singletons ในผู้ให้บริการ: Singletons ที่ได้รับการแก้ไขภายในผู้ให้บริการโดยเฉพาะในวิธีการ `boot 'หรือ` ลงทะเบียน' จะยังคงมีอยู่ในคำขอ นี่เป็นเพราะ singletons เหล่านี้ได้รับการแก้ไขในระหว่างแอปพลิเคชัน bootstrapping และถูกเก็บไว้ในแคชคอนเทนเนอร์

2. บริการที่อบอุ่น: คุณสามารถเพิ่ม Singletons ลงในอาร์เรย์ `Warm` ในไฟล์การกำหนดค่าออกเทนเพื่อให้แน่ใจว่าได้รับการแก้ไขและคงอยู่ในระหว่างการใช้งานแอปพลิเคชัน bootstrapping ด้วยวิธีนี้ซิงเกิลเหล่านี้จะพร้อมใช้งานในทุกคำขอ

ซิงเกิลที่ไม่คงอยู่

1. Singletons ในการจัดการคำขอ: Singletons ที่ได้รับการแก้ไขในระหว่างการจัดการคำขอจะไม่คงอยู่ พวกเขาถูกสร้างขึ้นในทุกคำขอและไม่ได้เก็บไว้ในแคชคอนเทนเนอร์

2. บริการฟลัช: หากคุณมีแพ็คเกจที่ลงทะเบียนและแก้ไข Singleton ภายในผู้ให้บริการและคุณต้องการล้างอินสแตนซ์นั้นก่อนทุกคำขอคุณสามารถเพิ่มลงในอาร์เรย์ `Flush` ในไฟล์การกำหนดค่าออกเทน สิ่งนี้ทำให้มั่นใจได้ว่าซิงเกิลจะถูกลบออกจากคอนเทนเนอร์หลังจากจัดการแต่ละคำขอ

แนวทางปฏิบัติที่ดีที่สุด

1. ใช้การโทรกลับ: เมื่อลงทะเบียน singletons ให้ใช้การโทรกลับแทนอินสแตนซ์จริงเพื่อให้แน่ใจว่าพวกเขาได้รับการแก้ไขเพียงครั้งเดียว

2. หลีกเลี่ยงคุณสมบัติคงที่: หลีกเลี่ยงการใช้คุณสมบัติคงที่ในซิงเกิลของคุณเนื่องจากสามารถนำไปสู่การรั่วไหลของหน่วยความจำและคงอยู่ข้ามคำขอ

3. ใช้ค่าคงที่: ใช้ค่าคงที่แทนคุณสมบัติคงที่เมื่อเป็นไปได้เพื่อให้แน่ใจว่าไม่สามารถเปลี่ยนแปลงได้

4. อินสแตนซ์คำขอ: เมื่อแก้ไข singletons ให้ผ่านการโทรกลับเพื่อให้แน่ใจว่าอินสแตนซ์คำขอได้รับการแก้ไขอย่างถูกต้อง

5. ที่เก็บการกำหนดค่า: ใช้ฟังก์ชัน `config ()` ผู้ช่วยแทนที่จะฉีดที่เก็บการกำหนดค่าเพื่อให้แน่ใจว่าได้รับการแก้ไขอย่างถูกต้อง

ด้วยการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดเหล่านี้และทำความเข้าใจว่าออกเทนจัดการอินสแตนซ์ของซิงเกิลตันได้อย่างไรคุณสามารถจัดการและแยกความแตกต่างระหว่างซิงเกิลที่ยังคงมีอยู่และผู้ที่ไม่ได้อยู่ในแอปพลิเคชัน Laravel ของคุณทำงานบนออกเทน [2] [4] [5]

การอ้างอิง:
[1] https://laracasts.com/discuss/channels/laravel/singletone-not-working-in-laravel
[2] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-andlandling-requests
[3] https://grantwinney.com/difference-between-singleton-scoped-transient/
[4] https://betterprogramming.pub/the-downsides-of-coding-with-laravel-octane -17f4a7a4ea85?gi=d8afa3954408
[5] https://www.prismetric.com/laravel-octane/