认识:ThinkPHP的编译缓存文件~runtime.php
1.定义单入口文件(index.php)
在单入口index.php中不定义这两项时,会生成编译缓存文件~runtime.php
define('RUNTIME_PATH','./App/Temp/'); //定义编译目录
define('APP_DEBUG',TRUE); //开启调试模式
上述两行不能在index.php中作用,则index.php变为
<?php
define('APP_NAME','App'); //项目名称
define('APP_PATH','./App/'); //项目路径
include './ThinkPHP/ThinkPHP.php'; //引入ThinkPHP核心运行文件
?>
2.生成编译缓存文件(~runtime.php)

3.复制~runtime.php中的全部内容到index.php中,运行效果会和之前一样。

~runtime.php中缓存的编译内容,相当于把index.php引导的所有操作全部集成到~runtime.php文件中。
有了这个缓存的编译文件,index.php在下次运行时,不再引导,而是直接检测是否存在~runtime.php编译缓存文件,如果在,则直接运行~runtime.php。
其他详解(来自此处)
项目编译机制是指系统第一次运行的时候会自动生成核心缓存文件~runtime.php和项目编译缓存文件~app.php。
这些编译缓存文件把核心和项目必须的文件打包到一个文件中,并且去掉所有空白和注释代码,因为存在一个预编译的过程,所以还会进行一些相关的目录检测,对于不存在的目录可以自动生成,这个自动生成机制后面还会提到。
当第二次执行的时候就会直接载入编译过的缓存文件,从而省去很多IO开销,加快执行速度。项目编译机制对运行没有任何影响,预编译操作和其他的目录检测机制只会执行一次,因此无论在预编译过程中做了多少复杂的操作,对后面的执行没有任何效率的缺失。
~runtime.php包含的文件由系统的core.php文件决定,如果是采用了模式扩展的话,就由模式扩展入口文件决定。默认的核心模式下面包含了下面的一些文件:系统定义文件defines.php、系统函数库functions.php、系统基类Think、异常基类ThinkException、日志类 Log、应用类 App、控制器基类 Action、视图类 View。
其他类库可以在操作方法中使用系统导入机制或者自动加载机制完成加载。
~app.php 通常包含了下面的一些文件:项目配置文件(由惯例配置、项目配置合并而成)、项目公共函数文件common.php。每个项目还可以单独添加自己的项目编译文件列表,只需要在项目配置目录下面定义app.php文件,返回需要额外添加到项目编译缓存的文件列表数组即可。
【入口文件index.php中设置】
编译缓存文件,默认是自动生成在项目目录下面的Runtime目录下面。、
define('RUNTIME_PATH','./MyApp/temp/'); //如果希望自己设置目录,可以在入口文件里面设置RUNTIME_PATH进行更改
注意在Linux环境下面需要对RUNTIME_PATH目录设置可写权限。
注意在调试模式下面不会生成项目编译缓存,但是依然会生成核心缓存
define('NO_CACHE_RUNTIME',True); //不希望生成核心缓存文件的话
define('STRIP_RUNTIME_SPACE',false); //设置对编译缓存的内容是否进行去空白和注释
则生成的编译缓存文件是没有经过去注释和空白的,仅仅是把文件合并到一起,这样的好处是便于调试的错误定位,建议部署模式的时候把上面的设置为True或者删除该定义。
认识:ThinkPHP的编译缓存文件~runtime.php的更多相关文章
- thinkphp 应用编译
应用编译机制作为ThinkPHP独创的功能特色,从1.0版本就延续至今,3.2版本的编译机制更加具有特色. 应用编译缓存 编译缓存的基础原理是第一次运行的时候把核心需要加载的文件去掉空白和注释后合并到 ...
- Go 编译和runtime
一篇题为:Analysis of the Go runtime scheduler 的论文,其中部分章节介绍到了Go runtime. 先上图,这张图描述了Go语言程序,Runtime和操作系统之间的 ...
- Thinkphp入门 一 (45)
原文:Thinkphp入门 一 (45) 什么是框架? 就是一堆代码的集合,这些代码可以有变量.常量.函数.类等等.这些代码彼此紧密联系,彼此有合作关系.里边还有设计模式:MVC.单例.工厂等等. 为 ...
- thinkphp学习笔记3—项目编译和调试模式
原文:thinkphp学习笔记3-项目编译和调试模式 1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并 ...
- ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程
ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...
- ThinkPHP 3.2.3(一)基础
一.安装 ThinkPHP无需任何安装,直接拷贝到你的电脑或者服务器的WEB运行目录下面即可. 如:我使用的是XAMPP集成环境,将框架解压缩到htdocs目录下即可. 二.目录结构 1.初始目录 ...
- Thinkphp源码分析系列(二)–引导类
在上一章我们说到,ThinkPHP.php在设置完框架所需要的变量和调教好环境后,在最后调用了 Think\Think::start(); 即Think命名空间中的Think类的静态方法start ...
- thinkphp自动创建目录
自动创建目录 在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home. 接下来再看原来空的Application目录下面,已经自动生成了公共模块Comm ...
- Thinkphp源码分析系列–开篇
目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...
随机推荐
- 基于jsp+servlet+javabean的MVC模式简单应用
原先写在CSDN的一篇,我直接扒过来吧.之前打算在CSDN的,结果写了几回,发现他那个发布系统简直烂到家,经常丢失图片各种.所以很长一段时间我也没写什么. 一.MVC模式 1.M : javabea ...
- 如何编写更好的SQL查询:终极指南-第二部分
上一篇文章中,我们学习了 SQL 查询是如何执行的以及在编写 SQL 查询语句时需要注意的地方. 下面,我进一步学习查询方法以及查询优化. 基于集合和程序的方法进行查询 反向模型中隐含的事实是,建立查 ...
- java HashSet改用
写的一个Student类如下: 上面是直接使用的HashSet集合,系统会把new Student() 当做地址不用来出来,所以结果如下: 然后我在Student类中重写了hashCode()和eq ...
- Tensorflow 线性回归预测房价实例
在本节中将通过一个预测房屋价格的实例来讲解利用线性回归预测房屋价格,以及在tensorflow中如何实现 Tensorflow 线性回归预测房价实例 1.1. 准备工作 1.2. 归一化数据 1.3. ...
- Bootstrap-table使用记录(转)
HTML代码 /*index.cshtml*/ @section styles{ <style> .main { margin-top:20px; } .modal-body .form- ...
- sed修炼系列(四):sed中的疑难杂症
本文目录:1 sed中使用变量和变量替换的问题2 反向引用失效问题3 "-i"选项的文件保存问题4 贪婪匹配问题5 sed命令"a"和"N" ...
- java 多线程Callable和Runable执行顺序问题详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt125 毫无疑问 Runnable会进行异步执行,此处不多说,主要说明Call ...
- asp.net mvc 4 项目升级到 asp.net mvc5
一.开始 1.打开或新建asp.net mvc 4项目 2.修改 global.asax文件 原: WebApiConfig.Register(GlobalConfiguration.Configur ...
- 玩转PS路径,轻松画logo!
轻松画图标!教你一分钟玩转PS路径描边 推荐: cyRotel 2014/11/24 in PS 教程 & 设计文章 @Micu设计 :Photoshop的路径工具和钢笔工具 ...
- 微软为啥让免费升Win10?
今天终于赶在截止日期之前把我的联想PC升到win10.微软这次对中国开放的持续一年的免费升级活动主要有两个原因.首先当然是"感恩Windows用户长久支持的回馈".微 ...