xmlHTTP返回值重编码的优化
置顶的帖子里有一个VBscript的代码用来将xmlHTTP返回值重编码,不过效率极其低下.....俺费了好大的力气,终于做了一个速度勉强让人满意的代码。不过水平所限还是不得不用了vbscript的chr函数用来将acsii转成unicode,不知道哪位大哥能想想办法?
ps:算法优化真是个费脑筋的活。
-×-×-×-×-×-×-×-×-华丽的更新分割线-×-×-×-×-×-×-×-×-
俺每句话都下了断点测试运行时间,终于把运行时间缩短了大约10倍,现在应该是一种可以实用的算法了。
我一开始用正则替换,每个字替换一遍,结果发现87020字节居然要40秒左右
现在这个代码在我电脑上只需要大约3秒,哈哈哈哈,感觉真爽
注意:对于只需要解码一次的情形本算法不是最优,但是对于需要多次解码的时候应该是最好的算法了。
xml Http
//***Author: Hutia
//测试用的网址
url="http:\/\/www.blueidea.com\/";
//确认需要的VBScript函数是否存在,不存在就写一个
try{
if(typeof(rsB)=="undefined"){initVBS();};
}catch(e){initVBS();}
//**全局变量**
//glbEncode储存ascii到unicode字符的转换,这样做的好处是可以提高重复解码时的解码效率
glbEncode=new Array();
//**初始化函数**
function initVBS(){
//初始化VBscript的两个funtion:rsB 和 vbChar
strVBS="\r\n";
strVBS+="Function rsB(vIn)\r\nrsB=MidB(vIn,1)\r\nEnd Function\r\n";
strVBS+="Function vbChar(ss)\r\nvbChar = Chr(ss)\r\nEnd Function\r\n";
strVBS+="";
document.write(strVBS);
}
//用同步方式获取网页内容
function loadURL(strURL){
if(!strURL){return(false);}
var xmlHTTP=new ActiveXObject("MSXML2.XMLHTTP");
xmlHTTP.open("GET",strURL,false);
xmlHTTP.send("");
return xmlHTTP;
}
//重编码
function reCode(b){
var s=rsB(b);
s=escape(s).replace(/%u/gi,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/ig,"%@$1$2");
var uniS=s.match(/\%@(.{4})/g);
s=s.replace(/@/g,"");
if(uniS){
var k;
for(var i=0;i
下载中...
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]