17

快速提问,寻找一些建议。我有一个网站将从数据库中请求数据并在表格中显示给用户。我正在使用 jQuery (AJAX)、php 和 MySQL。

为表格生成 HTML 以显示数据的最佳位置在哪里:php 应该生成它并从服务器发送回整个内容(HTML + 数据),还是应该 php 只发送回数据,以及 jQuery代码制作表格并插入数据?

尽管这是在 Intranet 上运行的,但我仍然更喜欢最快的方法。

更新:

我想为这个主题添加一些额外的信息,以防它可能对其他人有用。我完全同意这里提出的分离理念,并将其作为我的设计方法。我使用 PHP 将所需的数据检索并组织成 JSON,然后使用 jQuery 生成 HTML 以显示返回的信息。在这种情况下,我正在使用 jQuery 创建一个电子表格样式的表格,并填充具有从 PHP 返回的值的“单元格”。有几行和几列,一切运行良好,但正如我所说,一个 16 x 16 的表,使用 jQuery 动态创建输入元素......

至此,我又一次遇到了IE6这个丑陋的幽灵。

IE6 仍然是我工作的认可浏览器,因此我的应用程序必须在其上运行。当我在 Firefox 和 Opera 上测试我的设计时,界面加载速度很快,使用起来很愉快。当我在 IE6 中运行相同的代码时,生成界面的时间太长了;足够长的时间,我的用户会再次开始点击,以为应用程序没有响应。我只能将其归结为 IE6 中的 JavaScript 引擎,因为代码在较新的浏览器中运行良好。因此,正因为如此,我重新设计了部分界面,让 PHP 至少生成内部表格表单元素,填充数据,然后将其发送回客户端。它打破了我想要的良好分离,但我没有看到任何其他方法可以在 IE6 中加快客户端的速度。

无论如何,只是认为其他人可能对这里的结果感兴趣,对于像我这样的其他初学者来说,浏览器支持要求有多少会影响设计选择。

4

8 回答 8

8

一个好的策略是使用“关注点分离”方法,即使用客户端在 GUI 方面使事情变得漂亮。

另请注意,此策略与 Web 上的当前趋势非常吻合,例如 Google Web Toolkit (GWT)。

于 2009-12-18T13:30:33.353 回答
4

在 Intranet 带宽上不是瓶颈,旧的笨重的 IE JS 引擎可能是,所以我会说发送生成的 HTML(即使在更好的浏览器中,对 HTML 片段的本机解析应该比使用 JS 构建 DOM 更快)。

于 2009-12-18T13:30:17.033 回答
3

大多数人会说 AJAX 应该是纯数据,而不是 html 标记。我不同意这一点,我发现 AJAX 擅长将 HTML 口袋加载到屏幕内的位置。我认为从编码的角度来看,使用服务器端技术生成 HTML 更容易,然后让 javascript 将它放在需要去的页面上。它会很好用,它会很高效(innerHTML 是将新的 html 放入页面的最有效方式),并且代码维护会更容易。如果您让 javascript 生成 html,那么您必须担心 2 个地方是否会随着显示发生任何变化,而不仅仅是 PHP。

于 2009-12-18T13:31:06.987 回答
1

如果您可以在将页面返回给用户之前获取数据并生成表格,请在 PHP 中完成。如果你没有从中获得任何东西,那么真的没有必要添加 AJAX 的闪存。

如果用户要从服务器过滤/请求多个数据更新...我将通过 PHP 以 JSON 格式将数据返回给 Javascript,并让 Javascript 将 HTML 呈现到页面中。

于 2009-12-18T13:31:34.867 回答
1

如果您要使用绝对最快的方法:使用 PHP 渲染 HTML 服务器端。如果您想要一种更易于维护、更简洁的代码方法:让 PHP 将 JSON 发送到 AJAX 代码。通过这种方式,您可以保持数据与表示和行为的良好分离。如果您可以从同一个位置(在客户端)控制 HTML 的呈现,那么更改您的网站的外观和操作方式会更容易。

于 2009-12-18T13:33:34.610 回答
1

就网络带宽而言,最快的是让 PHP 输出 JSON,并使用 jQuery 创建标记。

就客户端处理(可以说是实现)而言,最快的是使用 PHP 生成标记——例如使用模板——并通过 Ajax 传递它。

于 2009-12-18T13:31:15.317 回答
0

我在其他答案中没有看到的一件事:一致性:当一个人看到呈现的页面时,他希望能够将该页面保存为静态 html ——(尽管现在在这些“web 2.0 天”上不太如此)但是尽管如此,在所有条件相同的情况下,用户应该能够将他所看到的内容保存为静态页面:因此您应该将其从服务器预渲染到 html 发送。

于 2009-12-18T13:42:04.407 回答
0

我会在服务器端创建 HTML,并使用 JavaScript 对 HTML 进行一些小的改进。您无法创建对所有浏览器都有效的 HTML 页面,并且从服务器端检测它并不是 100% 确定的;您不能信任用户代理 ID,因为许多浏览器使用户可以选择不同的浏览器,并且创建特定于浏览器系列的 HTML 的唯一方法是验证正在使用的属性是否已实现。

我报告的内容总体上是有效的;在特定情况下,它可能无效。

于 2009-12-18T14:05:44.170 回答