默认情况下,在用户首次请求资源(如网站的一个页)时,将动态编译 ASP.NET 网页和代码文件。第一次编译页和代码文件之后,会缓存编译后的资源,这样将大大提高随后对同一页提出的请求的效率。

ASP.NET 还可以预编译整个站点,然后再提供给用户使用。这样做有很多好处,其中包括:

  • 可以加快用户的响应时间,因为页和代码文件在第一次被请求时无需编译。这对于经常更新的大型站点尤其有用。

  • 可以在用户看到站点之前识别编译时 Bug。

  • 可以创建站点的已编译版本,并将该版本部署到成品服务器,而无需使用源代码。

预编译选项

ASP.NET 提供了两个预编译站点选项:

  • 预编译现有站点。如果您希望提高现有站点的性能并对站点执行错误检查,那么此选项十分有用。

  • 针对部署预编译站点。此选项将创建一个特殊的输出,您可以将该输出部署到成品服务器。

另外,可以预编译一个站点,使它成为只读的或可以更新的站点。以下部分提供了有关每个选项的更多详细信息。

就地预编译

您可以通过预编译网站来稍稍提高网站的性能。对于经常更改和补充 ASP.NET 网页及代码文件的站点则更是如此。在这种内容不固定的网站中,动态编译新增页和更改页所需的额外时间会影响用户对站点质量的感受。

注意

预编译现有站点可以高效地执行当用户从您的站点请求页时发生的同样编译过程。因此,主要的性能改进在于在第一次请求页时无需对该页进行编译。

在执行就地预编译时,将编译所有 ASP.NET 文件类型。(HTML 文件、图形和其他非 ASP.NET 静态文件将保持原状。)预编译过程的逻辑与 ASP.NET 进行动态编译时所用的逻辑相同,说明了文件之间的依赖关系。在预编译过程中,编译器为所有可执行输出创建程序集,并将这些程序集放在 %SystemRoot%\Microsoft.NET\Framework\版本\Temporary ASP.NET Files 文件夹下的特殊文件夹中。随后,ASP.NET 将通过此文件夹中的程序集来完成页请求。

如果再次预编译站点,那么将只编译新文件或更改过的文件(或那些与新文件或更改过的文件具有依赖关系的文件)。由于编译器的这一优化,因此,即使是在细微的更新之后也可以编译站点。

针对部署的预编译

预编译站点的另一个用处是生成可部署到成品服务器的站点的可执行版本。针对部署进行预编译将以布局形式创建输出,其中包含程序集、配置信息、有关站点文件夹的信息以及静态文件(如 HTML 文件和图形)。

编译站点之后,可以使用 Windows XCopy 命令、FTP、Windows 安装等工具将布局部署到成品服务器。布局在部署完之后将作为站点运行,且 ASP.NET 将通过布局中的程序集来完成页请求。

针对部署预编译站点为您的源代码和其他知识产权提供了保护措施。有关编译器在针对部署的编译过程中如何处理文件的更多信息,请参见针对部署的站点编译过程中的文件处理。

您可以按照以下两种方式来针对部署进行预编译:仅针对部署进行预编译,或者针对部署和更新进行预编译。

仅针对部署进行预编译

当仅针对部署进行预编译时,编译器实质上将基于正常情况下在运行时编译的所有 ASP.NET 源文件来生成程序集。其中包括页中的程序代码、.cs 和 .vb 类文件以及其他代码文件和资源文件。编译器将从输出中移除所有源代码和标记。在生成的布局中,为每个 .aspx 文件生成编译后的文件(扩展名为 .compiled),该文件包含指向该页相应程序集的指针。

要更改网站(包括页的布局),必须更改原始文件,重新编译站点并重新部署布局。唯一的例外是站点配置;您可以更改成品服务器上的 Web.config 文件,而无需重新编译站点。

此选项不仅为您的页提供了最大程度的保护,还提供了最佳启动性能。

针对部署和更新进行预编译

当针对部署和更新进行预编译时,编译器将基于所有源代码(单文件页中的页代码除外)以及正常情况下用来生成程序集的其他文件(如资源文件)来生成程序集。编译器将 .aspx 文件转换成使用编译后的代码隐藏模型的单个文件,并将它们复制到布局中。

使用此选项,可以在编译站点中的 ASP.NET 网页之后,对它们进行有限的更改。例如,可以更改控件的排列、页的颜色、字体和其他外观元素。您还可以添加不需要事件处理程序或其他代码的控件。

当站点第一次运行时,为了从标记创建输出,ASP.NET 将执行进一步的编译。

注意

预编译的可更新网站不允许多个页引用相同的 CodeFile 类。

预编译子应用程序

预编译网站只是对该站点进行编译,而不会编译所有子站点。如果网站包含在 IIS 中标记为应用程序的子文件夹,则当预编译父文件夹时,不会编译子应用程序。

执行预编译

可以在命令行上使用 Aspnet_compiler.exe 工具预编译网站。有关更多信息,请参见如何:预编译 ASP.NET 网站以进行部署和 ASP.NET 编译工具 (Aspnet_compiler.exe)。

