2012-03-14 3 views
0

Я работаю в среде портала. Я хочу, чтобы несколько портлетов использовали некоторые распространенные модули YUI. Я также хочу, чтобы портлеты были на 100% автономными. Другими словами, я не хочу, чтобы JUI.add вызывал универсальный JS на уровне портала.Безопасно ли вызывать YUI.add для одного и того же модуля более одного раза на одной странице?

Итак, каждый портлет имеет копию того же JS-кода (добавленный процессом сборки из общей зависимости, я не вручную держите код в синхронизации по портлетам). Если на одной странице находится несколько портлетов, это означает, что каждый из них будет вызываться YUI.add. Это вызовет проблемы? Я мог бы поместить все JS в отдельный сервлет и позволить динамическому загрузчику YUI позаботиться об этом, но это приведет к внешней зависимости. Для того, чтобы портлетов для работы, сервлет должен быть развернут ...

ответ

0

YUI отслеживает модули, которые уже загружены:

http://yuilibrary.com/yui/docs/api/files/yui_js_yui.js.html#l568

Everytime вы называете YUI.add( на МОДУЛЬ перебирает экземпляры YUI и проверяет, загружены ли они еще модулем. Если экземпляр не загрузил модуль, метод add предлагает модуль загрузчику экземпляра.

Так что есть крошечные накладные расходы, излишне вызывающие add, но это не серьезно.

+0

спасибо, вот как я тоже прочитал код, меня просто беспокоило, что 'env.mods [name] = mod;' on line [560] (http://yuilibrary.com/yui/docs/ api/files/yui_js_yui.js.html # l560) слепо добавлял новое определение модуля в глобальный объект 'YUI.Env', не проверяя, был ли он уже определен. Можно ли предположить, что нет никаких отрицательных побочных эффектов? – Lucas

+0

@Lucas Пока все ваши избыточные вызовы 'add' идентичны, я не вижу никаких отрицательных побочных эффектов. Это просто назначение ~, так что даже меньшие накладные расходы, чем цикл через экземпляры YUI. – Shad

+0

, чтобы они оставались одинаковыми ... вот что я подумал. Хотя это делает вещи немного сложнее, так как теперь, если портлет обновляется с более новой версией этого модуля, все остальные портлеты на этой странице также должны быть обновлены, поскольку он помещает определение по имени и игнорирует номер версии ... не такой портативный, как хотелось бы, но, похоже, у меня нет выбора. Угадайте, что я могу проверить YUI.Env самостоятельно, прежде чем называть add, но это похоже на то, что должно быть в рамках ... – Lucas

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