visual-studio - Azure 发布的不同合并设置有何权衡?

标签 visual-studio azure publish precompile

通过 Visual Studio 发布到 Azure 时,您可以选择预编译页面。有很多选项可以解释它的作用,但没有说明其权衡。

  • 为什么我不选中“允许[...]可更新”?
  • 为什么要合并到一个文件中?这样更快吗?加载速度更快还是编译速度更快?

Microsoft 网站上有一些信息,但对于上述几点,他们并没有真正深入研究。

https://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx

enter image description here

最佳答案

我发现有关这些选项的信息分散在 Microsoft 文档的不同页面上。这是我通过将这些东西放在一起发现的:

<小时/>

为什么我不选中“允许预编译站点可更新”?

这可能会回答您的问题:

If a compiled site is updatable, UI content can be updated without recompiling the site. When a Web site is updatable, the content files remain in their original folders and only the associated code files are merged. If the site is not updatable, .ascx, .master, and .skin content files are removed from their original folder. ASP.NET .aspx files are replaced with a marker file that has no content. UI content and code are merged in this case.

来源:https://msdn.microsoft.com/en-us/library/bb397866.aspx

可更新站点存储 UI 内容的源文件,但不会对其进行编译。仅预编译非 UI 代码。这使得更新网站变得非常容易,因为您可以更改一个网页的代码,而无需预编译整个网站。此选项的缺点是网页无法预编译,并且每次用户请求页面时都会编译网页(减去可能发生的缓存)。这将降低页面加载的性能。

<小时/>

为什么合并到一个文件中?这样更快吗?加载速度更快还是编译速度更快?

将文件合并在一起使部署更容易,因为需要上传的文件更少。它还允许更多优化,因为编译器可以对多个网页进行批量优化。但是,在合并所有内容时,每次更改时都必须完全重新部署站点(而不是仅部署已更新的程序集)。

以下是每个选项的权衡概要:

将所有输出合并到一个程序集中:将所有内容合并到一个文件中可以使部署更轻松,因为只需上传一个文件。所有内容都编译在同一个包中,这允许批量优化,从而使页面加载速度更快。然而,如果网站的一部分发生变化,则必须重新上传整个网站。如果您的网站不是很大,那将是一个不错的选择。

将每个单独的文件夹输出合并到自己的程序集中:使部署更容易,同时避免每次更改时都需要上传整个网站。只需要重新编译和重新部署包含更新代码的文件夹。

将所有页面和控制输出合并到单个程序集中:将所有 UI 放入同一个程序集中,而不合并与 UI 无关的代码。这使您可以更新与 UI 无关的代码,而无需重新部署 UI 代码。

不合并:代码文件已编译,但所有 UI 内容均未预编译。因此,每次用户请求页面时都会编译网页 UI(减去可能发生的缓存),这会使页面加载时间更长。但是,由于 UI 未编译,因此如果您需要编辑一个网页,您可以将特定文件的新版本上传到生产服务器上,而无需重新编译网站的任何部分。这对于无法完全重新部署的大型网站来说非常有用。

不要合并。为每个页面和控件创建一个单独的程序集:将每个页面编译到它自己的程序集中。您拥有预编译代码的速度,但代价是阻止编译器在多个页面上进行批量优化(页面加载时间稍长)。

有关 ASP.NET 网站合并和编译的更多信息:

关于visual-studio - Azure 发布的不同合并设置有何权衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040028/

相关文章:

c# - 在已发布的应用程序中包含文本文件

azure - 使用访问限制将应用程序网关 (WAFv2) 前端 IP 列入白名单会导致应用服务出现 403 错误

asp.net - WebApplication 发布到相对文件系统路径

c# - 如何使用 Mono 编译 Visual Studio C# 项目

sql-server - SQL Server Management Studio 17 找不到一个或多个组件

c# - 解决方案加载时的 Visual Studio 加载项 Hook

azure - 是否可以在单区域冗余配置中使用 Azure Cosmos DB 上的标量 DB?

python - Microsoft Teams - 机器人主程序中的无限循环

c# - 发布网站与 Azure 云服务发布

azure - 发布没有 webjobs 的 web 应用程序