2013-08-23 5 views
0

Что такое хорошая практика или «правильная» практика в JavaScript, когда вам нужно уничтожить данные и поместить новые данные?создать новый объект? или повторно использовать существующий?

Я использую память Dojo и dGrid для отображения моих данных. данные извлекаются каждый раз, когда пользователь нажимает кнопку «Обновить».

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

data = {some JSON data}; 
store = new Memory({data: data}); 

grid = new OnDemandGrid({ 
    selectionMode: 'single', 
    store: store 
}); 

и код выше в настоящее время запуска в методе, который инициализирует приложение.

и у меня есть другой метод под названием 'showGrid', который будет определять макет сетки.

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

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

Тогда почему бы мне просто не создать хранилище в методе 'showGrid' и позволить ему создавать хранилище каждый раз, когда пользователь нажимает кнопку «Обновить»? Скорость или память не являются большой проблемой в приложении, поскольку данные не такие большие.

Но я хочу достичь этого с точки зрения «правильного пути», потому что я узнал, что создание новых объектов, когда оно многократно используется, важно в мои юни-дни (хотя это был Java-класс, а не JavaScript).

Заранее спасибо :)

+0

Также я хотел бы знать, есть ли лучший способ уничтожить Dojo/Object Store/Memory. –

ответ

1

Ну, чтобы ответить на вопросы как можно более непосредственно:

Это действительно не до додзё, чтобы освободить память; это зависит от JavaScript, на котором построен Dojo.

Чтобы освободить память в JavaScript, вы просто удалите любые ссылки на данные, и JavaScript очистит мусор самостоятельно ... так что правильный способ освободить объект, который вы сделали, просто:

grid = null; 

Это должно устранить эту ссылку и любые другие ссылки на одни и те же данные.

Что касается «хорошей практики» для очистки и перезаписи данных ... Я вообще агностик.

Вы можете удалить старый и создать новый ... или просто перезаписать этот ... даже в относительно большом приложении, я не думаю, что вы увидите большую часть производительности или получите либо путь.

Исключение было бы, если бы у вас была достаточно большая сетка данных, чтобы взять большой кусок памяти и попытался создать новую, прежде чем удалять старый. Но это растяжение.

В этом случае уродливые оптимизации не смогут повысить производительность в любой степени и будут стоить вам времени на разработку и устранение неполадок.

Если честно, я обычно выбираю наиболее читаемое решение, а затем оптимизирую (только при необходимости) по дороге.

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

+0

Прошу прощения, что в моем вопросе я пропустил какой-то код. Память хранит некоторые данные во время его создания. Но я думаю, что вы ответили на это. Я просто протестировал store.data = null и, похоже, работает. хотя я думаю, что это немного жесткое кодирование. –

+0

Имейте в виду, что JavaScript обрабатывает большинство вещей как ССЫЛКИ ... поэтому, если вы сделали многочисленные ссылки на «сетку», то все остальные ссылки относятся к тому же самому пространству в памяти. Очистка этого пространства в памяти очищает их все. – Steve

+0

Вы правы. Но поскольку на стороне сетки нет наблюдения, что данные в хранилище были установлены равными нулю, сетка не вызывает метод .update(), чтобы очистить отображение сетки. Я думал, что должно быть что-то, что делает работу в Dojo/store. В любом случае спасибо за ваш ответ! :) –

Смежные вопросы