Ecshop給我感觸最深的就是緩存,彎彎繞繞的頁面顯示dwt,lbi。代碼架構不系統,沒有采用任何架構(推薦下平常總結公司用的架構:JOEPHP)。感覺就是ecshop整個邏輯有點亂,如果是在它現成的基礎修改功能,困難很大,因為要去重新了解它的邏輯實在費勁。但是做二次開發一般都是時間要求快快快,是以完成需求的時候沒有那麼多時間去考慮怎麼寫性能更好,怎麼寫sql查詢才會更優化。ecshop二次開發的時候更關注的是客戶的需求,但是仔細做,ecshop還是有很多可取之處。下面我總結下我在二次開發從ecshop學到的東西:
- 業務邏輯思考能力
- smarty緩存
- Ecshop背景分頁原理
一、業務邏輯思考能力
二次開發ecshop讓我感觸最深的就是做新的功能需求時先要分析需求,通過實際的開發,就會越加感受到這個邏輯思考能力重要性,當需要做一個功能時,能清晰的理清功能要求和流程,那麼在做事有目标的去做,開發效率會事半功倍。
當接到功能需求的時候,第一件事不是動手去做,先要分析需求的具體的要求,需求功能的該注意的地方,弄清楚這個功能是要幹嘛?把整個功能的流程列出來,設計出功能的執行流程和使用的技術,可以用文本文檔或者畫圖把流程記錄記錄下來(這裡我推薦一個任務管理工具TODO)。
二、smarty緩存
ecshop為什麼能有着備援且沒有優化的sql查詢還能速度不慢,我想主要原因就是ecshop用了模版緩存技術是主要原因之一。下面介紹下ecshop設定緩存的技巧方法。
設定smarty緩存需要4個步驟
1.開啟緩存
2.設定緩存的生命周期
3.設定緩存目錄
4.判斷是否有緩存,沒有緩存的時候在重新讀取資料
頁面緩存:整個頁面的全局緩存
1.開啟緩存
在ecshop中是通過
define('DEBUG_MODE', 0)
來設定debug模式
其中各種模式的涵義:
0 關閉debug
1 顯示錯誤資訊
2 關閉緩存
4 顯示debug頁面
8 記錄sql查詢
if ((DEBUG_MODE & ) != 2)
{
$smarty->caching = true;
}
ecshop通過判斷debug模式來檢查是否開啟緩存
2.設定緩存生命周期
ecshop也可以通過設定緩存生命周期時間為0進而關閉緩存
3.設定緩存目錄
$smarty->cache_dir = ROOT_PATH . 'temp/caches';
4.判斷是否有緩存,沒有緩存的時候在重新讀取資料
if (!$smarty->is_cached('模版名', $cache_id))
{
// 讀取資料并assign指派
}
$cache_id就是緩存的ID,根據這個ID找到緩存檔案,通過is_cached方法判斷頁面是否重新緩存頁面。
通過這種方式緩存,節省了網頁的打開時間,但網頁有些地方,不能緩存。比如:會員的登入狀态、購物車等,有些資料必須是實時的。
局部不緩存
在整個頁面緩存的基礎上,頁面有些資料是需要及時更新的,是以這就需要控制局部不緩存。
ecshop裡可以找到lib_insert.php檔案,所有不能緩存的地方都寫在這裡了。echsop就是通過insert方法得到php中對應函數的傳回值
具體用法為:在模版中的
{insert name=’xxx’}
的标簽可以得到lib_insert.php檔案中insert_xxx()函數的傳回值。
三、Ecshop背景分頁原理
背景分頁可以分為以下幾個步驟:
1.實作查詢分頁清單方法,裡面可以包括分頁,查詢等
2.實作顯示模版頁面
3.實作分頁頁面