พื้นที่เก็บข้อมูลนี้เป็นรายการคำแนะนำทั่วไปที่รวบรวมไว้เกี่ยวกับวิธีการใช้เฟรมเวิร์ก Laravel Livewire เพื่อตอบสนองข้อกังวลขององค์กรเกี่ยวกับความปลอดภัย ประสิทธิภาพ และการบำรุงรักษาส่วนประกอบ Livewire
ฉันชื่อ Michael Rubél และฉันเริ่มใช้เฟรมเวิร์ก Livewire ในปี 2019 ตอนที่ยังเป็นเฟรมเวิร์กใหม่และแทบไม่เสถียร ย้อนกลับไปในวันนั้น ฉันประทับใจกับความรวดเร็วในการจัดส่ง UI แบบไดนามิกโดยไม่ต้องใช้ JavaScript แต่ก็เหมือนกับโซลูชันซอฟต์แวร์อื่นๆ มันมีข้อผิดพลาด และฉันต้องจัดการกับมัน เป้าหมายหลักของพื้นที่เก็บข้อมูลนี้คือการรวบรวมประสบการณ์ที่สำคัญที่สุดที่คุณต้องพิจารณาเมื่อทำงานกับ Livewire
มาเริ่มกันเลย...
Livewire ต้องการองค์ประกอบรูท (div) ในแต่ละองค์ประกอบ คุณควรเขียนโค้ดไว้ข้างใน <div>Your Code Here</div>
เสมอ การละเว้นโครงสร้างนี้จะนำไปสู่ปัญหามากมายในการอัปเดตส่วนประกอบ
ตัวอย่าง
Don't pass large objects to Livewire components!
หลีกเลี่ยงการส่งวัตถุไปยังคุณสมบัติสาธารณะของส่วนประกอบหากเป็นไปได้ ใช้ประเภทดั้งเดิม เช่น สตริง จำนวนเต็ม อาร์เรย์ ฯลฯ นั่นเป็นเพราะว่า Livewire ทำซีเรียลไลซ์/ดีซีเรียลไลซ์เพย์โหลดของส่วนประกอบของคุณพร้อมกับคำขอแต่ละรายการไปยังเซิร์ฟเวอร์เพื่อแบ่งปันสถานะระหว่างส่วนหน้าและส่วนหลัง หากคุณต้องการทำงานกับออบเจ็กต์ คุณสามารถสร้างออบเจ็กต์เหล่านั้นภายในวิธีการหรือคุณสมบัติที่คำนวณได้ แล้วส่งคืนผลลัพธ์ของการประมวลผล
สิ่งที่ควรพิจารณาเป็นวัตถุขนาดใหญ่?
หมายเหตุ: หากคุณใช้คอมโพเนนต์แบบเต็มหน้า ขอแนะนำให้ดึงออบเจ็กต์ในคอมโพเนนต์แบบเต็มหน้า จากนั้นส่งต่อไปที่ชั้นล่างไปยังองค์ประกอบที่ซ้อนกันเป็นประเภทดั้งเดิม
หากคุณมีส่วนประกอบ Livewire (0) ที่มีส่วนประกอบ Livewire อื่น (1) คุณไม่ควรซ้อนองค์ประกอบนั้นให้ลึกลงไปอีก (2+) การซ้อนมากเกินไปอาจทำให้เกิดอาการปวดหัวเมื่อต้องรับมือกับปัญหาความแตกต่างของ DOM
นอกจากนี้ โปรดใช้ส่วนประกอบ Blade เมื่อคุณใช้การซ้อน เนื่องจากจะสามารถสื่อสารกับส่วนประกอบ Livewire ของผู้ปกครองได้ แต่จะไม่มีค่าใช้จ่ายที่ Livewire เพิ่ม
ตัวอย่าง
Livewire v3 เปิดตัวเลเยอร์นามธรรมใหม่ที่เรียกว่า Form Objects
ใช้สิ่งเหล่านี้เสมอเพราะจะทำให้ส่วนประกอบของคุณสามารถบำรุงรักษาได้มากขึ้นในระยะยาว
เอกสาร
หลีกเลี่ยงสถานการณ์ที่อาจนำไปสู่การส่งข้อมูลละเอียดอ่อนไปยังส่วนประกอบ Livewire เนื่องจากสามารถเข้าถึงได้ง่ายจากฝั่งไคลเอ็นต์ตามค่าเริ่มต้น คุณสามารถซ่อนคุณสมบัติจากส่วนหน้าได้โดยใช้แอตทริบิวต์ #[Locked]
โดยเริ่มจาก Livewire เวอร์ชัน 3
แทนที่จะสำรวจหน้าอย่างต่อเนื่องเพื่อรีเฟรชข้อมูลของคุณ คุณสามารถใช้ตัวฟังเหตุการณ์เพื่อดำเนินการอัปเดตส่วนประกอบหลังจากเริ่มต้นงานเฉพาะจากส่วนประกอบอื่นเท่านั้น
ตัวอย่าง
คุณสามารถใช้คุณสมบัติที่คำนวณเพื่อหลีกเลี่ยงการสืบค้นฐานข้อมูลที่ไม่จำเป็น คุณสมบัติที่คำนวณจะถูกแคชไว้ภายในวงจรการใช้งานของส่วนประกอบ และไม่ได้ทำงานหลายครั้งในคลาสส่วนประกอบหรือมุมมองเบลด เริ่มต้นจาก Livewire v3 ผลลัพธ์ของคุณสมบัติที่คำนวณสามารถถูกแคชไว้ในแคชระดับแอปพลิเคชันทั่วไป (เช่น Redis) ดู
ตัวอย่าง
ส่งเฉพาะ ID หรือ UUID ไปยังวิธี mount
จากนั้นแมปแอตทริบิวต์โมเดลกับคุณสมบัติของส่วนประกอบ ข้อควรจำ: อย่ากำหนดทั้งโมเดล แต่กำหนดเฉพาะแอตทริบิวต์เท่านั้น เพื่อหลีกเลี่ยงการแมปคุณลักษณะของโมเดลด้วยตนเอง คุณสามารถใช้วิธี fill
ตัวอย่าง
หลีกเลี่ยงการใช้ live
wire:model modifier สิ่งนี้ช่วยลดการร้องขอที่ไม่จำเป็นไปยังเซิร์ฟเวอร์ได้อย่างมาก ใน Livewire เวอร์ชัน 3 โมเดลทั้งหมดจะถูกเลื่อนออกไปตามค่าเริ่มต้น (เก่า: defer
modifier) ซึ่งถือว่าดี
ตัวอย่าง
Livewire มีคำสั่ง Artisan ในตัวเพื่อสร้าง ย้าย เปลี่ยนชื่อส่วนประกอบ ฯลฯ ตัวอย่างเช่น แทนที่จะเปลี่ยนชื่อไฟล์ด้วยตนเองซึ่งอาจเกิดข้อผิดพลาดได้ง่าย คุณสามารถใช้คำสั่งต่อไปนี้:
php artisan livewire:move Old/Path/To/Component New/Path/To/Component
คุณสามารถใช้สถานะการโหลดเพื่อทำให้ UX ดีขึ้นได้ โดยจะแจ้งให้ผู้ใช้ทราบว่ามีบางอย่างเกิดขึ้นในเบื้องหลังหากกระบวนการของคุณทำงานนานกว่าที่คาดไว้ เพื่อหลีกเลี่ยงการกะพริบ คุณสามารถใช้ตัวแก้ไข delay
ได้
ตัวอย่าง
แทนที่จะบล็อกการแสดงเพจจนกว่าข้อมูลของคุณจะพร้อม คุณสามารถสร้างตัวยึดตำแหน่งโดยใช้เทคนิคการโหลดแบบ Lazy Loading เพื่อทำให้ UI ของคุณตอบสนองมากขึ้น
ตัวอย่าง
ซิงค์ข้อมูลของคุณกับแบ็กเอนด์โดยใช้คำสั่ง $wire.entangle วิธีนี้จะทำให้โมเดลได้รับการอัปเดตทันทีที่ส่วนหน้า และข้อมูลจะคงอยู่ฝั่งเซิร์ฟเวอร์หลังจากคำขอเครือข่ายไปถึงเซิร์ฟเวอร์ ปรับปรุงประสบการณ์ผู้ใช้บนอุปกรณ์ที่ช้าได้อย่างมาก วิธีการนี้เรียกว่า "Optimistic Response" หรือ "Optimistic UI" ในชุมชนส่วนหน้าอื่นๆ
ตัวอย่าง
Livewire ไม่รองรับคำขอแบบฟอร์มภายใน แต่แทนที่จะฮาร์ดโค้ดอาร์เรย์ของกฎการตรวจสอบในส่วนประกอบ คุณอาจได้รับโดยตรงจากคำขอแบบฟอร์ม วิธีนี้ทำให้คุณสามารถใช้กฎการตรวจสอบเดียวกันซ้ำในเลเยอร์แอปพลิเคชันต่างๆ ได้ เช่น ในตำแหน่งข้อมูล API
ตัวอย่าง
แม้แต่การทดสอบง่ายๆ ก็สามารถช่วยได้มากเมื่อคุณเปลี่ยนแปลงบางสิ่งในส่วนประกอบ Livewire มี API การทดสอบที่ตรงไปตรงมาแต่ทรงพลัง
คุณทำงานกับ Livewire ทุกวันหรือไม่?
แนะนำแนวทางปฏิบัติที่ดีที่สุดของคุณหากคุณไม่เห็นแนวทางปฏิบัติเหล่านั้นในรายการ
หากคุณไม่แน่ใจว่าเป็นแนวทางปฏิบัติที่ดีหรือไม่ คุณสามารถเริ่มการสนทนาได้