คำสั่ง Artisan ที่ใช้จัดการเกี่ยวกับแคชบน Laravel

การแก้ไขเปลี่ยนแปลงโค้ดหรือกำหนดค่าบน 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:clearphp artisan route:cacheroutes/web.php , routes/api.php , bootstrap/cache/routes
มุมมอง (view)php artisan view:clearphp artisan view:cacheไฟล์ทั้งหมดในโฟลเดอร์ storage/framework/views
กำหนดค่า (Config)php artisan config:clearphp artisan config:cachebootstrap/cache/config.php , services.php, filesystems.php
ข้อมูลทั้งหมดที่อยู่ในแคช (cache)php artisan cache:clearconfig/cache.php
ล้างแคชทุกอย่างphp artisan optimize:clearphp artisan optimizebootstrap/cache/compiled.php, bootstrap/cache/services.php, application, route, config

คำสั่งล้างแคช เหมาะกับสภาพแวดล้อมการพัฒนา
ในไฟล์ .env จะเป็น APP_ENV=development และ APP_DEBUG=true

คำสั่งสร้าง/ปรับปรุงแคช เหมาะกับสภาพแวดล้อมก่อนเอาขึ้นใช้งานจริง
ในไฟล์ .env จะเป็น APP_ENV=production และ APP_DEBUG=false

ดังนั้นการเลือกใช้คำสั่งขึ้นอยู่กับสภาพแวดล้อมและวัตถุประสงค์ของการใช้งาน

ผู้เขียน

Sinnapa Prasith-Rathsint
sinnapa@g.swu.ac.th