Web applications 最有效的方法;“保存”;简单网络应用程序';s状态到地址栏/无后端

Web applications 最有效的方法;“保存”;简单网络应用程序';s状态到地址栏/无后端,web-applications,urlencode,Web Applications,Urlencode,有一类简单的Web应用程序可以将您的工作“保存”到地址栏,而无需在后端存储任何内容。两个例子: 此功能的正确名称是什么 最有效的方法是什么?TypeScript会将代码复制到地址栏中,但这不是很有效。压缩数据怎么样 EDIT1:我的数据是JSON格式的 EDIT2:我想我的问题可以归结为什么样的压缩可以输出URL安全字符 EDIT3:与本地存储不同,“保存”到URL的目的是用户可以复制/粘贴状态。想一想一个打字稿,剪下来抄下来就这样回答 谢谢你的帮助 您可以使用简单的哈夫曼压缩和base64

有一类简单的Web应用程序可以将您的工作“保存”到地址栏,而无需在后端存储任何内容。两个例子:

此功能的正确名称是什么

最有效的方法是什么?TypeScript会将代码复制到地址栏中,但这不是很有效。压缩数据怎么样

EDIT1:我的数据是JSON格式的

EDIT2:我想我的问题可以归结为什么样的压缩可以输出URL安全字符

EDIT3:与本地存储不同,“保存”到URL的目的是用户可以复制/粘贴状态。想一想一个打字稿,剪下来抄下来就这样回答


谢谢你的帮助

您可以使用简单的哈夫曼压缩和base64对一些变量进行编码和解码。我还用它来保存我的一些应用程序变量,如页面、下拉选择、复选框。它的优点是将其压缩到一个地方,即一种状态,您甚至可以将其保存到一个文件中,并将其用作“断点”,甚至可以创建存档。在ajax应用程序中,它还提供了应用程序的浏览器历史记录和更好的桌面体验。可能性是无穷的。对于有经验的开发人员来说,这是最先进的,但在现实生活中我并没有看到很多。顺便说一句,我把它保存到一个隐藏的字段中,为了下载,我使用了一个特殊的用户。在地址栏中使用它可能会有风险,可能只是用于ajax历史记录。

是的,您可以使用哈希算法或任何其他URL哈希技术在URL中对web应用程序状态进行编码


但正如其他人所说,HTML5提供了更好的方法来保存应用程序状态。以下是。

我认为可以先使用压缩JSON字符串,然后使用内置的encodeURIComponent()函数对压缩字符串进行编码

下载库并指定它

<script language="javascript" src="lz-string.js"></script>
解码时,先用
decodeURIComponent()
解码,然后用
LZString.decompress(compressed)

LZString.compressToBase64()


compressToBase64生成ASCII UTF-16字符串,表示以Base64编码的原始字符串。这些字符可以安全地传输到浏览器之外,并保证生成的字符都不需要URL编码。可以使用decompressFromBase64进行解压缩。这通过每个字符只使用6位的存储空间来实现。因此,生成的字符串比压缩生成的字符串大166%。它仍然可以显著减少一些JSON压缩对象。

所以我想有一个用于huffman压缩的JS库?例如,它与LZV有何不同?你能告诉我更多关于你的实现吗?我不是一个压缩专家,但哈夫曼是一个统计压缩-它不同于lz系列。我还尝试了将move to front和burrow wheeler算法相结合,以获得更好的压缩效果,但没有效果。这取决于数据的压缩和速度。但是在客户端压缩它是没有意义的,因为你需要不压缩地发送它?所以,没有JS!但是你可以试试范围编码器?这是一些最好的统计压缩。我不知道我是否理解你。我想做客户端的一切,根本没有后端。我的webapp(基于JS)以JSON格式生成数据,我希望以URL安全格式输出到地址栏。您希望所有数据都是什么?这只是客户端的事情吗?无论如何,你可以在维基百科上找到几乎所有内容的伪代码。这是你的锻炼吗?出于好奇,是否需要保存到地址栏?您可以将脱离web的应用程序状态保存到HTML5本地存储中,但仍可以将所有内容保留在后端。这可能更容易使用,但您的用户无法(比如)单独从地址栏复制/粘贴其状态。与本地存储相反,“保存”到URL的要点是,用户可以复制/粘贴状态。想象一个复制到SO answer的类型脚本。但是你可以用一个唯一的id在服务器上保存应用程序状态。然后每次有人发送一个带有该id的链接时,你都可以恢复应用程序状态。JSFIDLE和许多复制粘贴站点(如pastebin)都使用这种方法
var string = JSON.stringify({attr: "This is my compression test."});
alert("Size of sample is: " + string.length);

var compressed = LZString.compress(string);
alert("Size of compressed sample is: " + compressed.length);

var getParam = encodeURIComponent(compressed);