首页 文章

性能敲击使用runat = server进行html控件

提问于
浏览
3

我试图谷歌这个并且有点短,所以也许这里的人可以对这个主题有所了解 .

对于asp.net中的URL重写目的,我想使用runat =“server”属性声明我的应用程序中的所有图像和其他资源,以利用“〜/ images”服务器路径语法 . 当使用相对路径时(使用url重写时),在locahost上调试尤其困难 . 我知道我可以修改主机文件来解决这个问题,但由于我们处理的项目数量很多,这是不可行的 .

将html控件声明为runat服务器通常会添加到viewstate以启用数据持久性,但这与图像无关,或者我对此有误......?

我也意识到有更多的控件可以处理和处理asp net运行时引擎,但这真的是一个严重的性能消耗......?

以这种方式声明图像是否存在严重的开销,如果是这样,有人可以解释性能敲击的大部分来自何处 .

提前致谢 .

2 回答

  • 0

    假设您要求以下区别:

    1) <img runat="server" EnableViewState="false" src="~/images/img.png" />
    

    2) <img src='<%= ResolveUrl ("~/images/img.png") %>' />
    

    要构建1),生成的实际代码(或多或少)是:

    System.Web.UI.HtmlControls.HtmlImage __ctrl;
    __ctrl = new System.Web.UI.HtmlControls.HtmlImage();
    this._bctrl_1 = __ctrl;
    __ctrl.EnableViewState = false;
    __ctrl.Src = "~/image.png";
    

    然后将__ctrl添加到控制树:

    __parser.AddParsedSubObject(this._bctrl_1); // _bctrl_1 is __ctrl from above
    

    页面生命周期中的任何事件(Init,Load ...)都将传播到此控件,将调用RenderControl从中获取HTML,调用ResolveUrl()以获取实际URL,最后调用Dispose()也会被召唤 .

    现在,在情况2)中,控件没有以正常方式添加到其父级,而是你得到这样的东西:

    __ctrl.SetRenderMethodDelegate(new System.Web.UI.RenderMethod(this.__RenderTree));
    

    这是设置一个委托,当它的时间呈现<img>时将被调用 . 在__RenderTree中,编写我们感兴趣的标记的部分是:

    __output.Write("\n<img src='");
    __output.Write( ResolveUrl ("~/image.png") );
    __output.Write("' />\n");
    

    所以,是的,在1)中运行的代码是"a lot",而不是在2)中运行 . 现在,就实际执行时间的影响而言,我认为这不是什么大不了的事 . 我测试了一个只有img标签/控件的空白页面,并且它们在几次运行中的差异在每个请求的-0.5ms / 0.5ms范围内 . Totally negligible .

  • 5

    即使你已经关闭了所有的viewstate marlarky,也会有很大的开销 . 但是,单个用户可能无法察觉 absolute 成本 .

    考虑一个描述一系列HTML元素的标记,它被视为一个简单的文字“控件”,它非常有效地将其全部内容发送到页面渲染中适当点的响应 .

    将其与作为完全控件创建的所有相同元素进行比较,包括所有对象创建,样式元素的解析,验证等以及本地状态的创建 . 然后代码运行以获取本地状态,并且几乎渲染用于在ASP.NET页面中定义它的相同HTML标记 .

    显然在内存和CPU方面使用了很多runat =“server”会更加昂贵 . 在个别案例中,这可能不是问题,但对于具有重要活动的网站而言,这可能是一个问题 .

    如果您正在开发一个应用程序,该应用程序将放置在较大站点的某个虚拟目录中,则使用相对路径作为图像 .

    如果您正在开发一个应用程序,该应用程序是自己的站点,那么在项目或站点属性中,将Developer Web Server类别中的虚拟路径修改为“/” . 这样,在调试时,URL中没有额外的/ myprojectname / part . 这将允许您使用某些资产或图像文件夹的绝对路径 .

相关问题