debug模式
主要是引入了debug.php的配置文件

非Debug模式
当thinkphp在非debug模式下第一次运行是生成runtime文件和对应的文件夹。

编译缓存文件~runtime.php
~runtime.php中缓存的编译内容,相当于把index.php引导的所有操作全部集成到~runtime.php文件中。
有了这个缓存的编译文件,index.php在下次运行时,不再引导,而是直接检测是否存在~runtime.php编译缓存文件,如果在,则直接运行~runtime.php。

~runtime.php包含的文件由系统的core.php文件决定,如果是采用了模式扩展的话,就由模式扩展入口文件决定。默认的核心模式下面包含了下面的一些文件:系统定义文件defines.php、系统函数库functions.php、系统基类Think、异常基类ThinkException、日志类 Log、应用类 App、控制器基类 Action、视图类 View。
例如:数据库实例化方法D();

所以非debug模式下,每次代码发布需要清除runtime文件夹内容,避免出现代码问题。
数据库结构缓存DB_FIELDS_CACHE
数据库字段缓存是通过配置DB_FIELDS_CACHE,如果设置为true则生成缓存文件到Data文件夹。
如果DB_FIELDS_CACHE设置为true,第一次实例化model时候回自动生成对应model的字段缓存文件。
生成逻辑,在核心类Think\Model.php的数据库连接方法,最后会调用_checkTableInfo的方法生成字段缓存文件,并且设置当前数据库对象的pk和fields数组(<b>如果设置了DB_FIELDS_CACHE为true,并且缓存文件存在则直接返回缓存文件的字段,如果不存在则重新读取数据库,所以只有字段已缓存后,每次实例化模型的时候$this->fields的字段都是缓存文件的字段。</b>)。


插入数据库
数据入库调用的是Think\model.php里的add方法,入库前调用了数据处理方法_facade。会把数据data和模型的字段$this->fields进行过滤,多余字段删掉,生成入库数据。这也是为什么非debug模式下,新添加字段无法插入数据,因为DB_FIELDS_CACHE为true,生成的缓存字段已经把新增字段过滤了
