Вопрос

Я строил Жизнь Конвея с JavaScript / jQuery, чтобы запустить его в браузере Здесь. Анкет Chrome, Firefox и Opera или Safari делают это довольно быстро, поэтому предпочтительно не используйте для этого. IE9 в порядке, хотя. Генерируя новые поколения жизни, я храню предыдущие поколения, чтобы иметь возможность пройти через историю. Это работает нормально до определенной точки, когда память не заполнится, что заставляет браузер (TAB).

Итак, мой вопрос: как я могу обнаружить, когда заполняется память? Я храню массив для каждого поколения в массиве, которая формирует историю поколений. Это требует огромного количества памяти, которая сбой в браузер через несколько тысяч поколений, в зависимости от доступной памяти. Мне известно о том, что JavaScript не может проверить объем доступной памяти, но должен быть способ ...

Это было полезно?

Решение

Я сомневаюсь, что есть способ сделать это. Даже если есть, это, вероятно, будет специфичным для браузера. Я могу предложить по -другому.

Вместо того, чтобы хранить все данные для каждого поколения, храните снимки, сделанные время от времени. Поскольку игра Conway в жизни детерминированная, вы можете легко перенаправить будущие кадры из данного снимка. Вы, вероятно, захотите сохранить буфер с несколькими кадрами, чтобы вы могли сделать перемотку красивой и гладкой.

На самом деле это на самом деле не решать Проблема, так как в конце концов у вас закончится пространство. Однако, если вы храните каждый n рамки, ваше заявление продлится n раз дольше, что может быть достаточно долго. Я бы порекомендовал вам наложить некоторые жесткие ограничения на то, как далеко в прошлое вы можете перемотать, чтобы у вас была ограничение на то, сколько вам нужно хранить. Определите, сколько кадров это будет (10 минут при 30 кадров в секунду = 18000 frames) Затем разделите frames По сколько кадров вы можете хранить (профилируйте различные веб -браузеры, чтобы выяснить это), и это интервал между снимками, которые вы должны использовать.

Другие советы

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

Итак, возьмите размер каждого объекта, хранящегося в массиве, умножьте на массивные размеры, и это размер одной итерации. Умножьте это на желаемое количество итераций, чтобы увидеть, сколько места он займет, и скорректировать соответствующим образом.

Или, вдохновленное Трэвисом, просто запустите шаблон в обратном направлении из последнего известного массива. В конце концов, это детерминированный.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top