我的html标记应该在客户端生成吗
Should my html markup be generated on the client side?
我有一些服务器端代码,它输出项目的<ul>
,用户可以编辑这些项目并将更改发布回服务器。我现在正在开发一个"添加新项目"功能,该功能将向<ul>
添加一个新项目,并在单击"保存更改"按钮时将其发布回服务器。
当用户单击"添加新"按钮时,我执行客户端代码,该代码会附加<li>
标记(与服务器端代码生成的标记相同)。
让我烦恼的是裁员。这意味着,如果我应该更改<li>
标记,我必须打开php和js文件才能进行更改。
为了消除冗余,我是否应该只从服务器输出<ul>
数据,并让客户端代码生成标记?像这样的概念在性能上有哪些亮点?
您可以使用JQuery .clone()
方法进行混合。
当后端代码创建初始代码时,它可以生成<li>
元素的结构,然后,如果用户想添加新的<li>
,您可以利用现有的.clone()
it作为模板,用用户的新数据更新克隆的值,然后将其附加到<ul>
。
唯一的问题是,页面加载中可能没有任何<li>
元素,因此.clone()
调用将没有可引用的内容。如果这是一个问题,有一些方法可以解决(例如,你想使用的<li>
格式的JS string
模板,可以这样使用:var newLI = $(liTemplateString);
。同样,这个模板可以由后端的相同代码创建,该代码将在页面加载时创建实际的<li>
元素…它也只是创建一个JS变量。
除其他外,这将允许您立即将<li>
更新到页面,然后使用Ajax将更新发送到后端,以更新"主"版本,而无需让用户等待该过程。
最后,我个人的偏好是让后端做尽可能多的处理,只有你的客户端代码来处理后端不能做的事情,所以如果后端可以在创建页面时完成,我会回避转储数据和让前端处理构建列表。
理论上,您可以毫无问题地附加新的<li>
。但是,对于大多数用途,您希望服务器保存主副本,从而为每次更新重新提供整个<ul>
。
如果您使用的是.ajax()
,这将是一个几乎无法估量的加载时间差异。
让我建议第三种方法:复制现有元素,并根据需要更改其属性和/或内容。
jQuery有.clone()
,但它也可以用普通DOM或任何其他库来完成。
这样,您就不会添加不必要的延迟,并且可以使客户端代码相对独立于您可能需要做的任何标记更改。这意味着,如果你添加或更改任何与JS需要做的事情无关的标记(例如添加class=""
或内部<span>
),并且你的JS足够通用(例如获得要克隆的元素和从属性编辑其文本的元素),那么你就不需要更新它
- Meteor:在启动时将html注入客户端文件
- 使用html和Javascript进行客户端排序
- 客户端HTML MVC渲染与服务器端通过NodeJS进行重定
- 检查HTML客户端是否接收到服务器的最佳实践's的回应
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 客户端 JavaScript 没有定义 - 但它在 HTML 源代码中.任何人都知道为什么
- 突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
- HTML到PDF的转换仅在客户端使用JavaScript
- 客户端HTML最小化
- HTML客户端可移植文件生成-无外部资源或服务器调用
- NodeJS + expressJS:服务器端与客户端 html 渲染
- 在表单提交时将客户端 HTML 表数据提取到服务器端 PHP 脚本
- 对客户端 HTML 模板使用