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

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

thinkphp学习笔记3—项目编译和调试模式的更多相关文章

  1. ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式

    /** * ThinkPHP version 3.1.3 */ ThinkPHP ( 官方网站:http://www.thinkphp.cn/ ) 目前最新版本是 3.2.2,它要求 PHP 的版本高 ...

  2. thinkphp学习笔记4—眼花缭乱的配置

    原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...

  3. thinkphp学习笔记2—入口文件

    原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...

  4. thinkphp学习笔记7—多层MVC

    原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...

  5. thinkphp学习笔记6—url模式

    原文:thinkphp学习笔记6-url模式 入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作.ThinkPHP是区分大小写 ...

  6. thinkphp学习笔记5—模块化设计

    原文:thinkphp学习笔记5-模块化设计 1.模块结构 完整的ThinkPHP用用围绕模块/控制器/操作设计,并支持多个入口文件盒多级控制.ThinkPHP默认PATHINFO模式,如下: htt ...

  7. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  8. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  9. thinkphp学习笔记9—自动加载

    原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...

随机推荐

  1. WPF 3D:MeshGeometry3D的定义和光照

    原文 WPF 3D:MeshGeometry3D的定义和光照 由于WPF计算光照会根据整个平面的方向向量,所以如果在不同面上使用同一个点可能会达到不同的光照效果.让我们用不同的定义Mesh的方法来演示 ...

  2. [Windows Phone] 实作不同的地图显示模式

    原文:[Windows Phone] 实作不同的地图显示模式 前言 本文章主要示范如何让地图有不同的模式产生,例如平面图.地形图.鸟瞰图.鸟瞰图含街道等. 这部分主要是调整 Map.Cartograp ...

  3. Win32 Windows编程 九

    资源的使用 1 资源文件 图标 光标 字符串 菜单  加速键 对话框资源位图等等 资源脚本文件 - 扩展名为RC文件 定义了资源和相关文件等信息 资源编译器 - RC.exe 2 图标资源 ICON ...

  4. Android锁定屏幕或关闭状态-screen,高速按两次音量向下键来实现拍摄功能(1.1Framework在实现的形式层广播)

    思想的实现:     WindowManagerService循环读取下面的关键信息和分发形式.在PhoneWindowManager.interceptKeyBeforeQueueing方法中进行消 ...

  5. uva live 6190 Beautiful Spacing (二分法+dp试 基于优化的独特性质)

    I - Beautiful Spacing Time Limit:8000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  6. sql function递归

    alter function Fn_GetUserGroupRelation ( @DHsItemID int ) returns nvarchar(1024) begin declare @Col_ ...

  7. Swift String length property

    Swift的String居然没有length属性,好难受,每次要获取String的字符串长度都要借助全局函数countElements. 没办法.仅仅有扩展String结构体,给它加入一个属性了. i ...

  8. Windows Phone 8.1 新功能 - 应用栏控件

    2014年4月3日的微软Build 2014 大会上.Windows Phone 8.1 正式公布. 相较于Windows Phone 8.不论从用户还是开发人员的角度,都产生了非常大的变化. 接下来 ...

  9. Java 对象的生命周期

    Java对象的生命周期 在Java中,对象的生命周期包含下面几个阶段: 1.      创建阶段(Created) 2.      应用阶段(In Use) 3.      不可见阶段(Invisib ...

  10. poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)

    意甲冠军:给定一个有向图有m单向边缘.免费推断是否两点起来(a可以b要么b可以a或最多彼此),该请求 弱联通重量. 算法: 缩点求强连通分量.然后又一次建图.推断新图是否是一条单链,即不能分叉,假设分 ...