仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 866|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之google的剖析(analytics)js代码剖析和...

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。google|js信任用过google的analytics的伴侣都懂得其功效的壮大.
因为事情必要,比来将其urchin.js的代码down了一份上去研讨了一下.因为其正文很少,定名也很难读懂.研讨了1个月.小有所成.将其代码重写并加上了正文.与人人一同分享.这内里将google的用户辨认代码删除./**//*
=====================================
|--------AuthorByBlackSoul---------|
|------------2006.04.27--------------|
|--------BlackSoulylk@gmail.com------|
|------------QQ:9136194--------------|
|------http://blacksoul.cnblogs.cn---|
======================================
*///界说全局量
varur="";//来历地点
varurp=newArray();//来历参数称号
varurpv=newArray();//来历参数值
vararrayCount=0;//参数数量
pageOpen=newDate();//进进页面的工夫
varreqURL="http://192.168.0.219/Analytics/";//吸收数据的页面地点
varGUID=Math.round(Math.random()*2147483647);//用户独一随机数
vartitle=document.title;//网页题目
varuexp=pageOpen.getTime()+(1000*60*60*24*30);//设置cookie过时工夫既回访用户的限制
varrtu="false";//唆使用户是不是回访用户
//扫瞄器特性信息
varbrower=newArray();
/**//*
*brower[0]扫瞄器范例
*brower[1]扫瞄器版本
*brower[2]扫瞄器java是不是翻开1开-1关
*brower[3]扫瞄器Flash版本
*brower[4]扫瞄器操纵体系
*brower[5]扫瞄器分辩率
*brower[6]扫瞄器色深
*brower[7]扫瞄器言语
*brower[8]扫瞄器插件
*/
varsEn=newArray();//搜刮引擎的称号
varkeyWord=newArray();//关头字传输情势
sEn[0]="google";keyWord[0]="q";
sEn[1]="yahoo";keyWord[1]="p";
sEn[2]="msn";keyWord[2]="q";
sEn[3]="aol";keyWord[3]="query";
sEn[4]="lycos";keyWord[4]="query";
sEn[5]="ask";keyWord[5]="q";
sEn[6]="altavista";keyWord[6]="q";
sEn[7]="search";keyWord[7]="q";
sEn[8]="netscape";keyWord[8]="query";
sEn[9]="earthlink";keyWord[9]="q";
sEn[10]="cnn";keyWord[10]="query";
sEn[11]="looksmart";keyWord[11]="key";
sEn[12]="about";keyWord[12]="terms";
sEn[13]="excite";keyWord[13]="qkw";
sEn[14]="mamma";keyWord[14]="query";
sEn[15]="alltheweb";keyWord[15]="q";
sEn[16]="gigablast";keyWord[16]="q";
sEn[17]="voila";keyWord[17]="kw";
sEn[18]="virgilio";keyWord[18]="qs";
sEn[19]="teoma";keyWord[19]="q";
sEn[20]="baidu";keyWord[20]="wd";
//testdata------------//////////////////////////////-----------/-/-/-/-/-/-/-/-/-/-/-
sEn[21]="localhost";keyWord[21]="q";
这内里界说一些全局的量,个中upr,urpv为来历参数和指,好比来历为http://www.google.com/?p=BlackSoul&q=javascript,则urp[0]="p",urp[1]="q"绝对应的urpv[0]="BlackSoul",urpv[1]="javascript".
可是终极传输的时分是以分开符的情势传送给服务器真个.
GUID为随机数,google是这么做的.现在没有想通为何要保留一个随机数,厥后剖析数据的才分明过去.为了考证用户的独一性.
以下是函数处置:
//对照url,假如为搜刮引擎则保留关头字-------------
functiongetKeyword(url)
{
varhostname;
if(url.indexOf(".")==-1)
{hostname=url;}
else
{hostname=url.substring(url.indexOf("."),url.lastIndexOf("."));}
for(vari=0;i<sEn.length;i++)
{
if(hostname==sEn)
{
for(varj=0;j<urp.length;j++)
{
if(urp[j]==keyWord)
{
returnurpv[j];
}
}
}
}

return"";
}
//将URL转换为地点和页面参数和参数值参数uri为页面地点
functiongethn(uri)
{
if(!uri||uri=="")return"";
ur=uri;
varsub;
//带参数
if(ur.indexOf("?")!=-1)
{
varurl=ur.substring(0,ur.indexOf("?"));
varpara=ur.substring(ur.indexOf("?")+1,ur.length);
while(para.length>0)
{
if(para.indexOf("&")==-1)
{
urp[arrayCount]=para.substring(0,para.indexOf("="));
urpv[arrayCount]=para.substring(para.indexOf("=")+1,para.length);
break;
}
sub=para.substring(0,para.indexOf("&"));
urp[arrayCount]=sub.substring(0,sub.indexOf("="));
urpv[arrayCount]=sub.substring(sub.indexOf("=")+1,sub.length);
para=para.substring(para.indexOf("&")+1,para.length);
arrayCount++;
}
returnurl;
}
else
returnur;
}
//----------------------------取得域名-----------------------------
functiongetHostName(url)
{
url=url.substring(url.indexOf(://)+3,url.length);
url=url.substring(0,url.indexOf("/"));
returnurl;
}
//---------------------------取得flash版本------------------
functiongetFlash(){
varf="-1",n=navigator;
if(n.plugins&&n.plugins.length){
for(varii=0;ii<n.plugins.length;ii++){
if(n.plugins[ii].name.indexOf(ShockwaveFlash)!=-1){
f=n.plugins[ii].description.split(ShockwaveFlash)[1];
break;
}
}
}elseif(window.ActiveXObject){
for(varii=10;ii>=2;ii--){
try{
varfl=eval("newActiveXObject(ShockwaveFlash.ShockwaveFlash."+ii+");");
if(fl){f=ii+.0;break;}
}
catch(e){}
}
}
if(f=="-1")
returnf;
else
returnf.substring(0,f.indexOf(".")+2);
}
//--------------------------设置异步传输-----------------------------------
functioncreateXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
returnnewXMLHttpRequest();
}
elseif(window.ActiveXObject)
{
returnnewActiveXObject("Microsoft.XMLHttp");
}
}以上的办法能够获得一些基础信息.可是关头的成绩仍是设置用户cookie,判别回访,判别最初一次会见工夫,并设置其GUID.这里看了好久没有发明google是怎样做的...因而本人想了一些笨举措.见一下代码:
//扫瞄器特性信息
functionBrowserInfo()
{
brower[0]=navigator.appName;
brower[7]=navigator.language;
if(brower[0]=="Netscape")
{
varbrowerInfo=navigator.userAgent;
brower[1]=browerInfo.substring(browerInfo.lastIndexOf("")+1,browerInfo.length);
brower[0]=brower[1].substring(0,brower[1].lastIndexOf("/"));
brower[1]=browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length);
brower[7]=navigator.language;
}
elseif(brower[0]=="MicrosoftInternetExplorer")
{
brower[1]=navigator.userAgent.split(";")[1];
brower[7]=navigator.userLanguage;
}
brower[2]=navigator.javaEnabled()?1:-1;
brower[3]=getFlash();
brower[4]=getOS();

