# 運行原理剖析
我們不講底層架構,核心原理,太枯燥,也記不住,沒必要。
畢竟不是人人都要當架構師。
我們從M2的模式說起。
理解了他的模式,就知道了他的原理。
M2有3種模式,
1. 默認模式(default)
2. 開發模式(developer)
3. 生產模式(production)
## 默認模式
安裝完成后,就是默認模式。
它跟生產模式差不多.
最大的不同是,
默認模式可以在后臺清緩存,生產模式不能。
它帶有一點靈活性。
1. 錯誤不顯示在頁面上,錯誤記錄到項目的var/report里
2. 開啟靜態緩存文件,也就是說讀取的靜態緩存文件,在pub/static里
3. 默認模式未針對生產環境進行優化,主要原因是靜態文件是動態生成(先創建靜態文件再緩存)。而生產模式是用命令行工具生成的靜態文件,不是動態生成。所以默認模式的性能沒有生產模式好。
4. 可以在后臺開啟/禁用/刷新緩存
## 開發模式
顧名思義,就是開發測試用的。
1. 錯誤直接顯示在頁面上
2. 關閉靜態緩存文件,每次頁面刷新都動態生成靜態文件到pub/static里
3. 可以在后臺開啟/禁用/刷新緩存
4. 可以在后臺設置瀏覽器編譯less
## 生產模式
線上站點都必須改成生產模式。
1. 錯誤不顯示在頁面上,錯誤記錄在項目的var/report里
2. 開啟靜態緩存文件,每次只從pub/static目錄讀取緩存文件,如果沒有的話 就報錯了。錯誤要在var/report里看。
3. 不能在后臺開啟/禁用/刷新緩存。
4. 要用命令行工具來生成靜態文件,生成在pub/static目錄下
也就是說,生產模式為了加速,提高效率,一律只讀取pub/static下的靜態緩存文件。任何人都干擾不了它。
## 總結
說白了,默認模式就是個雞肋,食之無用,棄之可惜。
我們只需要開發模式和生產模式就行。
也就是說我們:
> 在開發模式下開發測試。
> 在生產模式下部署上線。
開發模式下這樣設置
//bbs.mallol.cn/?thread-148.htm
因為默認模式和生產模式都強制性的讀取pub/static下的靜態緩存文件,所以就比較復雜了,每次修改內容都要清緩存并且重新生成靜態文件才生效。
默認模式和生產模式要類似這樣操作:
~~~
php bin/magento maintenance:enable && git pull origin master
rm -rf var/di/* && rm -rf var/generation/* && rm -rf var/cache/* && rm -rf var/page_cache/* && rm -rf var/view_preprocessed/* && rm -rf pub/static/* && rm -rf generated/* && mkdir var/di
php bin/magento setup:upgrade && php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f && php bin/magento indexer:reindex && php bin/magento maintenance:disable && php bin/magento cache:clean && php bin/magento cache:flush
~~~
說白了,就是
#1,開啟維護模式,如果有用git版本控制代碼的話,就pull最新代碼下來。
#2,刪除靜態文件和一系列緩存文件
#3,更新數據庫以及代碼編譯
#4, deploy生成靜態文件到pub/static里,供m2讀取。
#5,更新索引,關閉維護模式,以及清空刷新magento緩存。
這個我就不細說了,在后面的`Magento2線上部署` 章節里會詳細說到。
他這個pub/static下的靜態文件都來源于插件和主題下的web目錄下的文件,都是網站運行過程中需要調用的js/css/images/字體等等。
**一定要搞清楚你目前的m2項目是處于哪個模式。要對癥下藥。
不然總是遇到無樣式或者頁面空白的情況,一臉懵逼。**
用這個命令查看當前模式
~~~
php bin/magento deploy:mode:show
~~~
## 一句話
開發模式不用管pub/static下的靜態緩存文件,也不需要deploy什么的。
生產模式一定要管pub/static下的靜態緩存文件,要先刪除靜態文件清緩存后再deploy生成靜態文件,刷新緩存,不然就會出問題。
**注意:
不是說開發模式下就不用管緩存了,我這里說的是不需用deploy生成靜態文件,緩存還是要清的。**
如果你按照
http://bbs.mallol.cn/?thread-148.htm
這里設置的話,就不需要清后臺緩存,因為后臺緩存被禁用了。
但是還是需要清瀏覽器緩存的。
還需要`rm generated/* -rf`,因為如果你有修改過php的構造函數`function __construct()`里的代碼 就需要清下`generated/`下的代碼緩存,不然會報錯 說找不到這個類 等奇怪的錯誤。
## 什么是Magento緩存呢?

這里就是所謂的magento緩存。
緩存在`var/`下面。
比如`var/generation/`,`var/di/`,`var/cache/`,`var/page_cache`,`var/view_preprocessed`。
這幾個目錄都是magento緩存。
不要跟deploy的靜態文件搞混淆了,不是同一個東西。
因為deploy的靜態文件在`pub/static`下面。
因為現在的瀏覽器緩存也很嚴重,特別是css/js,要強制刷新才會更新。
所以你修改js/css后 一定要清瀏覽器緩存,才會看到最新的效果
## 開發模式/生產模式 任意切換
### 切換到生產模式
~~~
php bin/magento deploy:mode:set production
~~~
切換到生產模式后,需要刪除緩存文件并deploy下。
### 切換到開發模式
~~~
php bin/magento deploy:mode:set developer
~~~
切換到開發模式后,還需要再設置下:
http://bbs.mallol.cn/?thread-148.htm
如果有無樣式或其他報錯的話,先嘗試執行更新系統的操作:
~~~
php bin/magento maintenance:enable
rm -rf var/di/* && rm -rf var/generation/* && rm -rf var/cache/* && rm -rf var/page_cache/* && rm -rf var/view_preprocessed/* && rm -rf pub/static/* && rm -rf generated/* && mkdir var/di
php bin/magento setup:upgrade && php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f && php bin/magento indexer:reindex && php bin/magento maintenance:disable && php bin/magento cache:clean && php bin/magento cache:flush
~~~
## 關于服務器配置問題
因為m2分開發模式和生產模式,因為開發模式非常耗資源,所以服務器配置按需配置:
> 1. 開發和線上版本都在同一個服務器,配置至少是4核8G
> 2. 服務器只放線上版本,配置至少是2核4G
> 3. 服務器只放開發版本,配置至少是2核8G
- 序言
- 全面解讀Magento2
- Magento2簡介
- Magento2特點
- Magento2目錄結構
- Magento2語法講解
- 運行原理剖析
- 開啟Magento2之旅
- 安裝Magnto2
- 購買阿里云服務器(Ubuntu系統)
- 安裝和配置Nginx/PHP/PHP-FPM
- 配置Mysql并創建數據庫
- 配置Nginx虛擬主機
- 安裝和配置Magento2
- 導入演示數據
- 手把手教你創建git代碼庫
- 續外篇-購買AWS服務器
- 續外篇-Mac下安裝LNMP
- 續外篇-安裝phpmyadmin
- 如何升級php版本
- 使用Magento2
- 創建多網店多域名以及安裝中文語言包
- 創建獨立cms頁面
- 創建分類和產品
- 創建產品屬性
- 創建優惠券
- 導入產品csv
- 下單/發票/發貨/退貨
- M2常用命令
- 如何安裝主題
- 如何安裝插件
- 如何使用API
- 常見問題
- 常見問題 二
- 常見問題 三
- 常見問題 四
- 常見問題 五
- Magento2主題
- 主題框架詳解
- Layout文件詳解
- M2里的JS
- 主題實戰
- 前期準備工作
- 完成首頁
- 重寫分類頁面
- 錦囊妙計
- 產品詳情頁面講解
- 購物車頁面講解
- 支付頁面講解
- 主題修改記錄
- 關于主題的一些學員問答
- Magento2插件
- 插件框架詳解
- XML配置說明
- 插件實戰
- 準備工作
- 寫代碼
- 調試
- 難點解析
- 插件升級
- 插件修改記錄
- 擴展閱讀
- 如何創建cron任務和功能
- 發送郵件(帶附件)
- 如何在代碼里創建屬性
- Magento2線上部署
- 基本流程
- 配置Redis
- 配置Varnish+SSL
- Varnish配置教程(2020年修訂版)
- Paypal設置
- 一些優化
- Magento2 版本升級
- v2.3.0版本填坑指南
- v2.4.x升級指南
- 配置nginx pagespeed模塊進行加速
- M1數據庫遷移到M2指南
- 安裝配置Elasticsearch
- Magento2常用工具
- 網站測速分析工具
- 在線創建插件模塊
- M2后臺可視化編輯器里的標簽變量
- 遇到問題,我該怎么做
- 常用代碼
- SEO在線分析工具
- 本地用xdebug遠程調試mgtdev2服務器的項目
- 后續之路