【发布时间】:2022-01-05 19:29:20
【问题描述】:
对于上下文:我的应用程序有一个调度程序,我想显示多个约会块(比如一个 div 作为子图像、文本和一个按钮),但是这个问题也适用于假设产品目录。为这些块构建 HTML 内容的最佳做法是什么?
在我的搜索中,我发现了多个选项,例如(使用伪代码)
在 jQuery 中逐行构建
$('<div />').append($('<img />')).append($('<p />').append($('<button />'));
我个人发现,一旦块包含超过 3-5 个元素,这个选项就会变得非常难看,因为代码开始跨越超过一整页滚动并且变得不可读(但这也可能是因为我的编码不佳技能)。
通过 Ajax/Load 检索 HTML 页面
<div>
<img><p></p><button></button>
</div>
$("target").load("page.php");
or
$.ajax({
url: "page.php",
success: function (response) {
$("target").append(response);
});
从好的方面来说,这将减少初始页面加载时间的内容分开,并且可以在需要之前在服务器端构建内容,在不利方面,我的服务器显示延迟约 0.1 秒(平均,可重现) AJAX 调用返回(几乎没有数据来回发送)。尽管这最终可能看起来微不足道,但所有小的延迟加起来都会影响用户体验。
克隆模板
<template>
<div>
<img><p></p><button></button>
</div>
</template>
const template = document.querySelector("template");
var tgt = document.getElementById("target");
node = document.importNode(template.content, true);
tgt.appendChild(node);
从好的方面来说,这个选项比第一个选项(通过 jQuery 构建)快大约 10-20 倍,但是只有在大约 1000 个块之后才会变得明显,这远远超过了我的用例。不利的一面是,这“污染”了页面 HTML 代码,并且无论如何都需要通过 JS 将内容处理为对象。
还有哪些其他可行的选择?这个用例的最佳实践是什么?
【问题讨论】:
标签: javascript html jquery ajax templates