来自老派,我只是问自己,我应该在哪里为我的 JS 代码嵌入额外的数据?
评论标签
在过去(2008 年)我曾经将数据存储在评论 block 中。我现在对此很怀疑。我非常不确定是否一种或多种流行的浏览器会在页面加载时删除评论标签。除了这种不安全感之外,这种方法总是很有效。尤其是不必担心标签等,除非 --> 包含在数据中。
隐藏div
我在生产中使用的另一种常见技术是将附加信息存储在隐藏的 div 中。效果也很好,并且预先使用 div 的隐藏类/样式不会引入加载时可见的数据片段。
脚本标签
通过阅读 HTML5 规范,我确信附加数据应该存储在标签内。这也提供了使用 src=""文件加载大量数据并将数据直接嵌入 javascript 的机会(Base64 编码字符串等)。也可以选择纯文本格式并将其直接写入脚本标记内。
考虑到所有这些选项,最常见的选项是什么?我可以对脚本标记中的任何数据格式使用 src 属性吗?服务器如何处理这些?
感谢您的阅读。
更新:
我需要将数据存储在 HTML 页面中。这是为了提供额外的数据来保存服务器/AJAX 请求。
一个很好的例子是有一个照片搜索网站,可以找到 10k 张照片。每张照片都有一个 ID。由于我们的网站很小,所以我们只有十亿张图片。使用 Base64 编码,我们用 5 个字节(6*5 = 30 位)存储每个 id。现在我们发送嵌入 HTML 页面的 10k * 5 = 50KB 附加信息。由于我们使用压缩的 HTML,所以这 50KB 可能值 30KB 左右,所以这不是一个大问题。
我们现在可以根据这些 ID 生成图片 URI/URL 链接。因此,当用户上下滚动结果列表时,只会请求图片,不会有额外的往返访问服务器,并且图片会利用 CDN 进行传递。
因为我不需要这个来拍摄图片,但想法是相似的。
最佳答案
这是一个有点 .NET 特定的答案,有点冗长和抽象,但希望你明白了。总的来说,我使用 JavaScriptSerializer 和辅助序列化器将 C# 中的对象转换为 JSON 或反序列化器将 JSON 转换为 C# 对象,只需一行代码即可在输出缓存中存储大量数据(如果可以)。
如果您热衷于 .NET,可以在这里找到它:
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer%28v=vs.110%29.aspx
现在的优点是数据完全是 JSON 格式,换句话说,它完全可以被 JS 使用。我通常只是将其存储在像 Data
这样的全局变量中(或者这些行中的某些内容,在我的情况下实际上很少是全局变量)。
这意味着如果我在服务器端有一个复杂的数据结构,我可以简单地在客户端调用相同的结构,而不需要额外的努力。此外,当结构发生变化时(我经常发生这种情况),JSON 数据结构也会更新,我只需要考虑如何处理新数据。或者基本上维护代码变得相当轻松。这也使得服务器端和客户端的通信更容易、更灵活,但你真的应该亲自尝试一下才能理解我的意思。
所以基本上我的建议是使用某种序列化器将 JS 中的数据存储在 JSON 格式的全局变量中,这使得服务器端和客户端编程变得更容易、更灵活,并且花费最少的精力。
关于javascript - 在脚本/注释/隐藏 Div 中存储附加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20011659/