某些可视化设计器(如 Visual Studio)包括从 IDE 内预编译网站的命令。 有关更多信息,请参见 How to: Publish and Generate Fixed Assembly Names 和 How to: Publish and Generate Fixed Assembly Names in Visual Web Developer 和 How to: Publish and Sign Assemblies for Precompiled Web Sites 和 How to: Publish and Sign Assemblies for Precompiled Web Sites in Visual Web Developer 和 How to: Publish Web Sites 和 How to: Publish Web Sites (Visual Studio).

有一条编码限制适用于您打算编译的、启用了源保护的网站。基页类(代码隐藏类)可以使用完全限定类名来引用相关联的页类(.aspx 文件)和页类成员。不过,在预编译启用了源保护的网站时,此种引用不起作用。这是因为代码隐藏文件中的基页类与 .aspx 页派生的页类不在相同的程序集中。有关启用了源保护的预编译的更多信息,请参见如何:为预编译网站的程序集签名。

ASP.NET 网站预编译概述相关推荐

  1. 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。

    在去年一次项目上线时发现部署的站点首次访问跟回收后响应特别慢,每次都在3秒以内.(使用的是vs工具预编译的方式发布),在随后找到解决办法是通过命令预编译Asp.net 网站,成功解决站点响应在毫秒级别 ...

  2. 分享Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步...

    在这个文章里,我将分享一下在iOpenWorks.com这个网站试运行中碰到的若干问题和解决方案,这些问题包含了:(1)如何通过ASP.NET MVC预编译提高性能:(2)如何知道网站在运行中,用户响 ...

  3. .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析

    .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 作者:&;nbsp来自:网络 htt ...

  4. 深入剖析ASP.NET的编译原理之二:预编译(Precompilation)

    (转载)在本篇文章的第一部分:[原创]深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation),详细讨论了ASP.NET如何进行动态编译的,现在我们来谈谈另外一种重 ...

  5. 预编译 ASP.NET 网站以进行部署

    预编译 ASP.NET 网站以进行部署和更新 打开一个命令窗口并定位到包含 .NET Framework 的文件夹. .NET Framework 将安装在以下位置. %windir%\Microso ...

  6. ASP.NET网站发布-允许更新此预编译站点

    在打开的对话框中,有一个选项是至关重要的,那就是"允许更新此预编译站点": "允许更新此预编译站点"这一项,默认情况下,前面是打上一个√的,至于要不要打上一个√ ...

  7. 关于预编绎网站的问题[已预编译此应用程序的错误]

    关于预编绎网站的问题[已预编译此应用程序的错误] 当我们开发完项目后发布网站时,会生成一个PrecompiledApp.config文件, PrecompiledApp.config 文件主要用于跟踪 ...

  8. 编译ASP.NET网站项目,以及部署网站到本地localhost服务器上实现独立运行

    1.准备步骤 操作系统:windows 10 IDE:visual studio 2017 我们创建了一个网站项目后,"解决方案资源管理器"中能看到我们编写好的项目文件 准备好源文 ...

  9. 从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

    标题:从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwql ...

最新文章

  1. JavaFX快速入门完整代码:点击按钮显示当前系统时间示例
  2. ICLR 2022 | Transformer不比CNN强!Local Attention和动态Depth-wise卷积
  3. 解决 Angular 官网下载的库 Schematics 在 windows 环境不支持 .. 的临时解决方案
  4. 华为人均工资高达70万,但先看看华为员工的16 项标准
  5. C# ToString()和Convert.ToString()的区别【转】
  6. java http服务_springboot官方例子中文翻译--RESTful服务启用CORS支持
  7. Java思维导图(七)
  8. 计算机科学技术学习引论
  9. [安装 ADB 驱动]-手动安装 ADB 驱动得以进入 Android 手机系统
  10. 地理可视化绘制——中国分省多年GDP绘制
  11. R语言rvest包网络爬虫
  12. 8篇论文详解用户历史行为序列建模方法
  13. 编程实现Z=5X+3Y+10,设已知变量和结果均放在数据段
  14. java 常用四舍五入保留小数点后两位方法
  15. java 建立临时文件夹
  16. 2021.07.11 【ABAP随笔】采购订单Message输出打印
  17. 学前端要多久?学前端要多久?学前端多少钱
  18. 云计算是什么意思?3张图看懂云计算架构
  19. Python+Vue计算机毕业设计车辆年检系统的设计与实现u7cih(源码+程序+LW+部署)
  20. 一、磁盘数据恢复实验报告

热门文章

  1. module ‘torchtext.data‘ has no attribute ‘LabelField‘
  2. 机器人流程自动化技术的新发展
  3. IBM人工智能将“掌舵”全球首个跨大西洋自主驾驶船舶
  4. 20幅漫画告诉你未来世界是怎样的
  5. 记忆的天空:“崩塌型”记忆活动原理
  6. 伯克利AI研究院解析「反向课程学习」,改善「强化学习智能体」并应用于机器人技术
  7. 互联网如何促进经济发展?腾讯、谷歌、Facebook的实践和经验
  8. 全球AI报告:探索人工智能革命
  9. 远程办公中的IT女性:工作量增加3倍,离职率却下降近50%
  10. 2020 年接近尾声,我选择来鲲鹏开发者技术峰会学点干货!