26
2019.2
项目编绎
作者: POPASP
项目编译机制作为POPASP的一项功能特色,编译缓存的基础原理是第一次运行的时候把核心需要加载的文件去掉空白和注释保存到Application中,第二次运行的时候就直接载入编译缓存而无需载入众多的核心文件,因为存在一个预编译的过程,所以还会进行一些相关的目录检测,对于不存在的目录可以自动生成,这个自动生成机制后面还会提到。当第二次执行的时候就会直接载入编译过的缓存文件,从而省去很多IO开销,加快执行速度。项目编译机制对运行没有任何影响,预编译操作和目录检测机制只会执行一次,因此无论在预编译过程中做了多少复杂的操作,对后面的执行没有任何效率的缺失。
为了实现项目编译的功能,需在入口文件中这样来代码
```brush:vb
<%
'POPASP2.3以前使用的解决方案,有几个类文件无法缓存,比如popasp_string、popasp_arr、popasp_dictionary等
'2.3版本之前该行代码是需要写在配置文件中的
''Call C_( Array("APPLICATION_ON",1) )
'2.3版本开始,需要写在入口文件的顶部
'不仅可以缓存popasp的基类,还可以缓存控制器文件,最大限度提速
POP_MVC.applicationOn = 1
'项目路径,2.3版本以前用 Const APP_PATH = "./home"
'项目文件夹,部署项目时,不要手工创建home文件夹,否则无法进行项目部署
POP_MVC.appPath = "./home"
'框架文件夹路径,这里跟上面的#include路径一致
POP_MVC.mvc_dir = "../popasp_3.1.0/"
'多文件入口,项目部署时使用POP_MVC.start,部署完后用POP_MVC.run
'单文件入口,一直使用start
POP_MVC.start
%>
```
通过将POP_MVC.applicationOn设置为1,可以将POPASP的基类与控制器、配置文件通过application缓存到内存中,这样做可以减少IO操作,最大限度的提升网站访问速度,尽管application缓存的内容有莫名丢失的情况,程序也会及时地自动调用文件并写次写入application。但是它不适合在开发阶段中使用,因为在开发阶段中控制器的文件内容与配置文件的内容需要反复调整,而程序并不会比对application来判断它们是否已经更新。如果想要在开发阶段比对内存缓存后的性能提升,需要及时使用`Application.Contents.RemoveAll`来清理缓存。
项目编译在配置文件中还有一参数需要说明,它就是`C_( "APP_DEBUG" )`,上线后,在配置文件中将其值设为1,如下
```brush:vb
'网站是否处于上线状态,开发中设为1,上线后设为0
call C_( Array("APP_DEBUG", 1))
```
也可以提高网站性能,减少不必要的IO开销。