试用EF开发WEB应用程序(4): 缓存Query String
题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/。在线留言。
试用EF开发WEB应用程序(4): 缓存Query String
上一篇文章已经讲过了如何读取Query String。今天继续讲 Query String 相关的优化措施。
在 CGI / FastCGI 程序中,Query String是最重要使用最频繁的参数,其对进行的主要操作有:1、从环境变量中读取Query String;2、对Query String进行URL解码;3、从Query String中解析出指定名称的参数值。这三项操作都相对比较耗时,而且最常见的第3项操作还分别依赖于前面2项的操作。
在“易语言.飞扬”类库 fastcgi.efn 中,我对 Query String 进行了专门的优化,有效提高了程序执行效率。优化的主要措施是缓存:在每个请求(Request)期间,最多只从环境变量中读取一次,最多只进行URL解码一次,最多只解析解码后的Query String一次——同时将解析结果放入哈希表中,进一步提高检索效率。(有一个实现细节也许有必要指出,我这里使用的哈希表,在比较文本时是区分字母大小写的,这要求用户使用时也要注意区分参数文本的大小写,否则将得不到正确结果。我想这不是很苛刻的要求,因为无论是C/C++还是EF,都在语言层面上区分字母大小写,程序员应该不会在这方面犯低级错误,况且区分大小写比较文本在执行效率上也高于不区分大小写的情况。当然,这个行为,今后可能进行必要的调整。TODO:参考RFC1738。)
如果您之前还对“FCGI fcgi = new FCGI();”这句代码感到奇怪,疑惑为什么不将FCGI类中的所有方法定义为静态方法的话,现在应该可以找到部分答案了。对了,优化的需要。在进入 fcgi.Accept() 循环之前,创建一个EF对象根本不影响FastCGI程序的执行效率,却又能从很大程度上优化执行效率,何乐而不为呢?
下篇预告:URL编码和URL解码