【问题标题】:Difference between WebApp that connects to API vs backend rendering连接到 API 的 WebApp 与后端渲染之间的区别
【发布时间】:2017-08-31 10:27:15
【问题描述】:

有时当我创建基本的 Web 工具时,我会从 nodeJS 后端开始,通常使用 ExpressJS 创建一个 API 服务器。当某些路由被命中时,服务器通过使用连接的实时状态从 EJS 呈现 HTML 来响应,然后将其发送到浏览器。

此应用通常会为公共静态资源公开一个目录,并且也会为这些资源提供服务。我想这会给这种形式的网络应用程序带来很多开销,但我不确定。


其他时候我会从一个 API 开始(可能是完全相同的 nodeJS 结构,没有 HTML 渲染,只是状态管理和 API 暴露),我将构建一个 Angular2 或其他将连接到 API 的 HTML 网页,在加载时加载信息,并在页面中填充数据。

这些页面往往依赖于大量的 AJAX 调用和 jQuery,以便在触发一堆异步回调后刷新 angular 组件。在这种结构中,我将使用像 Apache 这样的 Web 服务器来提供所有文件并定义路由,而网页中的 JS 将完成剩下的工作。


两者的整体优势和劣势是什么?为什么我应该使用一种策略而不是另一种?它们是否可行并取决于规模和使用?我想负载均衡器的水平扩展可以在这两种情况下工作。

【问题讨论】:

    标签: javascript jquery angularjs node.js ajax


    【解决方案1】:

    没有好方法或坏方法可供您选择。您上面描述的每种方法都有一些优势,您需要确定哪种方法最适合您的项目。

    您可能会考虑的几点:

    服务器端处理

    • 安全性 - 您不必公开敏感信息(API 令牌、登录等)。

    • 更多控制 - 您可以更好地控制您对资源的处理方式

    • “更好的”客户端支持 - 某些客户端 (IE) 不支持与其他客户端相同的功能。在服务器上渲染 HTML 而不是在客户端上操作它会给你更多的客户端支持。

    • 在服务器上预渲染资源比在客户端处理异步方法更简单。

    • SEO、社交分享等 - 您的服务器如何发送资源,这就是机器人如何看待它们。如果您在服务器机器人上预渲染所有内容,将能够抓取您的网站、对其进行标记等。如果您在客户端执行此操作,它只会看到未处理的页面。话虽如此,还是有办法解决这个问题的。

    客户端处理

    • 等待时间。在客户端做一些事情会改善你的加载时间。但是注意不要做太多的事情,因为 JS 是单线程的,繁重的东西会阻塞你的 UI。

    • CDN - 您可以从 CDN 提供静态资源(HTML、CSS、JS 等),这比直接从您的服务器应用提供它们要快得多

    • 测试 - 测试 UI 时很容易模拟后端服务器。

    • 客户端是特定应用程序/设备等的前端。您放入客户端的逻辑越多,您必须在不同客户端之间复制的代码就越多。因此,如果您打算拥有移动应用程序,最好有一组 API 来调用,而不是在客户端中包含您的逻辑。

    • 安全性 - 客户端上运行的任何内容都可以被客户端完全读取。无论您如何缩小、压缩、加密所有内容,一个足智多谋的人总能用您的代码为所欲为

    我没有故意在每个点上标记赞成/反对,因为它是由您决定的。

    这个列表可以继续下去,我不想考虑更多的点,因为它非常主观,最终取决于开发人员和应用程序。

    我个人倾向于选择“客户端发出 ajax 请求”方法或两者兼而有之 - 在服务器上预渲染某些内容,客户端负责休息。但要小心后者,因为如果没有正确实施,它会破坏您的自动化测试、IDE 集成等。

    最后一点 - 您应该始终在服务器上进行重要的验证。永远不要依赖客户的数据。

    【讨论】:

    • "最后一点 - 您应该始终在服务器上进行关键验证。永远不要依赖来自客户端的数据。"非常有价值,值得强调。你的回答很透彻。在接受您的回答之前,我将等待任何其他输入。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2021-09-26
    • 2019-06-09
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多