我们不讲底层架构,核心原理,太枯燥,也记不住,没必要。
毕竟不是人人都要当架构师。

我们从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/diphp bin/magento setup:upgrade && php bin/magento setup:di:compilephp 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

【转】1.5 运行原理剖析相关推荐

  1. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    在上一节(ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行)中提到ASP.NET Core WebApp 必须含有Startup类,在本节中将重点讲解Startup类以及Midd ...

  2. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    之前两篇文章简析.NET Core 以及与 .NET Framework的关系和.NET Core的构成体系从总体上介绍.NET Core,接下来计划用一个系列对ASP.NET Core的运行原理进行 ...

  3. Spark运行原理剖析

    http://ihoge.cn/2018/Spark%20Scheduler.html Apache Spark是一个开源的,强大的分布式查询和处理引擎.它提供MapReduce的灵活性和可扩展性,但 ...

  4. ASP.NET Core 运行原理剖析

    1.1. 概述 在ASP.NET Core之前,ASP.NET Framework应用程序由IIS加载.Web应用程序的入口点由InetMgr.exe创建并调用托管.以初始化过程中触发HttpAppl ...

  5. Handler原理剖析,看这篇就够了

    Handler原理剖析,看这篇就够了 本篇文章将会对Handler进行深层次的剖析,结合关系剖析图.代码走向剖析图以及10个常见问题,希望看完文章的同学都能有所收获,加深对Handler的了解! 一. ...

  6. lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析

    Lua与其他宿主语言交互原理剖析 题外话:今天周末,刚好在家有时间就把我这次项目组内部分享的文章贴出来,分享给大家,同时也方便以后自己翻阅. 一. Lua简介 目标:Lua语言本身是用C语言来编写开发 ...

  7. LoadRunner系统架构简介与运行原理

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  8. python程序只能使用源代码进行运行吗-谈谈 Python 程序的运行原理

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...

  9. 统计学习方法|支持向量机(SVM)原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

最新文章

  1. 《疯狂动物城》电脑壁纸
  2. oracle jvm规范官网下载及相关书籍推荐
  3. 引用第三方高德地图接口---使用js脚本进行开发地图定位的步骤
  4. easywechat报错:Failed to cache access token
  5. 标准库rand()函数的缺陷以及Blitz++随机数生成的简介
  6. 排序算法专题-堆排序
  7. 计算机应用和轨道交通哪个好,轻轨学校对重庆和男生有什么好处
  8. 1#组合数学初步——排列与组合之加法原理、乘法原理
  9. 正确修改SATA模式
  10. android_98_自定义DragLayout
  11. IE浏览器弹框提示脚本发生错误
  12. 漫谈程序员系列 薪资 你是我不能言说的伤
  13. ArtWork.Conversion.
  14. [转]国内外php主流开源cms、商城、点评、SNS、DIGG、RSS、分类信息、Wiki汇总(2009年)...
  15. 如何测试UDP端口连通性
  16. 关于食物消化,避免损害和改善肠道健康的建议(科学支持)
  17. 单独某个设置feign接口的超时时间
  18. hudi系列-文件归档(archive)
  19. 通过ppk私钥连接服务器中遇到的问题
  20. android中获取打气筒服务的三种形式

热门文章

  1. 在ASP.NET MVC中实现Select多选
  2. android adb shell常用命令(四)
  3. ubuntu下的对拍
  4. JS基础_break和continue
  5. NOIP复习资料——往年习题精选
  6. 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
  7. LeetCode OJ 160. Intersection of Two Linked Lists
  8. 第二课 决策树与随机森林
  9. [剑指offer]面试题第[2]题[JAVA][替换空格][函数][字符串]
  10. 服务器重装后怎么装系统,服务器如何安装系统,小编教你如何安装