Javascript 如何在不使用for的情况下使用类型化数组? var sendBuffer=newarraybuffer(4096); var dv=新数据视图(sendBuffer); dv.setInt32(01234); var服务=svcName; 对于(变量i=0;i

Javascript 如何在不使用for的情况下使用类型化数组? var sendBuffer=newarraybuffer(4096); var dv=新数据视图(sendBuffer); dv.setInt32(01234); var服务=svcName; 对于(变量i=0;i,javascript,html,buffer,bytearray,Javascript,Html,Buffer,Bytearray,如何在不使用for loop的情况下进行此项训练。for()循环在处理大量数据时会降低性能。在javascript中,for()循环与其他操作相比非常紧凑和高效。在每个排列上按顺序执行此操作(即,摆脱for()循环)将是不雅观的,也不会为您节省很多周期 如果某个操作可能导致客户端停止,则需要将问题分解为更小的组件,并向用户发出警告,说明执行该操作需要一些时间 我建议将此操作拆分为更小的块,而不是尝试寻找另一个不用于()的算法 可能与此类似,使用回调可以防止代码阻塞: var sendBuffer

如何在不使用for loop的情况下进行此项训练。for()循环在处理大量数据时会降低性能。

在javascript中,for()循环与其他操作相比非常紧凑和高效。在每个排列上按顺序执行此操作(即,摆脱for()循环)将是不雅观的,也不会为您节省很多周期

如果某个操作可能导致客户端停止,则需要将问题分解为更小的组件,并向用户发出警告,说明执行该操作需要一些时间

我建议将此操作拆分为更小的块,而不是尝试寻找另一个不用于()的算法

可能与此类似,使用回调可以防止代码阻塞:

var sendBuffer = new ArrayBuffer(4096);
var dv = new DataView(sendBuffer);
dv.setInt32(0, 1234);
var service = svcName;
for (var i = 0; i < service.length; i++) 
{
    dv.setUint8(i + 4, service.charCodeAt(i));
}
ws.send(sendBuffer);
var split=service.length/4;
函数alpha(拆分、定位、回调){
对于(变量i=split*(位置-1);i

这是一种极为简化的解决方案,并不是实现此解决方案的最佳方式。但它将使您有机会优化正在进行的处理,并根据其他操作对操作进行优先级排序。

根据评论,您真正的问题是,循环将使您的UI阻塞

上面的拆分答案并没有提供一种防止阻塞的正确方法。Javascript主线程中所做的一切都将阻塞UI

您需要使用Web Workers(单独的线程)来处理数据,以便处理不会阻塞UI线程:


使用postMessage()将数据发布到单独的辅助线程进行处理,然后使用另一个postMessage()将结果数据发布回主线程.

for循环本身并不慢,而是在for循环中所做的事情。使用不同类型的循环遍历数据不会更快。缓存
长度将使其更快。
for(var i=0,l=services.length;iSeries设备数据巨大,因此在使用此aproach时会造成ui阻塞,浏览器将拖出.Perfect,然后像我向您展示的那样将其拆分。这将防止浏览器因可怕的“此页面已停止响应”消息而停止运行。:)像这个答案中那样拆分处理不会阻止页面停止响应。在那里,我向代码中添加了回调,这将阻止这种情况。
var split = service.length/4;
function alpha(split, position, callback) {
  for (var i = split*(position-1); i < split*(position); i++) {
    dv.setUint8(i + 4, service.charCodeAt(i));}
  if(callback && (typeof(callback) == 'function') {
    callback();}
}

var split = service.length/4;
alpha(split, 1, function() {
  // poll here for other information or to confirm user wishes to proceed
  alpha(split, 2, function() {
    // poll here for other information or to confirm user wishes to proceed
    alpha(split, 3, function() {
      // poll here for other information or to confirm user wishes to proceed
      alpha(split, 4);}
  }
}