Javascript: передача больших наборов данных для нескольких функций - PullRequest
1 голос
/ 18 апреля 2011

Я использую YUI3-виджеты, но для вас, ребята из jquery, просто представьте, что мы говорим о плагинах.У меня есть большой набор данных JSON с более чем 5000 записей в нем.В моих приложениях у меня есть как минимум 5 виджетов, которым нужен доступ к моему набору данных.В настоящее время я встраиваю json в html и беру его с помощью YUI3 при загрузке страницы, прежде чем рендерить мои виджеты.

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

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

Это то, что вы будете делать?Пожалуйста, дайте мне знать ваши мысли и как вы могли бы настроить что-то подобное.

Спасибо за ваш (положительный) вклад!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Если вы храните «набор данных» в отдельном отдельном файле .js, который определяется следующим образом:

// My Huge Data Set
// Author: bababa
//
(function(window) {
  window['hugeDataSet'] = {
    // millions of lines of stuff
  };
})(this);

, то при импорте с простым тегом <script> или сзагрузчик скриптов, будет только одна глобальная копия данных.Вы можете сослаться на это так:

someWidget.doSomething(hugeDataSet);

, и это не сделает копию данных.Конечно, вы можете поместить данные в HTML, <script> в вашем HTML, но тогда они не будут кэшироваться, если ваш HTML генерируется серверным шаблоном (например, php или jsp или любым другим).

0 голосов
/ 18 апреля 2011

Нужен ли вашему виджету доступ ко всем 5000 записям каждый раз?Или им требуется только определенное подмножество ваших данных?

Мне кажется, что вы пытаетесь использовать json, здесь есть альтернатива для базы данных.

Наиболее вероятное решение - поместить ваши данные в соответствующую базу данных, запросить необходимые данные с помощью серверного сценария и отправить эти данные обратно в ваш виджет.

Синтаксический анализ текста оченьмедленный по сравнению с запросом к базе данных.

...