# 运行原理剖析
我们不讲底层架构,核心原理,太枯燥,也记不住,没必要。
毕竟不是人人都要当架构师。
我们从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缓存呢?
![](https://box.kancloud.cn/1d39848c08d07c2e7397b6bb743bf10a_2152x1011.png)
这里就是所谓的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服务器的项目
- 后续之路