【问题标题】:How to minify SignalR如何缩小 SignalR
【发布时间】:2017-07-01 00:17:32
【问题描述】:

我的Index.cshtml 中有以下内容:

    @Scripts.Render("/signalr/hubs")

在我的BundleConfig.cs 中,我有以下内容:

    .Include("~/Scripts/jquery.signalR-{version}.min.js")

打开EnableOptimizations,我得到了一个很好的捆绑vendor? 包。但在我的Sources 中,我看到了:

为什么会加载这个未缩小的原始 JS?如何捆绑/缩小它?

【问题讨论】:

  • 为什么要缩小它?动态生成的/signalr/hubs 脚本通常只有几千字节或更小。
  • 反正很多字节。

标签: javascript c# signalr


【解决方案1】:

默认情况下,SignalR 的代理脚本在运行时动态生成 /signalr/hubs。它们通常很小,大约为几千字节或更小,因此缩小它们不会产生任何性能优势(如果它们已经适合整个以太网帧,则可能根本没有任何优势)。

此外,集线器本身无法缩小其内部符号/标识符,因为它公开了您的代码使用的“公共 API” - 请参阅 Hub 类中的 dynamic(或接口)“客户端方法”调用如何通过管道传输,因此必须保留这些名称才能使系统正常工作。

最后,IIS 通常配置为 HTTP gzip 压缩某些动态生成的内容,这包括 SignalR 代理脚本 - 进一步缩小可能会适得其反(因为缩小脚本的熵可能高于未压缩脚本)。

但是,如果您认为可以安全地压缩它们,或者如果您想捆绑它们,并且确定不需要动态生成的代理来处理快速变化的开发人员需求,那么您可以生成它们离线:

https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client

如何为 SignalR 生成的代理创建物理文件

作为动态生成代理的替代方法,您可以创建一个包含代理代码的物理文件并引用该文件。您可能希望这样做是为了控制缓存或捆绑行为,或者在编写对服务器方法的调用时获得 IntelliSense。

  1. 安装 Microsoft.AspNet.SignalR.Utils NuGet 包。
  2. 打开命令提示符并浏览到包含 SignalR.exe 文件的工具文件夹。工具文件夹位于以下位置:packages\Microsoft.AspNet.SignalR.Utils.2.1.0\tools
  3. signalr ghp /path:[path to the .dll that contains your Hub class] - 此命令在 signalr.exe 所在的文件夹中创建一个名为 server.js 的文件。
  4. 将 server.js 文件放在项目的适当文件夹中,将其重命名为适合您的应用程序,并添加对它的引用以代替“signalr/hubs”引用。

【讨论】:

  • signalr 明确禁用 gzip 压缩,即使它是在 IIS 级别配置的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多