2016-12-18 4 views
0

В настоящее время я пытаюсь реализовать небольшое моделирование жидкости на P5js. Я попытался отобразить квадраты 20К со случайным цветом. Я получил частоту кадров 2.xxx.Является ли javascript недостаточно быстрым для моделирования жидкости?

var sim; 
var xdim = 200; var xLength; 
var ydim = 100; var yLength; 

function setup() { 
    createCanvas(800,400); 
    sim = new Sim(xdim, ydim); 
} 

function draw() { 
    xLength = width/xdim; 
    yLength = height/ydim; 
    for (var i = 0; i < xdim; ++i) for (var j = 0; j < ydim; ++j) { 
    fill(100); 
    rect(i*xLength, j*yLength, xLength, yLength); 
    } 
    console.log(frameRate()); 
} 

В чем проблема? Является ли библиотека недостаточно хорошей? Или плохая конфигурация моего компьютера? Или javascript не подходит для таких видов реализации?

+0

Есть более эффективные способы написания обратного вызова, сначала вы никогда не должны вызывать функции console.log и framerate в том, что вы ожидаете запускать с частотой 60 Гц. Во-вторых, вы перекомпонуете прямоугольники, которые не должны меняться между кадрами, каждым кадром. Вероятно, проблема связана с вашей собственной реализацией, включая код, который вы пренебрегли предоставлением. – softwarenewbie7331

ответ

1

Мы не можем отладить ваш код без MCVE. В частности, вы не предоставили класс Sim, поэтому мы не можем запускать ваш код вообще.

Но вам нужно сделать шаг назад и спросить себя: какое вы ожидаете? Вы не можете жаловаться на производительность, если у вас не было никаких ожиданий.

Кроме того, вам может понадобиться выяснить, сколько квадратов вы можете отобразить, прежде чем увидеть удар производительности.

Оттуда это игра в поисках оптимизаций. Вам нужно будет сделать какое-то профилирование, чтобы понять, где именно ваша производительность. Возможно, вы показываете меньше квадратов, или, может быть, вы понижаете частоту кадров, или, может быть, вы делаете предварительный рендеринг. Опять же, то, что вы делаете, зависит от ваших ожиданий и целей.

Я скажу, что вы должны ответить на этот звонок console.log() из вашей петли draw(). Вы должны использовать это только для отладки, и это не улучшит вашу производительность, чтобы называть это каждый отдельный кадр.