簡體   English   中英

包括本地和遠程 javascript 庫

[英]Including local vs. remote javascript libraries

我正在使用 jsSHA 1.3.1,我在此處下載並在我的本地主機上用於學習項目。 它給出的結果與我通過參考遙控器獲得的副本略有不同,如下所示:

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

現在,遠程副本對我來說效果很好,這要感謝@Andreas here的出色回答。

但這給我留下了一個新問題:包含副本與引用遠程 js 庫的理由是什么? 它是否像“供應”庫,將我的應用程序與代碼的后續更改隔離開來?

如果您的應用程序在 WWW 上可用,您應該考慮使用眾所周知的外部 URL。


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

下面的示例從谷歌的服務器獲取 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 連接的幾乎所有好處它的服務器。 流氓客戶端腳本幾乎不能做的事情......

  • 如果您的應用程序是在本地訪問的,您可能應該將它包括在您的應用程序中,以提高性能(在延遲和帶寬方面訪問您的服務器應該比訪問某些遠程服務器更快)和可靠性原因(您不依賴在外部互聯網連接和正在啟動和運行的遠程服務器上)。

這取決於開發人員是否對您“熱鏈接”到 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 來完成。 我不相信 googlecode.com URL 是 CDN URL(我可能是錯的)。 使用適當的 CDN 或外部鏈接來引用 JS 庫當然是一種常見的做法,您可以在 JQuery 頁面上看到這樣的示例,但這通常是作為頁面性能增強的一部分完成的。 CDN 針對用戶的地理位置進行了優化,因此可以更快地提供對 CDN(相對於主服務器)上任何內容的引用。 它具有用戶體驗優勢。 如果頁面加載時間對您的用戶群很重要,這將很有用。

另一種也是最安全的方法是在您自己的源代碼管理中保留一份 JS 庫的副本,並使用您自己的基礎設施引用它。 它與您同在,它是一個固定版本,如果發生某些變化(例如重組、站點關閉等),您也不會感到意外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM