小编Seb*_*ien的帖子

内存有效的方式来存储整数列表

我正在进行一些javascript 3D处理,并且我有非常大量的对象(比如对象A),每个对象包含一些东西和一组正整数,例如[0,1,4],[1,5 ,74,1013]等.它们不需要私有值,所有对象都可以共享相同的列表.数字可以从0到数千,比如说65k(短).

分析显示,阵列正在消耗大量内存.在计算时,我的程序达到了超过2GB的分配内存,这不是一些愚蠢的预优化.

我有2个用于内存优化的线索:

  1. 找到一种更有效的内存方式来存储thoses列表(也许是大数字位数?)
  2. 找到一些方法来避免重复.例如,我碰巧发现一些数组(如[0,1,2,3,4,5,6])存在于超过40 000个对象A中.也许存储数组在树结构中并制作我的对象指出它会有帮助吗?

你有什么建议吗?

编辑:我忘了提它,但重要的是:列表中的每个整数都是UNIQUE.EDIT2:唯一需要检索的是整数的SET,顺序并不重要.

我正在考虑使用按位运算将thodes数组转换为"Big Integers",即使用某个类创建Big Integer,设置位1,5,74,1013,将big int转换为字符串(8字节的数组)并存储字符串,但它并不总是一个增益(例如,数组[4000]将表示为一个500字节长的字符串......)

项目范围(没用,但我被要求了)

这应该是无用的回答这个问题,但我已经多次被要求了,我把它放在这里.

我正在构建一个体积庞大的三维网格物体,为了简化,让我们假设我有很多球体.我知道他们的位置(中心,光线),我想在一个3D网格中绘制它们.为此,我有一个称为八叉树的记忆结构,允许我在我的对象表面周围的较低单元格(八叉树节点)中划分3D空间.然后我可以从细胞中构建网格.

Those单元格在我的描述中称为对象A. 每个单元格包含一个id列表(正整数),指向单元格相交的Sphere对象.

事实是,分析显示,单元格阵列在内存中保留了数百MB.我想减少这个数字,通过找到一种方法来删除所有重复项和/或如果可能的话,找到一种更有效的方法来存储肯定的id列表(可以从0到65k).

javascript arrays optimization integer

12
推荐指数
1
解决办法
2123
查看次数

将容器div的宽度与浮动div的总和对齐

我有以下html:

<div class="main_container">
    <div class="sub_container">
        <div class="floating">wookie1</div>
        ...
        <div class="floating">wookie5</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

考虑它就像一个图库.

main_container具有不固定的大小,它被设置为用户分辨率的百分比.我希望sub_container具有浮动div总和的确切宽度.

如果我使用"display:table;" for sub_container和"display:inline-block;" 对于浮动div,它工作正常:

在此输入图像描述

直到我在列表中有足够的div,以便宽度的总和大于main_container并且它们在下一行中断:

在此输入图像描述

但是,我仍然希望子容器(黄色背景)始终是div总和的完全宽度,即使它们在多行上都是这样的,如下所示:

在此输入图像描述

我现在用谷歌搜索了几个小时,并且无法找到一个优雅的解决方案(如果可能的话,仅限css.)

这是jsfiddle,玩这个.

html css list width

9
推荐指数
1
解决办法
3574
查看次数

我可以使用什么键盘快捷键而不与现代浏览器冲突?

我正在开发一个Web应用程序,我打算使用鼠标和一些键盘快捷键,如果可能的话,使用模态键(Ctrl/ Shift/ Alt).

我注意到与现代浏览器/操作系统存在很多冲突.以下是您可能知道的一些示例:

  • Ctrl+S
  • Ctrl+F
  • Shift+ R:刷新firefox上的页面
  • Alt+ 左键单击:在linux上移动一个窗口
  • Ctrl+ J:打开chrome中的下载选项卡

我无法找到我可以在我的应用程序中安全使用的快捷键(使用模态键).是否有一个规则要遵循的列表?

compatibility keyboard-shortcuts cross-browser shortcut web

9
推荐指数
1
解决办法
646
查看次数

在javascript中清空普通对象的最有效方法是什么?

如前所述这里,似乎清空现有阵列(不是分配一个新的)JavaScript中的最有效的方法是使用:

array.length = 0;
Run Code Online (Sandbox Code Playgroud)

相同的操作是否适用于普通对象?(又名"关联数组"或"字典")如果没有,清空现有javascript对象的最有效方法是什么?

我认为分配一个新的不是最好的选择,因为它会将一些额外的工作推送到垃圾收集器,并在堆上分配一些新的内存,但我可能错了.

我需要一个至少适用于Chrome和Firefox的解决方案.

javascript arrays performance dictionary clear

8
推荐指数
1
解决办法
2万
查看次数

Chrome WebKitBlobBuilder不会附加数据

我正在通过ajax请求实现一些文件上传功能.我希望能够在一个ajax调用中发送多个文件,所以我决定使用FormData.

我试图将我的二进制数据字符串直接附加到FormData(并且它可以工作),但Content-Disposition没有文件名属性:Content-Disposition:form-data; NAME = "文件1"

w3c说我需要将一个blob对象附加到formdata以具有该属性(或者能够使用FormData.append()的3rd属性设置它)

我写了以下代码:

function uploadAsBinary() {
    var xhr = new XMLHttpRequest();
    var fd = new FormData();

    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
    var bb = new window.BlobBuilder();
    bb.append("this is my binary content");
    var blob = bb.getBlob("text/plain"); 

    fd.append("file1", blob, "file1");

    xhr.open("POST", "/mb/0/", false);
    xhr.send(fd);
}
Run Code Online (Sandbox Code Playgroud)

它与firefox完全兼容,但是使用谷歌浏览器(v16和v17),请求有效负载是一个没有内容的formdata:

------WebKitFormBoundaryVkgESMAGtmPMlPZ7
Content-Disposition: form-data; name="file1"; filename="file1"
Content-Type: text/plain


------WebKitFormBoundaryVkgESMAGtmPMlPZ7--
Run Code Online (Sandbox Code Playgroud)

我也尝试通过ArrayBuffer填充blob,结果相同.我已经在网上冲浪了2天,我找不到答案.我在Android上发现了一个未解决的问题(http://code.google.com/p/android/issues/detail?id=22441),但它似乎已经死了.

这是一个真正的铬问题吗?有人对此有所了解,还是应该在铬跟踪器上打开一个问题?

谢谢你的帮助!

javascript ajax binary webkit xmlhttprequest

5
推荐指数
1
解决办法
4663
查看次数

控制javascript异步流的速率(在循环中)

假设您要在短代码中为列表中的每个文件夹启动(随机)进程:

var exec = require('child_process').exec;
var folders = [...]; // a list from somewhere

_.each(folders, function(folder) {
    exec("tar cvf " + folder + ".tgz " + folder);
});
Run Code Online (Sandbox Code Playgroud)

如果列表很长,我可能最终会同时运行大量进程,这是应该避免的.以受控速率运行执行的相当简单的方法是什么(这里最多5个并发进程)?

编辑:该问题适用于各种异步流(您要在其中控制速率),而不仅仅是针对exec-over-folders问题.

javascript loops asynchronous exec

5
推荐指数
1
解决办法
146
查看次数

如何有效地将THREE.Geometry转换为ArrayBuffer,File或Blob?

我想移动一段我的代码,我在其中构建一个THREE.Geometry对象到HTML5 Web Worker.

因为我不想将它序列化为字符串(出于明显的性能目的),我想将它转换为可传输的对象,如ArrayBuffer,File或Blob,所以我可以"通过引用"传递它.

您是否知道将THREE.Geometry转换为其中一个对象的有效方法?

javascript performance web-worker three.js arraybuffer

3
推荐指数
1
解决办法
1970
查看次数