问题标签 [asp.net-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9175 浏览

asp.net-mvc-4 - MVC4 捆绑 GZIP 和标头

我正在使用 Google PageSpeed 和 YSlow 测试我的网站,而我使用 MVC4 包创建的包没有得到

Gzipped(使用 gzip 或 deflate 压缩资源可以减少通过网络发送的字节数)并且没有

变化:Accept-Encoding 标头(指示代理服务器缓存资源的两个版本:一个是压缩的,一个是未压缩的。这有助于避免公共代理无法正确检测到 Content-Encoding 标头的问题。)

以及如何为 ISS 上的整个脚本文件夹添加编码头。我知道有 HTTP 响应标头,然后添加自定义 HTTP 响应标头,

在此处输入图像描述

但这是否适用于整个脚本文件夹和子文件夹以及在名称和值字段中放置的内容。

这怎么能解决。

问候。

0 投票
15 回答
63904 浏览

asp.net - ASP.NET 捆绑 - 包含的文件更改后捆绑不更新(返回 304 未修改)

我正在尝试 ASP.NET 捆绑与 ASP.NET MVC 4 应用程序。情况是我想做一个 CDN 风格的服务,它有 JS 和 CSS 文件,你可以从其他站点使用这种类型的地址访问它们:http://www.mycdn.com/scripts/plugin/js,其中捆绑并缩小所有包含的 .js 文件。

我的一个文件的捆绑配置如下所示:

但是,当我这样做时,即使我更改了原始 js 文件,捆绑包也没有得到更新。当我刷新浏览器时,我不断收到 304 Not Modified,并且缩小文件的内容没有更新。我怎样才能使包更新,因为旧内容的包是没用的?我尝试了各种方法,但无法找到解决方案。

提前致谢!

0 投票
2 回答
180202 浏览

asp.net-mvc-4 - 为什么使用@Scripts.Render("~/bundles/jquery")

如何

与像这样从 html 引用脚本不同

有没有性能提升?

0 投票
1 回答
2752 浏览

asp.net-mvc - 如何在 ASP.NET MVC 4、.net 4.5 中包含自定义目录中的 JavaScript 和 CSS?

考虑到这个文件夹结构:

在应用程序中,我想包括style1.cssstyle2.css和。style3.cssstyle4.css

我正在这样做:

_Layout.cshtml我这样渲染它:

仅加载 style1.css 和 style2.css。如何正确加载style3.cssstyle4.css

LE:内容是解决方案中的一个文件夹,该文件夹中的所有文件都添加到解决方案中。

0 投票
2 回答
1111 浏览

asp.net-mvc - 自动捆绑/缩小在 MVC 4 的最终版本中被抛弃了吗?

根据我之前阅读的 Scott Guthrie 的一篇文章Mads Kristensen 发布的视频,我应该能够通过替换以下内容在 ASP.net MVC 4 中自动捆绑/缩小:

有了这个:

我尝试同时针对 .Net 4.0 和 4.5,但似乎没有什么不同。我收到 404 错误,并且链接和脚本标签永远不会指向捆绑的资源。

此功能是否已从最终版本中删除?

我想将此功能用于“主题”。


这就是我最终实施的方式。希望这是有道理的...

0 投票
6 回答
40797 浏览

c# - MVC4 - 当优化设置为 true 时捆绑不起作用

我想知道我在这里做的不对。我正在使用 ASP.NET C# MVC4,我想使用新的 css/js 优化功能。

这是我的 HTML 部分

这是我的BunduleConfig.cs部分

输出(作品):

但是,当我取消注释BundleTable.EnableOptimizations = true;html 输出看起来像这样

这当然是 404。我不知道我在哪里做错了,请帮助,第一次使用 MVC4。

0 投票
1 回答
469 浏览

asp.net-mvc - ASP MVC4 使用默认包而不是我自己的包?

我的 Application_Start() 中有以下代码:

和:

当我使用调试中断 Application_Start 的第一行然后检查 BundleTable.Bundles 时,我看到 BundleCollection 中已经有条目。

这些条目不是我的条目,它们似乎与我的应用程序中的文件无关。相反,它们似乎是默认值。例如,我的应用程序只有一个 jQuery 文件,而 BundleCollection 有七个与 jQuery 相关的 js 文件。

有谁知道这些文件如何/为什么在 BundleCollection 中以及它们是如何设置的?

例如:我如何以及为什么找到名为 moo、dojo、prototype、ext 等的包。这些不是我创建的包,所以它们都是从哪里来的。我在这里完全糊涂了。找不到任何会导致创建这些捆绑包的东西。

0 投票
3 回答
17613 浏览

asp.net - VS2012 - Web 表单 - 捆绑混淆

我通过 Visual Studio 2012 创建了一个新的 ASP.NET Web 窗体项目。不幸的是,默认的 Site.Master 文件非常混乱。(我将这些问题放在一起,因为它们非常相关并且引用了相同的代码。)

首先,我已经了解捆绑和缩小的目的,所以无需讨论。但是,我明白脚本包含在默认母版页中的方式是什么。

问题 1:
为什么在 BundleConfig.cs 文件中创建了一个名为“~/bundles/WebFormsJs”的包,而在母版页中,这些相同的单个 .js 文件中的每一个都在 ScriptManager 中一一列出?

在 BundleConfig.cs 中:

Site.Master内部:

如您所见......每个相同的 .js 文件都单独列在 ScriptManager 中。我什至没有看到对在 BundleConfig.cs 之外的任何地方创建的“WebFormsJs”包的引用。如果这些 javascript 文件中的每一个都将在 ScriptManager 中单独引用,为什么还要创建那个包?

问题 2:
为什么要以这种方式使用 ScriptManager?我的印象是 Microsoft 的 Ajax 版本需要 ScriptManager,例如使用 UpdatePanels。在这里使用 ScriptManager 的目的是什么......只是为了简单地注册 javascript 文件?

问题 3:
通过 ScriptManager 注册 javascript 文件与在 Site.Master 顶部使用以下方法注册 javascript 文件有什么区别?

问题 4:
在 ScriptManager 中我也注意到了这些:

...我至少可以从 BundleConfig.cs 中识别“MsAjaxBundle”,但是 jquery 和 jquery.ui.combined 定义在哪里?我进行了搜索,并在 packages.config 中找到了对它们的引用。

但我也不明白这里发生了什么。我认为 packages.config 用于 NuGet。另外...我什至没有看到此处列出的这些 jQuery .js 文件位置的路径。它们只是在这里列出,并且奇怪地与特定版本的 .NET Framework(在我的例子中为 4.5)相关联。为什么 javascript 资源会与 .NET Framework 的某个版本相关联,这超出了我的理解。

无论如何,问题 4 是这样的:ScriptManager 中的资源“jquery”是如何添加/使用的?为什么我看不到 jQuery .js 文件在 BundleConfig.cs 中像所有其他捆绑包一样捆绑在一起?

问题 5:
如果我不打算使用 UpdatePanel 和那些 Microsoft Ajax 控件,我可以从 Site.Master 中删除以下脚本引用吗?我对为什么默认情况下甚至将其包含在此处感到有些困惑。

0 投票
1 回答
500 浏览

asp.net-mvc-4 - 使用 RTM 调试 MVC4 捆绑

所以我用 rtm 位完成了一个新的 mvc4 应用程序的开发。

我部署到产品服务器上,除了样式之外,一切都运行良好。捆绑包出了点问题,我认为它是订购问题或某些未随捆绑包呈现的文件。

如何调试捆绑包发生的事情以知道出了什么问题?回到我的开发环境中,如果我在 web.config 中切换 debug=false,我可以复制我在 prod 中遇到的问题,因此该环境没有问题。

谢谢!!

更新。如果我通过 BundleTable.EnableOptimizations = false 关闭启用优化;prod 上的网站工作正常,但当然没有缩小。

0 投票
6 回答
64287 浏览

c# - 如何强制 BundleCollection 在 MVC4 中刷新缓存的脚本包

... 或者我是如何学会停止担心的,而只是针对来自 Microsoft 的完全未记录的 API 编写代码。有官方System.Web.Optimization发布的任何实际文档吗?'因为我肯定找不到,没有 XML 文档,所有博客文章都引用了 RC API,这有很大不同。随便吧。。

我正在编写一些代码来自动解析 javascript 依赖项,并从这些依赖项中动态创建包。一切都很好,除非您编辑脚本或以其他方式做出会影响捆绑包的更改而不重新启动应用程序,否则这些更改将不会被反映。所以我添加了一个选项来禁用开发中使用的依赖项缓存。

但是,即使捆绑集合已更改,显然也会BundleTables缓存 URL 。例如,在我自己的代码中,当我想重新创建一个包时,我会执行以下操作:

每当我删除并重新创建具有相同别名的包时,绝对不会发生任何事情:bundleUrl返回ResolveBundleUrl的结果与我删除并重新创建包之前相同。“相同”是指内容哈希未更改以反映捆绑包的新内容。

编辑......实际上,它比这更糟糕。捆绑包本身以某种方式缓存在集合Bundles之外。如果我只是生成自己的随机散列以防止浏览器缓存脚本,ASP.NET 会返回旧脚本。因此,显然,从中删除捆绑包BundleTable.Bundles实际上并没有做任何事情。

我可以简单地更改别名来解决这个问题,这对于开发来说是可以的,但我不喜欢这个想法,因为这意味着我必须在每次页面加载后弃用别名,或者让 BundleCollection 的大小在每个页面加载。如果您将其留在生产环境中,那将是一场灾难。

因此,似乎在提供脚本时,它会独立于实际BundleTables.Bundles对象进行缓存。因此,如果您重用一个 URL,即使您在重用它之前删除了它引用的包,它也会响应缓存中的任何内容,并且更改Bundles对象不会刷新缓存 - 因此只有项目(或相反,具有不同名称的新项目)将永远被使用。

这种行为似乎很奇怪......从集合中删除某些内容应该将其从缓存中删除。但事实并非如此。必须有一种方法来刷新此缓存并让它使用当前的内容,BundleCollection而不是在首次访问该捆绑包时缓存的内容。

知道我会怎么做吗?

有一种ResetAll方法的目的未知,但无论如何它都会破坏事物,所以不是这样。