文章标签 ‘Web’

[转载]从一个WEB请求说开去(三) – 大河 – 博客园. 由于最近一段时间忙的我晕头转向,所以一直没时间继续我的WEB请求之旅,深感抱歉。 开篇之前,我必须向大家道个歉,由于我的知识水平有限,对ASP.NET没有一个系统性的认知,所以不对的地方请朋友们不吝赐教。说真的,我特别怕由于我的认知不足而误导大家,请大家一定要带着脑袋以批判的角度来阅读拙作。砖头准备好了吗?开始。 上文我们主要描述了iis6.0的两个核心组件WAS和Worker Progress,而本文重点讲述一下WEB请求在工作进程中都经历了什么,下面我把描述工作进程的图示放大,如下: 我们知道,当一个有效的WEB请求到达HTTP.SYS后,发现没有相应有效的工作进程,则HTTP.SYS会告诉WAS(svchost.exe),以 为之创建并启动一个工作进程(w3wp.exe)。在启动工作进程的过程中加载ISAPI(非托管代码)以及CLR(托管代码),然后在工作进程中创建应 用程序域。其实如上一系列操作只是为WEB请求准备好其运行环境。 当一个WEB请求进入已经准备好的工作进程边界(工作进程从HTTP.SYS的应用程序池对应的消息队列中取出该WEB请求),那此时首先会经过 ISAPI FILTER的处理,比如修改http报头和URL等,具体功能参见上文。接下来就会将处理的WEB请求交给ISAPI EXTENSION。那么ISAPI EXTENSION会干什么呢?我们先看下图: 我们从上图可以看出,它就是一个应用程序扩展名的映射,即文件扩展名与处理该文件的应用程序的一个映射表,接下来我们看看具有aspx扩展名的文件是由哪个应用程序集处理(dll)的,如下图: 看到了吗?其实也就告诉我们对于aspx扩展名的文件,要交给aspnet_isapi.dll处理,其实大部分文件都映射到了 aspnet_isapi.dll,也就是说大部分动态的web请求文件都交由程序集aspnet_isapi.dll来处理。对于静态文件比如jpg、 js、以及css等都会直接将文件返回给客户端。注意:aspnet_isapi.dll是一个非托管的Win32动态库,里面封装了很多用于与web进 行交互的函数,它的处理速度那是相当的快。另外它被加载到了工作进程中,也就是说非托管的aspnet_isapi.dll与托管的web应用都处于一个 工作进程中,这显然会加快其处理速度。跨进程访问是要付出代价的,所以我们不必为此担心。那么如何才能调用aspnet_isapi.dll提供的一系列 服务呢,这就引出了ISAPIRuntime,它的主要功能就是负责ISAPI扩展的非托管代码与托管代码之间的沟通与交互。您只要记住这点就行了,具体 实现细节我认为没必要深究。如果您对此感兴趣可以借助reflector.exe等工具进行跟踪研判。 我们的WEB请求走到到哪儿了,没错,它经过ISAPI顺利的进入到了ASP.NET通道接下来他会一直走啊走,经过HttpApplication、httphandles等经过处理后将其响应返回给http.sys,最终到达客户端浏览器。 本来关于IIS6.0还有很多说不完的话题,比如asp.net application的生命周期,以及web page的生命周期、以及如何自定义httpmodules,如何自定义httphandles等等,网上这方面的资料已经很多了,我也不再赘述。 其实写到此我只大概介绍了IIS6.0的三个核心组件HTTP.SYS、WAS以及Worker Progress,另外两个(Inetinfo.exe和IIS MetaBase)只是轻描淡写,如果有时间我会继续说说关于这两个核心组件的内容,另外会顺带说说SSL。 为了给大家一个关于WEB请求之旅的整体印象,我会在下一篇做个总结。如有疏漏之处还望朋友们多多海涵。

2010年9月2日09:11 评论关闭