if(self.screen){
sr=screen.width+"x"+screen.height;
sc=screen.colorDepth+"-bit";
}
elseif(self.java)
{
varj=java.awt.Toolkit.getDefaultToolkit();
vars=j.getScreenSize();
sr=s.width+"x"+s.height;
}
//分辩率
brower[5]=sr;
//色深
brower[6]=sc;
//插件列表
brower[8]=getPlugin();
}
//-----------------------取得以后地点-----------------------------
functiongetHref()
{
returndocument.location.href;
}
//-----------------------cookie操纵入手下手----------------------------
functionsetCookie(name,value)
//设定Cookie值
{
varexpdate=newDate();
varargv=setCookie.arguments;
varargc=setCookie.arguments.length;
varexpires=15768000;
varpath=(argc>3)?argv[3]:null;
vardomain=(argc>4)?argv[4]:null;
varsecure=(argc>5)?argv[5]:false;
if(expires!=null)
{
//设置过时工夫24小时
expdate.setTime(uexp);
document.cookie=name+"="+escape(value)+((expires==null)?"":(";expires="+expdate.toGMTString()))
+((path==null)?"":(";path="+path))+((domain==null)?"":(";domain="+domain))
+((secure==true)?";secure=":"");
}
}
functiondelCookie(name)
//删除Cookie
{
varexp=newDate();
exp.setTime(exp.getTime()-1);
varcval=getCookie(name);
document.cookie=name+"="+cval+";expires="+exp.toGMTString();
}

