【转】1.5 运行原理剖析

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

我们从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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SparkStreaming简介 - 与第一个Spark实时计算程序,使用netcat来写数据 - wordcount

官方文档 Spark Streaming 火花流是spark API的扩展,它支持可伸缩、高吞吐量、容错的实时数据流处理。 数据可以从多种来源(如Kafka、Flume、Kinesis或tcp套接字)中摄取,并且可以使用用高级函数表示的复杂算法进行处理,例如map, reduce, jo…

【转】老邹说Magento的前世今生

文章目录[隐藏] Magento Commerce的历史Magento 2版本历史Magento电子商务的特点和功能Magento市场Magento认证Magento事件为什么Magento统治电子商务领域 想要深入了解magento,我们有必要回顾一下Magento的前世今生,看它是如何一步步成长起来的。 为什…

【转】Magento2 安装系列一 虚拟机、CentOS7 安装

前言 最近打算在Windows10安装最新的magento2.3,由于mg2.3对Windows支持不太友好,所以就打算在Windows10安装虚拟机,虚拟机安装CentOS7版本的Linux,Linux安装Lnmp环境,最终安装Magento2.3.虚拟机选择与安装 我这边打算…

SparkStreaming -Kafka数据源

SparkStreaming处理kafka作为数据源 所以我们要创建的是kafka的Dstream,那么就要使用到KafkaUtils下的createStream,先来看一下ctrl点进去查看,然后来写参数 package date_10_16_SparkStreamingimport org.apache.spark.SparkConf import or…

SparkStreaming - 无状态与有状态 updataStateByKey

无状态与有状态 简单来说,无状态就是每个采集周期分别采集,并不会把前面的采集周期的数据一起计算 有状态就是:把前面采集周期的也算进来, 比如wordcount,无状态统计的就是每个采集周期内的个数,有状态的…

flink(一个流处理,一个批处理)

流处理,这里用netcat来完成 package com.smalltiger.flinkWCimport org.apache.flink.api.java.utils.ParameterTool import org.apache.flink.streaming.api.scala._/*** Created by smalltiger on 2019/11/6.* flink基于流处理的一个WordCount统计*/ object Stre…

volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))

volatile是java虚拟机提供的轻量级的同步机制: 1.保证可见性:线程之间可见性(及时通知) 2.不保证原子性 3.禁止指令重排 先了解一下jvm同步 由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(或者称为…

CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点

1、CAS底层原理? 自旋锁(cas思想)unsafe类,保证原子性靠的是unsafe类 1.首先可以看到: atomicInteger.getAndIncrement();getAndIncrement()的底层是 public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset,…

cas引出的ABA问题?如何解决?- 理解原子引用、时间戳(版本号)原子引用

ABA问题: 假如有两个线程1,2; cas下:1.线程取值完等待,2线程取值并把A改成B,有把B改成A,这是1线程执行会任务A还是原来的A没有发生改变,如果不在乎中间结果,只看收尾&am…

java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

1.公平锁、非公平锁 2.可重入锁(递归锁) 3.自旋锁 AtomicReference atomicReference new AtomicReference();//原子引用线程下面代码5秒钟自旋了10万次,还是很消耗CPU的 package HighConcurrency;import java.util.concurrent.TimeUnit; imp…

CountDownLatch,同步辅助类

public class CountDownLatchextends Object一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 假设定义一个计数器为 5。每个线程完成任务后计数减1计数器减为 0 则通知等待的线程。 用给定的计数 初始化 Count…

CyclicBarrier-同步辅助类

与CountDownLatch相反,CyclicBarrier是做加法 public class CyclicBarrierextends Object一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必…

阻塞队列-BlockningQueue

阻塞队列的前言介绍引用于https://www.cnblogs.com/aspirant/p/8657801.html,写的挺好有兴趣可以看一看 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的…

多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式 下面用的是lock锁 …

阻塞队列,来写生产者消费者,生产一个消费一个

用阻塞队列来写,就不需要程序员来关心什么时候阻塞线程await,什么时候唤醒线程notify()。 类似消息中间件 package JUC;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import…

线程池ThreadPool,线程池底层ThreadPoolExecutor方法七大参数,拒绝策略,以及实际开发中高并发下用到哪个线程池?

为什么要用线程池 基本的三个线程池的底层就是ThreadPoolExecutor类 ExecutorService threadPool Executors.newFixedThreadPool(int);//固定线程数的线程池,,执行长期的任务,性能好 ExecutorService threadPool Executors.newSingleThrea…

【转】2.1.1 购买阿里云服务器(Ubuntu系统)

购买阿里云服务器 优惠购买链接 戳我购买 Cpu和内存 M2对服务器配置要求比较高, cpu要大于等于1, 内存要大于等于2 选择Ubuntu镜像 最好用官方提供的公共镜像,不要用第三方的。 其他的配置 其他的配置按你自己的需求来选择。 控制台 购买完成后…

死锁编码及定位分析(故障排查)

什么是死锁? 在Java中使用多线程,就会有可能导致死锁问题。死锁会让程序一直卡住,不再程序往下执行。我们只能通过中止并重启的方式来让程序重新执行。 造成死锁的原因: 当前线程拥有其他线程需要的资源当前线程等待其他线程已…

【转】在win10接双显示器(扩展模式)怎么把鼠标游标切换到第二台显示器上?

作者:朱宁 链接:https://www.zhihu.com/question/50002939/answer/120465673 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 使用软件 DisplayFusion Pro 这个软件体量比较大,蓝…

java单例模式(饿汉式和懒汉式的几种不同写法)

1.饿汉式(直接创建)三种创建方法代码里面都有 第三种静态代码块方式,需要创建个properties文件 package java2;import java.io.IOException; import java.util.Properties;/*** 单例模式设计步骤:* 1.构造器私有化* 2.内部创…