如今动态include文件都是用ExecuteGlobal来实现,如果目标文件有太多ASP标签,那么速度会下降200%,这几天做了个测试,用ASP自带的<!--#include file="..."-->,速度均衡为0.01563秒,而解析ASP文件,并用ExecuteGlobal输出,速度均衡为0.04688秒,这几毫秒的速度在测试时没什么问题,实际运用中,并发100个请求,#include的速度就是1秒,ExecuteGlobal就是4秒,当然这些都是理想速度,实际会更慢,因此就有实现真正动态include的猜想,猜想的依据就是Server.Execute和Server.Transfer,这两个方法调用目标ASP文件,是另启过程,与当过程无关,因此就有个传参的瓶颈,跨过程传参,最好的办法就是Session,Session比Application的限制要小的多,它可以存储自定义的类,而且猜想其不受Free Threaded的限制,因此建立一个统一的超级类,是实现动态Include的基础,“超级类”看起来挺唬人,其实只要封装Scripting.Dictionary字典就可以,WEB的常用变量声明为超级类的公共变量,变动的变量用字典存储,例如:
index.asp
hello.asp
运行结果均衡在0.01563秒,与直接#include速度一致