文章彙整

Magento FPC清除事件

Astral WebBy Astral Web 4 weeks agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento FPC清除事件

每個建置網站的人一定都曾思考過這個問題:「如何讓我的網站變得更快?」網站的載入速度除了影響使用者體驗,也和SEO大有關係。因此,許多工程師使盡渾身解數,只求省下那數十毫秒的載入時間。使用Magento建置的網站,其功能強大且完善,但隨著啟用的套件越多,網站的載入速度也會變得越慢。所幸Magento本身已有「全頁快取 (Full Page Cache)」的功能,可大大優化這方面的表現。關於如何善用FPC, 在這篇文章中也有介紹。

然而,只要該網頁啟用了FPC就一定沒問題嗎?

由於FPC會把整個頁面「儲存」起來,若是網頁中所顯示的資料有所變化,系統必須將相關網頁的快取清除,以免使用者看到過時的資料。例如,管理者在後台將某個商品下架,該商品的商品頁、和該商品相關的商品分類頁、同分類之下的其他商品頁等等…的全頁快取皆會自動被系統清除。

檢視FPC的程式碼,便能發現系統會監聽一些事件,觸發時會根據情況清除相關的全頁快取。這些事件如下:

  • core_layout_render_element
  • clean_cache_by_tags
  • clean_cache_after_reindex
  • adminhtml_cache_flush_system
  • adminhtml_cache_flush_all
  • assigned_theme_changed
  • controller_action_postdispatch_catalog_product_save
  • model_save_commit_after
  • maintenance_mode_changed

以上事件可於 vendor/magento/module-page-cache/etc/events.xmlapp/code/Magento/PageCache/etc/events.xml 檔案中找到。

其中多數都是與管理員在後台執行的都做有關,例如在後台手動清除快取,或是將網站的維護模式進行切換。比較值得注意的事件是 model_save_commit_after, 當物件狀態轉換並被寫入資料庫時,便會觸發此事件,而導致相關的快取被清除。

其中一個常見的情況如:商品庫存在與遠端伺服器同步資料時,邏輯判斷有誤而導致商品庫存狀態頻繁地進行不必要的更動。正常情況下,這些事件並不會(也不應該)頻繁地被觸發。若發現網站頁面的全頁快取並未如常發揮,可針對這些事件檢查是否有異常觸發的現象。惟須注意的是,事件被觸發時,系統仍會根據情況判斷是否須清除快取,因此事件被觸發並不代表快取一定已經被清除。

當系統判斷應清除快取時,皆會透過 \Magento\PageCache\Model\Cache\Type::clean() 執行清除快取的動作。此函式接受2個參數:

  1. $mode: 清除模式,接受的選項如下
    • \Zend_Cache::CLEANING_MODE_ALL (預設)
    • \Zend_Cache::CLEANING_MODE_OLD
    • \Zend_Cache::CLEANING_MODE_MATCHING_TAG
    • \Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG
    • \Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG
  2. $tags: 相關的快取tag陣列,預設為空陣列

可針對這個函式使用plugin搭配logger紀錄觸發時間、事件、參數等等,以利排除全頁快取異常的肇因。關於plugin的使用方式,可參考此系列文章,本篇不再贅述。

 

希望本篇文章可幫助諸君進一步了解Magento Full Page Cache的運作行為,將此功能發揮得淋漓盡致以便提昇網站的載入效率、改善使用者體驗。喜歡歐斯瑞文章的讀者們,記得追蹤歐斯瑞FB粉絲團IG,也別忘了訂閱電子報,隨時掌握第一手消息喔!有問題也歡迎聯繫我們

 000

推薦文章

Categories:
  Magento-2Magento

留下回應

你的電子郵件地址不會被公開.