5

我正在使用 jsSHA 1.3.1,我在此处下载并在我的本地主机上用于学习项目。它给出的结果与我通过引用遥控器得到的副本略有不同,如下所示:

<script src="https://raw.github.com/Caligatio/jsSHA/master/src/sha1.js"></script>

现在,由于@Andreas here的出色回答,远程副本对我来说效果很好。

但这给我留下了一个新问题:包含副本与引用远程 js 库的理由是什么?是否就像“供应”库一样,使我的应用程序不受代码中的后续更改影响?

4

2 回答 2

11

如果您的应用程序在 WWW 上可用,您应该考虑使用众所周知的外部 URL。


<script type="text/javascript"
   src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js">
</script> 

下面的示例从 google 的服务器获取 jquery 1.8.0 的缩小版本。


  • 这种方法获得的好处来自于缓存:

  • 您不希望潜在用户第一次访问您的网站时变得缓慢且令人失望。如果您的第一次访问者访问了我的站点,该站点使用此 URL 用于 jQuery,她的浏览器可能已经缓存了它,因此不需要加载它。

  • 使用不可变的版本化资源(jquery/1.8.0 而不是 jquery/current 之类的资源)既可以帮助开发人员不必跟踪其生产代码中的重大更改,又可以确保可以缓存这些资源。

  • 如果必须下载资源并且 URL 托管在 CDN 上,您可能会获得较低的延迟,因为资源可能会从更靠近用户网络的服务器加载。示例中的 URL 托管在作为 CDN 的 Google Hosted Libraries 上。有关更多信息,请参阅https://developers.google.com/speed/libraries/devguide

  • 在此类讨论中经常看到的另一个论点是,当必须下载资源时,如果资源不在您自己的服务器上以及您的页面包含的另外 10 个资源,您将能够获得更好的客户端资源加载并行性,因为浏览器限制他们自己加载最多少量(现代浏览器中大约 6 个)资源形成同一服务器。

  • 如果您的 Internet 范围的 Web 应用程序对安全至关重要,那么您必须尽可能安全地控制它(并且静态不可变或几乎不可变的资源相对容易安全地管理)。

  • 如果我的银行通过 HTTPS 运行的电子银行应用程序依赖谷歌的 HTTP 服务器提供服务,那么它既会授予谷歌对其电子银行应用程序客户端部分的权限,又会消除 HTTPS 连接的几乎所有好处它的服务器。流氓客户端脚本无法做的事情很少......

  • 如果您的应用程序是在本地访问的,您可能应该将它包含在您的应用程序中,以兼顾性能(在延迟和带宽方面,访问您的服务器应该比访问某些远程服务器更快)和可靠性原因(您不依赖在外部 Internet 连接和正在启动并运行的远程服务器上)。

于 2012-12-02T20:30:42.473 回答
3

这取决于开发人员是否对您“热链接”到 JS 库感到满意。

关于您发布的具体网址,

https://raw.github.com/Caligatio/jsSHA/master/src/sha1.js

我会小心引用那个。它是其源代码的主分支,它们可能随时包含重大更改。他们甚至可能决定移动和重组他们的代码库,在这种情况下,您的应用程序将中断,因为上面的 URL 将导致 404。

更好的解决方案确实是引用库的特定版本。这可确保您的应用程序以预期和已知的方式运行,并将继续运行,就 jsSHA 库而言。

有几种方法可以做到这一点。您可以引用明确指定版本的特定固定 URL

http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha1.js

因为它被标记为 (3.0.2),所以你更安全一些,但你仍然引用源代码控制。如果存在 CDN,这确实应该通过 CDN 完成。我不相信 googlecode.com URL 是 CDN URL(我可能是错的)。使用适当的 CDN 或外部链接来引用 JS 库当然是一种常见的做法,您可以在 JQuery 页面上看到这样的示例,但这通常是作为页面性能增强的一部分。CDN 针对用户的地理位置进行了优化,因此可以更快地提供对 CDN(与主服务器相反)上任何内容的引用。它具有用户体验优势。如果页面加载时间对您的用户群很重要,这很有用。

另一种选择,也是最安全的方法是,将 JS 库的副本保存在您自己的源代码管理中,并使用您自己的基础设施引用它。它与您同在,它是一个固定版本,如果发生某些变化(例如重组、站点关闭等),也不会让人感到意外。

于 2012-12-02T18:48:08.087 回答