การแก้ไขเปลี่ยนแปลงโค้ดหรือกำหนดค่าบน Laravel ในบางครั้งมักจะพบเจอปัญหาแก้ไขเปลี่ยนแปลงโค้ดแล้วยังไม่ได้รับการอัปเดตตามที่เราแก้ไว้ล่าสุด เนื่องจากระบบการทำงานบน Laravel ที่อาจยังคงใช้ข้อมูลแคชตัวเก่าไว้ ทำให้การทำงานของระบบยังไม่ถูกต้องตามที่ต้องการตามที่แก้ไขไว้ล่าสุด
ดังนั้นจึงจำเป็นต้องใช้คำสั่งล้างแคช เพื่อรีเชตและสร้างแคชใหม่หลังจากการอัปเดตโค้ดเพื่อให้แน่ใจว่าการอัปเดตโค้ดของแอปพลิเคชันได้ทำงานตามที่แก้ไขไว้ล่าสุด เช่น เพิ่มเส้นทางใหม่, เปลี่ยนแปลงกำหนดค่า, หรือ แก้ไขไฟล์วิว และจะช่วยให้ได้รับการอัปเดตล่าสุดทันทีโดยระบบสร้างข้อมูลแคชใหม่จากโค้ดที่แก้ไขอัตโนมัติเมื่อมีการเรียกใช้งานในครั้งถัดไป เมื่อมีการเรียกใช้หน้าจอที่ทำการแคชแล้ว ระบบจะไม่ต้องทำการประมวลหรือโหลดข้อมูลใหม่ ซึ่งช่วยลดเวลาในการโหลดใช้ทรัพยากรและเพิ่มประสิทธิภาพของแอปพลิเคชัน
เริ่มต้นด้วยการเปิด Terminal ในโปรแกรม แล้วพิมพ์คำสั่งดังต่อไปนี้
การจัดการแคชเส้นทาง(Route)
เคลียร์แคชเส้นทาง (route)
php artisan route:clear
เป็นคำสั่งที่ใช้เพื่อล้างข้อมูลแคชของเส้นทางบนไฟล์ที่เกี่ยวข้องกับการกำหนดเส้นทาง route เช่น ไฟล์ routes/web.php , routes/api.php เพื่อให้ Laravel สร้างเส้นทางใหม่ตามการกำหนดค่าที่มีในไฟล์
สร้างแคชเส้นทาง (route)
php artisan route:cache
เป็นคำสั่งที่ใช้สร้างไฟล์ที่เก็บข้อมูลเส้นทางทั้งหมดของแอปพลิเคชัน เพื่อเพิ่มความเร็วในการโหลดเส้นทาง เมื่อเส้นทางถูกสร้างแคช จะทำให้ Laravel สามารถโหลดข้อมูลเส้นทางได้รวดเร็วขึ้น และช่วยในการรักษาประสิทธิภาพของระบบ
ข้อเสียของการใช้คำสั่ง php artisan route:cache คือ
1) ไม่สามารถใช้คำสั่งนี้กับ route ที่ใช้ Closure ได้
ตัวอย่าง route ที่ใช้ Closure
Route::get('/product/{id}', function ($id) {
return 'Product ID: ' . $id;
});
ตัวอย่าง route ที่ไม่ใช้ Closure ซึ่งจะใช้ Controller เป็นตัวกลางในการจัดการกับการเรียกใช้งานของเส้นทาง
Route::get('/product/{id}', [ExampleController::class, 'showProduct']);
public function showProduct($id)
{
return 'Product ID: ' . $id;
}
หากต้องการใช้คำสั่งล้างแคชเส้นทาง (route) ควรเปลี่ยนเป็น route ที่ไม่ใช้ Closure แทนที่จะกำหนด Closure ตรงๆในเส้นทางเอง
2) ไม่เหมาะกับการตรวจสอบการใช้เส้นทางอย่างละเอียด
หากต้องการ Debugging และตรวจสอบการใช้งานเส้นทางอย่างละเอียด
ควรจะใช้ php artisan route:clear แทน เพื่อล้างแคชและให้ Laravel โหลดข้อมูล
เส้นทางใหม่ทุกครั้งที่มีการใช้งาน
คำสั่งแสดงรายการเส้นทางที่อยู่ในระบบ
php artisan route:list
ไว้ตรวจสอบเส้นทาง route ที่เรากำหนดไว้บน laravel
หากใน route ไม่พบเส้นทางที่เรากำหนดไว้ ให้ใช้คำสั่ง php artisan route:clear เพื่อเคลียร์แคช หรือใช้คำสั่ง php artisan route:cache หรือ php artisan optimize:clear ได้
การจัดการแคชกำหนดค่า (Config)
เคลียร์แคชกำหนดค่า (Config)
php artisan config:clear
เมื่อแก้ไขไฟล์การกำหนดค่าและไม่เห็นการเปลี่ยนแปลง สามารถใช้คำสั่งนี้เพื่อเคลียร์แคชของไฟล์เกี่ยวกับการตั้งค่า config เช่น เคลียร์แคชบนไฟล์ config.php , services.php, filesystems.php เพื่อให้มีการเปลี่ยนแปลงทันทีโดยไม่ต้องรอให้ Laravel โหลดแคชใหม่
สร้างแคชกำหนดค่า (Config)
php artisan config:cache
เป็นคำสั่งที่ใช้ในการสร้างแคช ซึ่งช่วยเพิ่มความเร็วและประสิทธิภาพในการโหลดค่ากำหนดค่าในแอปพลิเคชันบน Laravel
ข้อเสียของการใช้คำสั่ง php artisan config:cache คือ
1) คำสั่งนี้ไม่ได้มีผลต่อไฟล์ environment (.env ) หากต้องการอัปเดต .env ให้ทำการ restart แอปพลิเคชัน
2) การทดสอบ Debugging ได้ยากเช่นเดียวกันกับ php artisan route:cache หากต้องการทดสอบระบบ ให้ใช้ php artisan config:clear แทน
การจัดการแคชมุมมอง (View)
เคลียร์แคชมุมมอง (View)
php artisan view:clear
เป็นการล้างแคชมุมมอง (view) ทั้งหมดที่อยู่ในโฟลเดอร์ storage/framework/views ซึ่งเป็นที่เก็บแคชของไฟล์วิวที่ไว้เรียกใช้งานในระหว่างการทำงานของแอปพลิเคชัน Laravel เมื่อมีการเรียกใช้งานไฟล์ View อีกครั้ง จะมีการสร้างแคชของ view ใหม่
หรือใช้คำสั่งดังนี้
สร้างแคชมุมมอง (View)
php artisan view:cache
เพื่อโหลดให้เร็วขึ้น
ข้อเสียของการใช้คำสั่ง php artisan view:cache คือ
ถ้ามีการแก้ไข views บ่อย คำสั่งนี้อาจจะไม่เป็นประโยชน์มากเท่าไร เพราะต้องทำการแคชใหม่ทุกครั้งที่มีการเปลี่ยนแปลง ซึ่่งอาจทำให้เสียเวลามากขึ้น
การจัดการข้อมูลทั้งหมดที่อยู่ในแคช (Cache)
เคลียร์ข้อมูลทั้งหมดที่อยู่ในแคช
ตามการกำหนดค่าในไฟล์ config/cache.php ไม่ว่าจะเป็นแคชแบบไฟล์หรือแบบฐานข้อมูล
โดยป้อนคำสั่งดังนี้
php artisan cache:clear
แคชแบบไฟล์ (file cache) จะลบไฟล์แคชทั้งหมดที่อยู่ในไดเรกทอรี
ตัวอย่างเช่น ในไฟล์ config/cache.php
//ถ้าค่า CACHE_DRIVER ตั้งค่าให้ใช้แคชแบบไฟล์ (‘file’)'default' => env('CACHE_DRIVER', 'file'),
//ไดเรกทอรีที่เก็บไฟล์แคชไว้
'path' => storage_path('framework/cache'),
เมื่อใช้คำสั่ง php artisan cache:clear จะลบไฟล์ที่อยู่ใน storage/framework/cache ออกไปทั้งหมด
ต่อไปจะเป็นแคชฐานข้อมูล (database cache) จะลบข้อมูลแคชทั้งหมดที่อยู่ในฐานข้อมูล
ตัวอย่างเช่น ในไฟล์ config/cache.php
//ถ้าค่า CACHE_DRIVER ตั้งค่าให้ใช้แคชแบบฐานข้อมูล ('database')
'default' => env('CACHE_DRIVER', 'database'),
'connection' => env('CACHE_DATABASE_CONNECTION', mysql),
//ตารางฐานข้อมูลที่ใช้เก็บแคช
'table' => env('CACHE_DATABASE_TABLE', 'cache'),
เมื่อใช้คำสั่ง php artisan cache:clear จะลบข้อมูลที่อยู่ในตาราง cache ในฐานข้อมูลออกไปทั้งหมด
สร้างแคชทั้งหมด
เคลียร์แคชทุกอย่าง
php artisan optimize:clear
เป็นการเคลียร์แคชทุกอย่างทั้ง events, views, cache, route, config, complied
ปรับปรุงแคช
php artisan optimize
แต่ในระหว่างการพัฒนา จะไม่แนะนำ เพราะคำสั่งนี้จะสร้างแคชทั้งหมดอาจใช้เวลานานกว่าที่จะปรับปรุงแคชเฉพาะส่วนที่มีการเปลี่ยนแปลงเท่านั้น
หรือ
ถ้าต้องการเปิดใช้งานแคชอีกครั้งหลังจากเคลียร์แคช จะสามารถใช้คำสั่งเพื่อสร้างแคชข้อมูลใหม่ เช่น
php artisan config:cache
php artisan route:cache
php artisan view:cache
แคช | คำสั่งล้างแคช | คำสั่งสร้างแคช /ปรับปรุงแคช | ไฟล์ที่เกี่ยวข้อง |
---|---|---|---|
เส้นทาง (route) | php artisan route:clear | php artisan route:cache | routes/web.php , routes/api.php , bootstrap/cache/routes |
มุมมอง (view) | php artisan view:clear | php artisan view:cache | ไฟล์ทั้งหมดในโฟลเดอร์ storage/framework/views |
กำหนดค่า (Config) | php artisan config:clear | php artisan config:cache | bootstrap/cache/config.php , services.php, filesystems.php |
ข้อมูลทั้งหมดที่อยู่ในแคช (cache) | php artisan cache:clear | – | config/cache.php |
ล้างแคชทุกอย่าง | php artisan optimize:clear | php artisan optimize | bootstrap/cache/compiled.php, bootstrap/cache/services.php, application, route, config |
คำสั่งล้างแคช เหมาะกับสภาพแวดล้อมการพัฒนา
ในไฟล์ .env จะเป็น APP_ENV=development และ APP_DEBUG=true
คำสั่งสร้าง/ปรับปรุงแคช เหมาะกับสภาพแวดล้อมก่อนเอาขึ้นใช้งานจริง
ในไฟล์ .env จะเป็น APP_ENV=production และ APP_DEBUG=false
ดังนั้นการเลือกใช้คำสั่งขึ้นอยู่กับสภาพแวดล้อมและวัตถุประสงค์ของการใช้งาน