当前位置: 首页 > 面试题库 >

为什么返回生成的HTML而不是JSON是一种不好的做法?还是?

唐啸
2023-03-14
问题内容

使用JQuery或任何其他类似框架从自定义URL / Web服务中加载HTML内容非常容易。到目前为止,我已经使用了很多次这种方法,并且发现性能令人满意。

但是所有书籍,所有专家都试图让我使用JSON而不是生成的HTML。它比HTML优越得多吗?

它快很多吗?
它在服务器上的负载是否要小得多?

另一方面,我有一些使用生成的HTML的原因。

  1. 它是简单的标记,通常与JSON一样紧凑或实际上更紧凑。
  2. 错误少了,因为您得到的只是标记,而且没有代码。
  3. 在大多数情况下,这样编程会更快,因为您不必为客户端单独编写代码。

您站在哪一边?为什么?


问题答案:

实际上,我两面都是:

  • 当我需要在javascript端使用 data时 ,我使用JSON
  • 当我需要在javascript端进行 演示 而不进行任何计算时,通常会使用HTML

使用HTML的主要优点是,当您要用Ajax请求返回的内容替换页面的整个部分时:

  • 在JS中重新构建页面的一部分非常困难
  • 您可能已经在服务器端有了一些模板引擎,这些引擎最初是用来生成页面的。为什么不重用它呢?

通常,至少在服务器上,我通常不会真正考虑“性能”方面:

  • 在服务器上,生成HTML或JSON的一部分可能不会产生太大的变化
  • 关于通过网络的内容的大小:好吧,您可能不会使用数百KB的数据/ html …在要传输的内容上使用gzip将会带来最大的不同 (不要在HTML之间进行选择)和JSON)
  • 不过,可以考虑的一件事是,您需要在html" target="_blank">客户端上从JSON数据重新创建HTML (或DOM结构) 所需的资源…与将一部分HTML推入页面相比; -)

最后,绝对重要的一件事:

  • 您需要花多长时间开发一个新系统,以JSON +代码的形式发送数据,而JS需要将JS作为HTML注入页面?
  • 仅返回HTML需要多长时间?以及如果可以重用一些已经存在的服务器端代码需要多长时间?

并回答另一个答案:如果您需要更新页面的多个部分,那么仍然存在将所有这些部分发送到一个大字符串中的解决方案/技巧,该大字符串将几个HTML部分组成一组,然后在JS中提取相关部分。

例如,您可以返回一些类似于以下内容的字符串:

<!-- MARKER_BEGIN_PART1 -->
here goes the html
code for part 1
<!-- MARKER_END_PART1 -->
<!-- MARKER_BEGIN_PART2 -->
here goes the html
code for part 2
<!-- MARKER_END_PART2 -->
<!-- MARKER_BEGIN_PART3 -->
here goes the json data
that will be used to build part 3
from the JS code
<!-- MARKER_END_PART3 -->

看起来并不太好,但是它确实很有用 (我已经使用了好几次,主要是在HTML数据太大而无法封装为JSON的情况下)
:您正在为页面的各个部分发送HTML需要演示,并且您正在针对需要数据的情况发送JSON …

…然后提取这些,JS substring方法将解决问题,我想;-)



 类似资料:
  • 问题内容: 我已经多次听到在HTML 中使用JavaScript事件(例如)是不正确的做法,因为它不利于语义。我想知道不利之处以及如何解决以下代码? 问题答案: 您可能正在谈论简洁的Javascript,看起来像这样: 中央javascript文件中的逻辑如下所示: 优点是 行为(JavaScript)与表示(HTML)分开 没有语言的混合 您正在使用像jQuery这样的javascript框架,

  • 问题内容: 我已经多次听到在HTML 中使用JavaScript事件(例如)是不正确的做法,因为它不利于语义。我想知道不利之处以及如何解决以下代码? 问题答案: 您可能正在谈论简洁的Javascript,看起来像这样: 中央javascript文件中的逻辑如下所示: 优点是 行为(JavaScript)与表示(HTML)分开 没有语言的混合 您正在使用像jQuery这样的javascript框架,

  • 我有一个问题,关于什么是正确的做法,使用SwingU实用程序的调用稍后方法。 所以首先,我想确认我理解正确。 据我所知,对GUI的更改必须在EDT上完成,因为Swing组件不是线程安全的。invokeLater方法将Runnable作为参数,该Runnable中包含的任何内容都将在EDT上运行。因此,对Swing组件的任何调用都被放入一种队列中,在EDT上一次执行一个。 有了这些,我的问题是:使用

  • 当用最大值70和最小值59测试该代码时,它返回1.0而不是0.5。我的公式错了吗?第二个if语句也是针对这些方向的:(public static double hdd(int max,int min),返回一天的hdd。如果max或min为-999(缺少),则返回0.0。如果max

  • 我有一个spring boot webapp,我在其中定义了REST API。我将Spring Security性用于REST API安全性。 我已经用RESTController注释了我的控制器类。我最近更新了spring boot,mvc和安全性到最新版本。 我现在看到,在我的负面情况下,在更新之前,它返回json错误响应,但现在在更新之后,它返回html错误响应。 在更新之前,它给出了以下错

  • 问题内容: 每位JS意见领袖都说,扩展本机对象是一种不良做法。但为什么?我们会获得出色的表现吗?他们是否担心有人会以“错误的方式”这样做,并向中添加可枚举的类型Object,实际上破坏了任何对象上的所有循环? 以TJ Holowaychuk的should.js为例。他向其中添加了一个简单的吸气剂,Object并且一切正常(源代码)。 这真的很有意义。例如,可以扩展。 是否有反对扩展本机类型的论点?