thinkphp学习笔记3—项目编译和调试模式

简介: 原文:thinkphp学习笔记3—项目编译和调试模式1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并缓存,第二次运行时直接载入编译缓存,这样省去一些IO开销,加快执行速度。
原文: thinkphp学习笔记3—项目编译和调试模式

1.项目编译

在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并缓存,第二次运行时直接载入编译缓存,这样省去一些IO开销,加快执行速度。并且在3.0以上的版本中海做了一些优化:

1.合并和兴编译缓存和项目编译缓存,不再生成两个缓存文件

2.直接对本地环境生成设置和常量定义减少环境判断

3.编译缓存可以直接替换框架入口甚至项目入口,甚至脱离框架独立运行

4.通过参数设置,生成的编译缓存载入外部的常量定义,便于产品用户定义

貌似高上大,后面继续讲在没有开启调试模式的情况下会在thinkphp\Application\Runtime目录下生成一个~runtime.php的文件,就是编译缓存文件。我实验了一下,在项目入口文件中有一句define('APP_DEBUG',True);修改成define('APP_DEBUG',False);,再次运行,在Runtime目录果然生成了一个类似文件,不过名称有点差别,是common~runtime.php,截图如下:

图1

打开这个common~runtime.php文件,我们可以看到内容是一行没有空格的代码,类似于压缩过的js代码,如下:

图2

注意环境改变之后这个缓存文件应该删除,不能把本地生成的编译缓存拷贝到其他服务器或者环境直接使用,只能再次生成。

编译缓存的内容包含:系统函数库,系统基础核心类库,扩展定义的核心行为类库,项目配置文件,项目函数文件。在项目入口文件中可以更改这个文件的生成目录例如:

define('RUNTIME_PATH','./App/temp/');

持此之外开可以弟子你故意缓存文件名,如下:

define('RUNTIME_FILE','./App/temp/runtime_cache.php');

我发现可以定义路径,但是文件名确没有如愿生成runtime_cache.php,始终是common~runtime.php。

我的修改如下:

define('RUNTIME_PATH','./temp/');
define('RUNTIME_FILE','./temp/runtime_cache.php');

最后得到结果如下截图:

图3

这里面生成了一系列的目录和文件,都是和编译缓存相关的。下面来替换框架入口文件为这个缓存文件看看能否正常运行,修改代码如下:

// 引入ThinkPHP入口文件
require './temp/common~runtime.php';
//require './ThinkPHP/ThinkPHP.php';

结果出现了错误,代码如下:

Fatal error: Class 'Think\Think' not found inD:\Serious\phpdev\thinkphp\temp\common~runtime.php on line 1

好吧,一开始只要知道有这么个东西就行了,不要玩这么高级的东西,先看看基本功能如何实现的吧。

 

2.调试模式

在项目入口文件中可以通过语句define('APP_DEBUG',True);来设置当前项目是否使用debug模式,待完成测试要部署到生产环境时再将这个值设置成False,就是部署模式。

使用调试模式给程序员带来以下便利:

  • 错误信息会提交到日志记录中便于调试
  • 关闭末班缓存,修改末班可以即时生效
  • 记录sql日志,方便分析sql语句
  • 关闭字段缓存,数据字段修改不受缓存影响
  • 严格检查大小写,避免部署到linux上之后出现问题

上面很多特性都需要在配置文件中修改配置,下一篇文章中再做介绍。

目录
相关文章
|
6月前
|
JavaScript 应用服务中间件 nginx
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
46 0
|
Java 开发工具 git
spring源码下载、编译、debug的详细教程
spring源码下载、编译、debug的详细教程
1220 0
spring源码下载、编译、debug的详细教程
|
2月前
|
C语言 C++
win32编程 -- 编写静态库空项目
win32编程 -- 编写静态库空项目
11 0
|
3月前
|
NoSQL 开发工具 数据库
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
4月前
|
Linux 数据安全/隐私保护 iOS开发
【教程】使用ipagurd打包与混淆Cocos2d-x的Lua脚本
本文将介绍如何使用ipagurd工具对Cocos2d-x中的Lua脚本进行打包与混淆,以及在iOS应用开发中的实际应用。我们将以Cocos2d-x-2.2.1 samples中的HelloLua为例,详细展示整个处理流程,并提供相应的代码案例演示。
重新编译Telepresence,谈如何写编译脚本
重新编译Telepresence,谈如何写编译脚本
71 0
|
Java Android开发
编译安卓项目时报错
编译安卓项目时报错
322 0
编译安卓项目时报错
|
PHP
【laravel】@14 Laravel-debugbar 开发调试利器(调试模式,调试器)
【laravel】@14 Laravel-debugbar 开发调试利器(调试模式,调试器)
148 0
【laravel】@14 Laravel-debugbar 开发调试利器(调试模式,调试器)
|
前端开发 JavaScript
前端实现多文件编译
在前端工程中,有时我们需要在浏览器编译并执行一些代码,这种需求常见于低代码场景中。例如我们在搭建时需自定义一部分代码,这些代码需要在渲染时执行。为了方便起见,我们写的代码一定是 ES6 语法,如果要在浏览器执行,那么就必须经过编译。下面是前端编译 JS 代码的一些实践。
200 0
|
Linux C语言 C++
微信后台phxrpc编译及QtCreator工程下载
微信后台phxrpc编译及QtCreator工程下载
105 0