开发者社区> 杰克.陈> 正文

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上之后出现问题

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
读书笔记:成功的项目经理会做的事情
1、成功的项目经理应确保全部工作已在预算范围内按时优质地完成,从而使客户满意。 2、项目经理应积极主动地计划、沟通,并领导项目团队完成项目目标。 3、项目经理应激励员工取得成功,并赢得客户的信任。
800 0
异常处理 - PHP手册笔记
原文:异常处理 - PHP手册笔记 PHP代码中所产生的异常可被throw语句抛出,并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,每一个try至少要有一个与之对应的catch。
866 0
PHPExcel 使用笔记
获取sheet 有效效值行列数 $maxCell = $objWorksheet->getHighestRowAndColumn(); $data = $objWorksheet->rangeToArray('A1:' .
594 0
命名空间 - PHP手册笔记
原文:命名空间 - PHP手册笔记 概述 命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色。这个原理应用到程序设计领域就是命名空间的概念。
995 0
PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记   XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据。   对于XML的操作包括遍历,生成,修改,删除等其他类似的操作。PHP对于XML的操作方式很多,这次学习的是通过DOMDocument进行操作,其他的操作方法可以参考   http://www.oschina.net/code/snippet_110138_4727   1.对XML文件的遍历     通过DOMDocument对于XML文件的操作的方法:首先要实例化一个DOMDocument类的对象,然后引入要操作的XML文件。
859 0
预定义变量 - PHP手册笔记
原文:预定义变量 - PHP手册笔记 预定义变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头。超全局变量是在全部作用域中始终可用的内置变量。在函数或方法中无需执行global $variable,就可以访问它们。
882 0
预定义异常 - PHP手册笔记
原文:预定义异常 - PHP手册笔记 Exception是所有异常的基类,类摘要如下:
593 0
运算符 - PHP手册笔记
原文:运算符 - PHP手册笔记 运算符优先级 每种编程语言都有运算符,运算符要学会灵活使用。 运算符拥有不同的优先级和结合方向。
789 0
引用 - PHP手册笔记
原文:引用 - PHP手册笔记 引用是什么 PHP中的引用意味着,用不同的变量名访问同一变量内容,类似于Unix的文件名和文件本身(变量名是目录条目,变量内容是文件本身,即用不同的目录条目访问同一文件),可以看做Unix文件系统中的硬链接。
756 0
SUV的配置及使用(项目发布与检出)|学习笔记
快速学习SUV的配置及使用(项目发布与检出)
70 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载