簡體   English   中英

在服務器端實時生成客戶端腳本可行嗎?

[英]It is feasible to generate client-side scripts on the server in realtime?

我正在開發一個應用程序,其中有許多每小時不同的可用資源,並且在客戶端中加載所有排列將導致一個非常非常大的腳本。

我強烈考慮讓服務器實時動態地生成一個結合所有當前最佳資源的縮小腳本,預加載配置和用戶特定的憑據(當然,只有在登錄時才加載)。 在用戶與頁面交互之前不需要該腳本,因此可以安全地在客戶端加載它, defer允許服務器完成它所需的毫秒數,以及網絡上的往返時間。 我認為這確實會阻止緩存腳本,鑒於它當前的構建方式,我不確定這是一個問題。 換句話說,是這樣的:

<script defer type="text/javascript" src="/dynamically-generated-script.js"></script>

我認為這是在 Stack Overflow 向社區提出的完美類型的問題,因為我從未嘗試過像這樣的實時動態腳本生成,而且我絕對可以看到它是一種久經考驗(並且可能失敗)的實踐,我我只是不知道。

這是合理的做法嗎?

這是可行的,但我強烈建議不要這樣做,原因如下:

  • 一旦動態生成腳本,您將失去許多優化層,從瀏覽器緩存腳本開始,到將腳本托管在 CDN 上。
  • 無法緩存腳本這一事實意味着您正在遠離 Web 開發的最新趨勢:漸進式 web 應用程序 (PWA) 和加速移動頁面 (AMP)
  • 來自客戶端的錯誤處理成為一個非常困難的問題,因為基本上每個用戶都有一個腳本。 像哨兵這樣的錯誤報告服務將無法識別相同的錯誤(因為每個錯誤都將由不同的文件生成)
  • 安全性、性能,甚至一般代碼質量都將難以衡量和控制,因為您再次擁有大量不同的代碼。
  • 您將無法對這些生成的文件進行任何 static 分析,因此您無法訪問許多幫助開發人員編寫更好代碼的工具 - 您仍然可以對生成這些動態腳本的代碼進行 static 分析,但是是另一回事。
  • 使用分析也可能會受到影響,具體取決於您想要進行的分析的高級程度。

話雖如此,我會強烈考慮其他解決方案。 我不知道確切的要求,所以很難說清楚,但是我注意到兩件事:

  • 您說您想將憑據和配置移動到客戶端,這是一種不好的做法,即使客戶需要大量不同的配置和憑據——尤其是憑據。 這些應該保存在服務器端,一旦客戶端基於一個憑據(通常是存儲在 cookies 中的令牌)授權,客戶端就可以訪問它們。 您可能會說我需要這些憑據來執行從客戶端到 3rd 方服務的一些請求,如果是這種情況,那么您應該從服務器端執行這些請求,並且客戶端應該調用服務器端而不是調用這些 3rd直接派對服務。
  • 代碼通常不是動態的東西,因為代碼本身使您能夠進行控制流——代碼與之交互的數據通常是動態的。 我在這里想說的是,很難想象要求使您需要為每個不同的用戶使用不同的代碼——在某些情況下,您可能希望擁有不同版本的代碼,但這是另一回事。

為了擴展上一點,我認為解決問題的方法是加載包含所有所需代碼的腳本,然后根據不同的條件執行某些代碼路徑。 您可能仍希望根據動態條件加載動態數據,這可以通過調用服務器來完成。 即使您確實必須為每個用戶執行某些真正動態的功能,那么此類功能也應該在將從客戶端調用的 api 后面公開。

暫無
暫無

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

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