包括本地和远程JavaScript库

时间:2012-12-02 18:34:58

标签: javascript sha

我正在使用jsSHA 1.3.1,我downloaded here并在我的localhost上学习项目。它的结果与我通过引用遥控器获得的副本略有不同,如下所示:

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

由于@Andreas here的出色答案,远程拷贝对我来说效果很好。

但它给我留下了一个新问题:包含副本与引用远程js库的理由是什么?它是否像'推销'库一样,使我的应用程序与代码中的后续更改隔离开来?

2 个答案:

答案 0 :(得分:9)

如果您的应用程序在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个左右)。

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

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

  • 如果您的应用程序是在本地访问的,那么您应该将它包含在您的应用程序中以获得两种性能(访问服务器应该比在延迟和带宽方面访问某些远程服务器更快)和可靠性原因(您不依赖外部互联网连接和远程服务器启动和运行。

答案 1 :(得分: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网址是CDN网址(我可能错了)。当然,通常的做法是使用适当的CDN或外部链接来引用JS库,您可以看到example of this on the JQuery page,但这通常是作为页面性能增强的一部分完成的。 CDN针对用户的地理位置进行了优化,因此可以更快地提供对CDN上任何内容(与主服务器相对)的引用。它具有用户体验优势。如果页面加载时间对您的用户群很重要,那么它很有用。

另一种最安全的方法是将JS库的副本保存在您自己的源代码管理中,并使用您自己的基础结构引用它。它与您同在,它是一个固定版本,如果发生变化,例如重组,网站停机等,也不会出现意外情况。