路老闆個人品牌網站
0
  • 會員登入
  • 關於我們
    回主選單
    • 關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    回主選單
    • 線上課程
    • 預約服務
    • 活動報名
  • 商品總覽
  • 創作與紀錄
    回主選單
    • 部落格
    • 影像紀錄
    • Podcast
    • 我的作品
  • 最新消息
  • 聯絡我們
  • Join us
  • Login
  • 0
    路老闆個人品牌網站
  • 關於我們
    關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    線上課程 預約服務 活動報名
  • 商品總覽
  • 創作與紀錄
    部落格 影像紀錄 Podcast 我的作品
  • 最新消息
  • 聯絡我們
部落格
  • 文章總覽
  • 分類
  • 技術筆記
  • 日本旅遊
  • 網站搬家
  • 時事觀察
  • 投資理財
  • 公司經營
  • 主機架設
  • 接案
  • 遊戲心得
  • 產品開箱
  • 網頁相關
  • 金流串接
  • 遊戲經濟
  • 閒聊
  • 直銷
  • CodeIgniter
  • cpanel
  • 出書材料
  • 個人品牌
  • SEO
  • 讀書心得
  • 金流物流
  • 線上課程心得
  • 日劇
    • 大河劇
      • 真田丸
  • AI
91app ClubHouse php8 imunify360 cdn apache php nginx linode digitalocean
  1. 首頁
  2. 部落格
  3. 如何刪除 CodeIgniter 快取頁面

如何刪除 CodeIgniter 快取頁面

2017 Aug 13 CodeIgniter

最近很忙 先來點技術筆記 有個客人說網頁顯示速度有點慢...
DSC01406

之前放 Linode 的時候
客戶說慢
結果去看 Linode (tokyo1) 連線
真的一直掉封包

問 Linode 他們說這沒辦法解決(怒)
唯一的方法只能換到 tokyo2
但 IP 不能保留
因為我是虛擬主機
一堆客人要因此換 DNS
這不是辦法
所以只好另外弄一台 Google 台灣的機器給客人放

之後似乎就沒事了
結果前幾天又說慢
我真的很懷疑客人是故意找麻煩的
打開頁面 平均都 1.2 秒就讀完了
是哪裡慢啊?

客人還附帶說明
產品清單頁如果點 view all 的話
會很慢

我想 廢話啊
view all 在他們的解釋
就是顯示該分類所有產品
如果那個分類有 100 個產品
那程式就得讀 100 個產品
有 1000 個產品
就要讀 1000 個
怎麼可能不慢?

他們的理由是
因為客戶很懶
會想一直瀏覽
不想點下一頁
理論上這種東西要用瀑布流
但瀑布流弄下去 SEO 方面可能造成 Google 無法收錄
(當然也有方法可以解 但不想弄得這麼複雜)

想想只好動腦筋到 cache 了
CodeIgniter 有內建頁面 cache 的功能
直接在 controller 加入 $this->output->cache(10);
就行了 10 是你要 cache 幾分鐘 結果問題就來了
因為畫面上有些資訊 不能快取

例如 如果你的選單上有購物車商品數量
有用戶名稱 就不能快取

因為一快取
第一個產生快取的用戶名稱/購物車商品數量
就會跑到第二個讀取頁面的人的頁面上
以這個客人來說
我的選單上有購物車數量
右邊還有一個購物車捲入的 html 區塊
所以這兩個我都得換成 ajax
讓頁面顯示後
再另外跟 server 要

然後還有一個更麻煩的事情
就是客戶說
如果他變更產品資料
前端不會馬上變更
這很正常
因為是快取檔案咩
就是要等時間過了才會變更
但萬一管理者修改的是價錢
那不免就會產生糾紛 所以理論上
只要管理者變更了內容
系統應該要自動把快取檔刪除
讓前台第一個瀏覽的倒楣鬼
觸發系統 產生新的快取檔案
但是 CodeIgniter 的 cache 似乎沒有讓我們取得某個 URL 快取檔名稱的函數
偷偷看了一下產生 cache file 的程式碼

在 system/core/Output.php 裡 找到 function _write_cache
可以看到這段程式碼

$cache_path = ($path == '') ? APPPATH.'cache/' : $path;
if ( ! is_dir($cache_path) OR ! is_really_writable($cache_path)) { log_message('error', "Unable to write cache file: ".$cache_path); return; }
$uri = $CI->config->item('base_url'). $CI->config->item('index_page'). $CI->uri->uri_string();
$cache_path .= md5($uri);

很明顯的 CodeIgniter 的 cache filename 是用 URL 做 md5 得到的
所以我們也可以自己透過 URL 來知道 CodeIgniter 產生了那個快取檔
我可以在產品 update 的 function 裡面
直接把這個快取檔案刪掉即可 至於快取檔的檔名
就用上面那段程式碼產生即可 這樣一來就可以兼具效率跟彈性啦~

  • 分享此文章
0則留言

相關文章

SL磐越物語號 上篇 - 2014 八重之櫻 Day3

被手機遊戲制約

參加活動的禮儀

有關旅遊的文章...

Apple TV/iTunes Store 影片購買指南

服務的價值在哪裡?

關於路老闆

推薦連結

  • Alice 你的理財陪跑教練
  • 羅鈞鴻/小虎老師
  • 徐慧玲Lynn
  • 寶寶牙醫 沈醫師
  • 保險資訊懶人包
  • 你的好感度教練
  • 天下為暢

聯絡我們

  • Email: louis@boss-louis.tw
  • 營業時間: 09:00~18:00
  • 聯絡電話: 02-77252950
  • 地址: 106 台北市大安區忠孝東路四段270號17樓
  • 隱私權政策
COPYRIGHT ©路老闆個人品牌網站 All rights reserved | Powered by 路老闆