//取得Cookie的值
functiongetCookie(fname)
{
varname,value;
varcookies=newObject();
varbeginning,middle,end;
beginning=0;
while(beginning<document.cookie.length)
{
middle=document.cookie.indexOf("=",beginning);
end=document.cookie.indexOf(";",beginning);
if(end==-1)
{
end=document.cookie.length;
}
if((middle>end)||(middle==-1))
{
name=document.cookie.substring(beginning,end);
value="";
}
else
{
name=document.cookie.substring(beginning,middle);
value=document.cookie.substring(middle+1,end);
}
if(name==fname)
{
returnunescape(value);
}
beginning=end+2;
}
}
//-----猎取GUID的cookie是不是存在取得------------------
functiongetCookieValue()
{
varguid=getCookie("GUID");
if(guid!=null)
{
returnguid;
}
else
{
return"noCookie";
}
}
//---------------------取得注册用户cookie-----------------
functiongetRegUserCookie()
{
return;
}
//---------------------cookie操纵终了------------------
//------------------------得操纵体系---------------------------
functiongetOS()
{
varOSlist=newArray();
varOSName=newArray();
OSlist[0]="Windows4.0";OSName[0]="Windows95";
OSlist[1]="Windows98";OSName[1]="Windows98";
OSlist[2]="WindowsNT5.0";OSName[2]="Windows2000";
OSlist[3]="WindowsNT5.1";OSName[3]="WindowsXP";
OSlist[4]="WindowsNT5.2";OSName[4]="WindowsServer2003";
varua=navigator.userAgent.split(";");
for(vari=0;i<OSlist.length;i++)
{
if(ua[2]==OSlist)
returnOSName;
}
returnua[2];
}
//取得插件
functiongetPlugin()
{
varplugin="";
varua=navigator.userAgent.split(";");
if(ua.length<4)
return"";
for(vari=4;i<ua.length;i++)
{
plugin+=ua+",";
}
returnplugin.substring(0,plugin.length-2);
}
必要申明的一点是GetResidentTime这个函数,google接纳了img.load的办法加载了吸收处置信息页面的,必要再服务器端设置将后缀为.gif或你所取的其他情势的文件利用aspx的体例编译运转.由于我本来思索的是利用xmlHttp异步伐用.可是页面加入的时分偶然候不实行.以是就弃用了.代码以下:
functionGetResidentTime()
{
pageClose=newDate();
minutes=(pageClose.getMinutes()-pageOpen.getMinutes());
if(minutes<0)
{
minutes=minutes+60;
}
seconds=(pageClose.getSeconds()-pageOpen.getSeconds());
if(seconds<0){seconds+=60;}
time=(seconds+(minutes*60));

//---------------修正此处为吸收链接地点XML异步传输------------------
//varxmlHttp=createXMLHttpRequest();
//xmlHttp.open("POSt",reqURL+firstvisit.aspx?"+StrPara(),false);
//xmlHttp.send(null);
//----------------------------图片情势传送----------------------------
if(isReturn()==false)
{
vari=newImage(1,1);
i.src=reqURL+"firstVisit.aspx?"+StrPara()+"&GUID="+GUID;
i.onload=function(){LoadVoid();}
//进进页面的信息
if(getCookieValue("GUID")=="noCookie"){return;}
i.src=reqURL+"pageView.gif?"+pageView()+"&st="+time;
i.onload=function(){LoadVoid();}
}
else
{
vari=newImage(1,1);
i.src=reqURL+"pageView.gif?"+pageView()+"&st="+time;
i.onload=function(){LoadVoid();}
}
}
最初就是挪用了.我利用了window.onunload=GetResidentTime
传送的参数人人能够打印出来看一下.应当能够分明其意义.
剩下的就是服务器真个处置了,在服务器端处置实在相称复杂.获得request的值,考证并保留进数据库.如今有了数据,剖析的事变就由用户依照本人的请求来处置了..增补一句,ip地点是由服务器端来获得保留的.
利用的时分记得必定将其放到服务器端,然后利用<javascriptlanguage="javascript"type="text/javascript"src=服务器地点+路径+"statistics.js"></script>附上完全的代码http://www.ckuyun.com/Files/BlackSoul/statistic.rar下载.
该例子我在IE,firefox,netscape上面测试都很一般.弄了一个月,总算有所成绩了.可是另有良多必要改善的中央,但愿做过的,感乐趣的伴侣多多指导交换.
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-18 18:31:23 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
老尸 该用户已被删除
板凳
发表于 2015-1-22 20:48:19 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
若天明 该用户已被删除
地板
发表于 2015-1-31 11:35:15 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
小魔女 该用户已被删除
5#
发表于 2015-2-6 19:15:57 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
小妖女 该用户已被删除
6#
发表于 2015-2-18 09:02:03 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
谁可相欹 该用户已被删除
7#
发表于 2015-3-6 03:21:39 | 只看该作者
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
admin 该用户已被删除
8#
发表于 2015-3-12 19:27:16 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
海妖 该用户已被删除
9#
发表于 2015-3-20 02:11:54 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表