在服务器上实时生成客户端脚本是否可行?

问题描述 投票:0回答:1

我正在开发一个应用程序,其中有许多可用资源每小时都在变化,并且在客户端中加载所有排列将产生非常非常大的脚本。

我强烈考虑让服务器动态生成一个最小化的脚本,该脚本结合了当前所有最佳资源,并预先加载了配置和用户特定的凭据(当然,只有登录后才加载)。直到用户与页面交互之后才需要该脚本,因此可以安全地在客户端加载defer该脚本,从而允许服务器完成其工作所需的毫秒数以及网络上的往返时间。我认为这确实可以防止缓存脚本,并且由于当前的构建方式,因此我不确定这是一个问题。换句话说,是这样的:

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

我认为这是在Stack Overflow上向社区提问的理想类型,因为我从未尝试过这样的实时动态脚本生成,而且我绝对可以看到它是一种久经考验(可能失败)的实践。我只是不知道。

这是合理的做法吗?

javascript rest client-server
1个回答
1
投票

这是可行的,但出于以下原因,我强烈建议您反对:

  • 一旦动态生成脚本,从浏览器缓存脚本到将脚本托管在CDN上,您将失去许多优化层次。
  • 无法缓存脚本的事实意味着您正在远离Web开发的最新趋势:渐进式Web应用程序(PWA)和加速移动页面(AMP)
  • 从客户端进行错误处理成为一个非常困难的问题,因为基本上每个用户都有一个脚本。错误报告服务(例如哨兵)将无法识别相同的错误(因为每个错误都将从不同的文件生成)
  • 安全性,性能,甚至一般的代码质量将很难测量和控制,因为同样会有大量不同的代码。
  • 您将无法对这些生成的文件进行任何静态分析,因此您将无法使用许多有助于开发人员编写更好代码的工具-您仍然可以对生成这些动态脚本的代码进行静态分析,但是那是另一回事。
  • 使用情况的分析也可能会受到影响,具体取决于您想要进行的分析的先进程度。

话虽如此,我会强烈考虑其他解决方案。我不知道确切的要求,所以很难确切地说,但是我注意到了两件事:

  • 您说过,您想将凭证和配置移至客户端,即使客户需要大量不同的配置和凭证-特别是凭证,这也是一个不好的做法。这些应保存在服务器端,并且一旦基于一个凭据(通常是存储在cookie中的令牌)授权客户端,客户端就可以访问它们。您可能会说我需要这些凭据才能执行从客户端到第三方服务的某些请求,如果是这种情况,那么您应该从服务器端进行这些请求,并且客户端应该在服务器端进行呼叫,而不是在调用这些第三方服务。派对服务。
  • 代码通常不是动态的东西,因为代码本身使您能够控制流-与代码交互的数据通常是动态的。我在这里要说的是,很难想象使每个用户需要不同代码的需求-在某些情况下,您可能希望拥有不同版本的代码,但这是不同的事情。

为了扩展上一点,我认为您的问题的解决方案是,加载具有所需所有代码的脚本,然后根据不同条件执行某些代码路径。您可能仍然希望根据动态条件加载动态数据,这可以通过调用服务器来完成。即使您确实必须为每个用户提供真正动态的某些功能,也应将此类功能公开在将由客户端调用的api后面。

© www.soinside.com 2019 - 2024. All rights reserved.