javascript – 大数字阵列压缩
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 大数字阵列压缩,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2705字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 大数字阵列压缩](/upload/InfoBanner/zyjiaocheng/812/312fd795e8054c0bb91535ca43b4316d.jpg)
我有一个javascript应用程序,可以通过网络发送大量的数字数据.然后将该数据存储在数据库中.我有尺寸问题(带宽太大,数据库太大).我现在准备牺牲一些压缩性能.
我正在考虑实现一个base 62.toString(62)和parseInt(压缩,62).这肯定会减少数据的大小,但在我继续这样做之前,我想我会把它放在这里的人们,因为我知道必须有一些我没有考虑过的解决方案.
基本规格如下:
– 将大量数组压缩为JSONP传输的字符串(所以我认为UTF已经出局)
– 相对较快,看起来我并不期待与现在相同的性能,但我也不想要gzip压缩.
任何想法将不胜感激.
谢谢
Guido Tapia
解决方法:
另一种方法可能是编码为二进制类型,如有符号/无符号整数,并在http://snippets.dzone.com/posts/show/685手动解码,这需要服务器端代码来创建二进制数据.
然后你可以使用霍夫曼压缩或类似RLE的东西(参见http://rosettacode.org/wiki/Run-length_encoding#JavaScript的实现,尽管它可能在IE中有一些问题而不修改)来进一步压缩数据.
编辑:
或者,您可以将数字本身转换为未编码的URI字符范围(参见http://en.wikipedia.org/wiki/Percent-encoding)中的基数(基数),如果许多数字大于2位,则该数字应该可以正常工作.我在http://code.activestate.com/recipes/111286-numeric-base-converter-that-accepts-arbitrary-digi/从python转换代码来执行此操作.
它目前不处理浮动,但它可以很容易地完成:
function get_map(s) {
d = {}
for (var i=0; i<s.length; i++) {
d[s.charAt(i)] = i}
d.length = s.length
d._s = s
return d}
var separate_with = '~';
var encodable = get_map('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.'); // - is reserved for negatives obviously :-P
var base10 = get_map('0123456789')
// UNCOMMENT ME for length/speed testing in a wider base!
// You may wish to experiment with the ranges for a happy medium between bandwidth and DB space :-P
/*var encodable = ''
for (var i=1; i<128; i++) {
encodable += String.fromCharCode(i)
}
encodable = get_map(encodable)*/
function baseconvert(number, fromdigits, todigits) {
var number = String(number)
if (number.charAt(0) == '-') {
number = number.slice(1, number.length)
neg=1}
else {
neg=0}
// make an integer out of the number
var x = 0
for (var i=0; i<number.length; i++) {
var digit = number.charAt(i)
x = x*fromdigits.length + fromdigits[digit]
}
// create the result in base 'todigits.length'
res = ""
while (x>0) {
remainder = x % todigits.length
res = todigits._s.charAt(remainder) + res
x = parseInt(x/todigits.length)
}
if (neg) res = "-"+res
return res
}
function encodeNums(L) {
var r = []
for (var i=0; i<L.length; i++) {
r.push(baseconvert(L[i], base10, encodable))
}
return r.join(separate_with)
}
function decodeNums(s) {
var r = []
var s = s.split(separate_with)
for (var i=0; i<s.length; i++) {
r.push(parseInt(baseconvert(s[i], encodable, base10)))
}
return r
}
var test = [5, 654645, 24324, 652124, 65, 65289543, 65278432, 643175874158, 652754327543]
alert(encodeNums(test))
alert(decodeNums(encodeNums(test)))
内容总结
以上是互联网集市为您收集整理的javascript – 大数字阵列压缩全部内容,希望文章能够帮你解决javascript – 大数字阵列压缩所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。