- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有时,当我创建基本的 Web 工具时,我会从 NodeJS 后端开始,通常使用 ExpressJS 创建 API 服务器。当命中某些路由时,服务器会使用连接的实时状态从 EJS 渲染 HTML 来进行响应,然后将其发送到浏览器。
此应用程序通常会公开公共(public)静态资源的目录,并为这些资源提供服务。我想这会给这种形式的网络应用程序带来很大的开销,但我不确定。
<小时/>其他时候,我会从 API 开始(可能是完全相同的 NodeJS 结构,没有 HTML 渲染,只有状态管理和 API 公开),然后构建一个 Angular2 或其他 HTML 网页,它将连接到 API,在加载时加载信息,并填充页面中的数据。
这些页面往往依赖大量 AJAX 调用和 jQuery,以便在触发一堆异步回调后刷新 Angular 组件。在此结构中,我将使用 Apache 之类的 Web 服务器来提供所有文件并定义路由,而网页中的 JS 将完成其余的工作。
<小时/>两者的总体优势和劣势是什么?为什么我应该使用一种策略而不是另一种策略?它们是否可行且取决于规模和用途?我想负载均衡器的水平扩展在这两种情况下都可以工作。
最佳答案
没有什么好或坏的方法可供选择。上述每种方法都有一些优点,您需要决定哪一种最适合您的项目。
您可能会考虑的一些要点:
服务器端处理
安全性 - 您不必公开敏感信息(API token 、登录名等)。
更多控制权 - 您将更好地控制如何使用资源
“更好”的客户端支持 - 某些客户端 (IE) 不支持与其他客户端相同的功能。在服务器上呈现 HTML 而不是在客户端上操作它将为您提供对客户端的更多支持。
在服务器上预渲染资源比在客户端处理异步方法更简单。
SEO、社交共享等 - 您的服务器如何发送资源,这就是机器人如何看待它们。如果您在服务器上预渲染所有内容,机器人将能够抓取您的网站、对其进行标记等。如果您在客户端上执行此操作,它只会看到未处理的页面。话虽如此,有一些方法可以解决这个问题。
客户端处理
等待时间。在客户端做一些事情会缩短你的加载时间。但要注意不要做太多事情,因为 JS 是单线程的,繁重的事情会阻塞你的 UI。
CDN - 您可以从 CDN 提供静态资源(HTML、CSS、JS 等),这比直接从服务器应用程序提供静态资源要快得多
测试 - 在测试 UI 时可以轻松模拟后端服务器。
客户端是特定应用程序/设备等的前端。您在客户端中放入的逻辑越多,您需要在不同客户端之间复制的代码就越多。因此,如果您计划拥有移动应用程序,最好有一组可供调用的 API,而不是将您的逻辑包含在客户端中。
安全性 - 客户端上运行的任何内容都可以被客户端完全读取。无论您如何缩小、压缩、加密所有内容,足智多谋的人总是能够对您的代码做任何他想做的事情
我故意没有在每一点上标记赞成/反对,因为由你来决定哪一个。
这个列表可以一直列下去,我不想考虑更多的点,因为它非常主观,最终取决于开发者和应用程序。
我个人倾向于选择“客户端发出 ajax 请求”方法或两者的混合 - 在服务器上预渲染某些内容,而客户端则负责休息。但要小心后者,因为如果实现不正确,它会破坏您的自动化测试、IDE 集成等。
最后一点 - 您应该始终在服务器上进行关键验证。切勿依赖客户端的数据。
关于javascript - 连接API的WebApp与后端渲染的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43237417/
我有一个在 Tomcat 7.0.54 上运行的 Java webapp。我在 webapp 中使用 Spring。当用户登录到/favicon.ico 时。当用户第二次登录时,他们将被重定向到正确的
如何使用通用的 webappclassloader 为 tomcat 中的所有 webapps 自定义 webapp 类加载器? 我看到我可以扩展类加载器并将其添加到每个 web 应用程序的上下文标记
我有一个 jquery mobile 和 php webapp,可以在 iOS7 中正常工作。我最近升级到 iOS8 进行一些测试,但我遇到了状态栏现在与 Web 应用程序标题重叠的问题。这似乎也导致
我注意到这些文件夹具有非常不同的属性。我最近在 webapps 文件夹下部署了一个 .war 文件。我注意到,一旦部署了 .war 文件,项目的未压缩版本就会添加到目录中。当我尝试修改未压缩版本中的任
假设您在本地主机的 Tomcat 上部署了一个名为 MyWebApp 的网络应用程序。如果您像这样使用浏览器访问它: localhost:8080/MyWebApp 那为什么会显示index.html
我正在寻找一种提示/解决方案来生成一个具有自定义设计的模板 Web 应用程序,然后我所有其他 Web 应用程序都应该采用模板 Web 应用程序的设计。那可能吗?背后的想法是,我们有多个用于项目的 We
我有一扇 Azure 前门。主要区域有一个 azure 功能,辅助区域有一个功能应用程序。当这两个功能都启动时,它工作正常。它正在向每个区域分配 50-50 个负载。但是当我故意停止主要功能时。所有流
这个问题已经有答案了: Getting Python error "from: can't read /var/mail/Bio" (7 个回答) 已关闭去年。 几天前我开始使用 python nfl
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个在 Apache Tomcat 5.5 中完美运行的 Web 应用程序,我需要“转换它”以便它可以部署在 Oracle 应用服务器 10.1.3 中。 现在我制作了一个应用程序的 WAR 文件
我在 jsp 中有 2 个 webapps,其中一个供公共(public)使用,另一个供本地使用。 是否可以在 Apache tomcat 中的一个端口上托管一个 Web 应用程序而在另一个端口上托管
最近,我一直在对模块化JS进行大量试验,但我仍然想知道是否以“正确的方式”编写它。 例如,如果我有一个页面,其中包含输入和提交按钮,这些页面应在提交后显示数据(例如表格和图形),所以我在IFFE下编写
我有一个部署为 web 应用程序的 google 脚本。此 webapp 需要发送带有 webapp 的 URL 的电子邮件,以便收件人可以使用 URL 访问 webapp。如何获取 webapp 中
我们正在部署在.Net core中开发的微服务,并将部署在Azure WebApp中 这些 WebApp 之间将进行大量通信。 现在,由于 WebApp 面向互联网,它们之间的所有调用都将通过互联网,
这个问题已经有答案了: SEVERE: Failed to initialize Jenkins [closed] (1 个回答) 去年关闭。 我在 Ubuntu 12.04 中安装了 Jenkins
我看到一个奇怪的问题。我有两个网络应用程序。一个用于我们使用 Jersey 公开的其余 Web 服务。另一个具有 JSF 前端实现,它调用上面的 web 服务来获取详细信息。我们使用 Tomcat 作
这是我在探索工作场所中某些任务自动化的世界时遇到的一个普遍问题。 我们的企业网站上有一个门户/启动板环境,其中的应用程序显示为图 block 。 其中一个应用程序打开后有一个主页,其中有一堆搜索字段和
我有两个 Google 电子表格,每个电子表格都附加了一些 Apps 脚本。最终,我想将两者部署为 Web 应用程序,以便它们可以通过其公共(public) URL 相互通信。目前,我只部署了其中一个
当我尝试运行 ngserve 时,我得到以下信息 ERROR in ./src/main/webapp/manifest.webapp Module parse failed: /home/ferga
这个问题在这里已经有了答案: Eclipse Output Folders (6 个答案) 关闭 5 年前。 我正在使用 Tomcat 5,当我启动服务器并从 webapp 文件夹加载我的应用程序时
我是一名优秀的程序员,十分优秀!