仓酷云

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

[学习教程] ASP.NET网页设计Razor内情之剖析

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

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

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

x
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。ASPX语法对照复杂,以是ASPX剖析器几近完整是经由过程正则表达式来完成的。Razor剖析器与ASPX剖析器之间有很年夜分歧,它实践上分为三个自力的组件:
  1)了解基本HTML语法的标志剖析器;
  2)了解基本C#大概VB语法的代码剖析器;
  3)了解标志和代码怎样夹杂的中心把持器
  以是Razor剖析器有三个介入者:代码剖析器,标志剖析器,代码剖析器。三个组件互相共同,协同事情完成对Razor文档的剖析。Razor剖析器有三种形态,分离是:剖析标志文档、剖析标志块,剖析代码块,任何情形下剖析器都处在以上三种形态中的一种形态上。前两种形态由标志剖析器来处置,最初一种形态由代码剖析器处置。
  在此我们仍然利用前次的例子来讲明利用这些组件剖析Razor文档的历程。
  文件内容以下:
<ul>   
    @foreach(var p in Model.Products) {   
    <li>@p.Name ($@p.Price)</li>   
    }   
</ul>   
  我们从最下面入手下手剖析历程。当第一次挪用中心剖析器的时分,它会挪用标志剖析器来剖析标志文档。此时,剖析器处在剖析标志文档形态,在这类形态下,它会一向向前扫描,直到找到下一个"@"字符,除此以外它不体贴任何标志大概别的HTML相干的内容。当碰到一个"@"字符的时分,它会经由过程检察"@"字符前后的内容,并据此判别是切换到代码形态呢仍是这仅仅是一个email地点。这是默许的处置体例,可是有些特别情形会强迫剖析器切换到代码剖析形态。本例中,当剖析到"@"字符的时分,会发明该字符的后面是空格,据此判断这并非一个正当的email地点,以是切换到代码剖析形态。
  标志剖析器接着挪用代码剖析器,让其来剖析代码块。在Razor中块为独自的一段代码大概是有明白入手下手停止字符序列的标志,因此此处的"foreach"声明是代码块,它以字符"f"入手下手,以字符"}"停止。代码剖析器十分分明C#语法,他会跟踪C#指令,当碰到"<li>"字符序列的时分,它晓得此处应当是C#指令的入手下手,但C#其实不撑持如许的指令,因此代码剖析器会再次挪用标志剖析器来剖析接上去的HTML代码块。如许在代码和标志剖析器之间创立一种从标志剖析入手下手,进进代码剖析,然后再进进标志剖析….的递回历程。到今朝为止,剖析器内的挪用栈应当相似于以下布局(省略了一些匡助办法):
HtmlMarkupParser.ParseDocument() 
CSharpCodeParser.ParseBlock() 
HtmlMarkupParser.ParseBlock() 
  我们能够从中看出ASPX和Razor的区分:在ASPX文件中,代码和标志能够看做是两个并行的流,我们写一些标志然后跳已往写一些代码,再跳返来写标志,云云举行;而Razor文件更像是一棵树,我们写一些标志,然后在标志内里写一些代码,再在代码中嵌进标志….。
  以是我们仅必要挪用标志剖析器往剖析"<li>"和"</li>"之间的标志块,在没有抵达"</li>"之前剖析器以为标志块还没停止,哪怕在标志之间有"}"字符都不会打断"foreach"声明。
  当剖析"<li>"的时分,标志剖析器发明了"@"字符,因此代码剖析器会被挪用,此时栈布局酿成:
HtmlMarkupParser.ParseDocument()
CSharpCodeParser.ParseBlock()
HtmlMarkupParser.ParseBlock()
CSharpCodeParser.ParseBlock()
  关于这些代码块怎样停止的详细信息今后再做先容,可是终极我们会完成这些代码块的剖析而且回到"<li>"块中,在"</li>"以后又回到了"foreach"块中,最初"}"字符停止了"foreach"块,从头回到栈的顶端:标志文档。以后由于没发明新的"@"字符,文档剖析器将一向剖析到文件的开头。
也不知道,我同学昨天说数据挖掘很好。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-19 09:05:54 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
若天明 该用户已被删除
板凳
发表于 2015-1-24 15:43:18 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
山那边是海 该用户已被删除
地板
发表于 2015-2-2 05:19:54 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
海妖 该用户已被删除
5#
发表于 2015-2-7 16:51:59 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
蒙在股里 该用户已被删除
6#
发表于 2015-2-22 16:56:23 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
小妖女 该用户已被删除
7#
发表于 2015-3-7 01:33:44 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
莫相离 该用户已被删除
8#
发表于 2015-3-14 05:32:16 | 只看该作者
那么,ASP.Net有哪些改进呢?
再见西城 该用户已被删除
9#
发表于 2015-3-21 00:51:28 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-5 16:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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