[转载]InfoQ: Google提出Web性能优化新方法——Diffable. Google Maps的开发人员Josh和James最近提出并实现了一种Web性能优化新方法——Diffable,即在浏览器加载Web页面时,促使其比较相关文件(Html、JavaScript等)在服务器端和客户端缓存区的版本并只下载差量(Deltas),降低网络下载造成的延迟。本文简要介绍了Diffable方法的背景、原理、优势和实现情况。 背景 众所周知,Google Maps是一款“重量级”的富互联网应用,主要JavaScript文件大小接近300K,而一个平常的补丁更新只有不到20K,这意味着如果用户的浏览 器已经缓存了旧版本的JavaScript文件,那么在通常情况下,用户不得不下载多余的280K(内容没有变化),页面加载速度就会受此影响。为了解决 类似问题,Google Maps的工程师提出了Diffable方法。 原理 Diffable方法需要在服务器端和客户端同时实施,如图1所示。 服务器组件记录网页相关文件版本更新的差量,以便在客户端需要时向其发送补丁以更新过时的缓存文件。 客户端组件(采用JavaScript编写)检测是否缓存了过时文件并在必要时请求新版本的差量补丁,与缓存的文件合并完成更新。 图1. Diffable方法原理图 (来源:Velocity 2010年会演讲资料) 性能优势 对于Google Maps来说,Diffable方法节省了1200毫秒(减少页面加载时间的25%),请注意这种方法只对已经缓存旧版页面文件的Google Maps用户有效,此类用户约占全部用户的20%-25%,参见图2所示: 图2. Diffable方法在Google Maps应用的性能对比 (来源:Velocity 2010年会演讲资料) 实现 Diffable方法是一种Web性能优化思想,目前Google的开发人员已经针对J2EE应用完成了相应的开源实现,采用Apache License 2.0授权,具体细节可以参考以下文档: J2EE Diffable配置说明 J2EE Diffable使用说明 J2EE Diffable资源管理说明 感兴趣的朋友可以登陆Diffable开源项目官方网站了解更多详情。

2010年8月13日16:29 评论关闭

[转载]web开发注意事项 – 熊哥 www.relaxlife.net – 博客园. 一、Web开发注意事项 l 输出JSON问题。 拼接JSON字符串,有些特殊字符需要替换掉源代码: public static string ToJson(this string s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case ‘\”‘: sb.Append(“\\\””); break; case ‘\\’: sb.Append(“\\\\”); break; case ‘/’: sb.Append(“\\/”); break; case ‘\b’: sb.Append(“\\b”); break; [...]

2010年8月10日11:33 评论关闭

[转载]提搞网站访问速度可做哪些优化 – 熊哥 – 博客园. 1.Flex 图表组件介绍 在Flex 中提供了一系列图表组件,可以使用图表或图形来显示数据 Flex 中可以把表格数据分为条形图表(Bar),饼行图表(Pie),折线图表(Line). 2.Flex 支持的坐标轴 CategoryAxis: 对应一组数组值到坐标轴上面。 LinearAxis: 对应数字数据到坐标轴上 LogAxis: 对数的对象数字数据到坐标轴上. DateTimeAxis:对应时间基础的数据到坐标轴上. 3.面积图表(AreaChart) 代码

2010年7月22日09:10 评论关闭

[转载].Net下如何跨语言调用Delphi写的报表引擎 – 周金根 – 博客园. 我去年上半年之前一直使用的是Delphi,公司在这上面也积累了很多公共资源。在06年9月实现了一个功能强大的报表引擎,公司到现在基本每 个项目组都在使用它做报表。现在在.Net下,使用OpenExpressApp, 暂时也没有足够精力去重新开发一个报表引擎(OpenReport),所以就想到先重用以前的报表引擎。 下面就介绍一下如何在WPF中使用Delphi下的功能。 封装Delphi引擎为一个OCX控件 之前的报表引擎是基于Delphi下的,在跨语言应用下,最容易想到的就是使用ActiveX,于是使用Delphi做了一个 ActiveXForm,封装了一个OCX控件并注册,名称为【ReportFram.ocx】,这里就不详细介绍具体生成过程了。 在.Net中使用 .Net下的控件都是从Control继承下来的,要想使用OCX控件,就需要在OCX和Control之间适配一下。Delphi封装的 OCX本身并不知道如何在.Net下使用,我们可以通过以下步骤,由VS给我们自动生成一个适配程序集。 在Toolbox中添加一项 新建一个Window Application,把ReportFramX Control拖入到一个Form上,这时你可以看到Solution Explorer的项目下自动生成了两个dll:ReportFram.dll和AcReportFram.dll。这是VS生成,应该会有命令可以生 成,没有细查。 在WPF下使用AxReportFramX 使用WindowsFormsHost控件使用Win下的Control,Xaml如下所示: view source print? <Grid><br>        <WindowsFormsHost Name=”windowsFormsHost1″ /><br>    </Grid><br> 代码如下:         public Window1()         {             InitializeComponent();             var rptFram = new AxReportFram.AxReportFramX();             windowsFormsHost1.Child = rptFram;         }  运行界面如下:

2010年3月26日16:36 评论关闭
备案信息:冀ICP备10007948号