2009-12-29 3 views
0

Все мои проекты включают в себя очень похожие задачи, и совсем недавно я думал, что должен написать библиотеку для обработки большей части тяжелой работы, поэтому я могу написать короткий, простой и удобный для чтения код, который взаимодействует с библиотекой, чтобы получить рабочие места. Рассматривая другие структуры, в частности jQuery & YUI, они работают по-разному. Как правило, jQuery расширяет &, упрощая DOM с помощью глобального объекта/функции, тогда как YUI использует пространства имен и модули. Я понимаю, что это потому, что у них разные цели, так как библиотеки и каждый из них имеет свои достоинства.Каков наилучший способ написать портативную Javascript-библиотеку?

Наиболее конкретно, я ищу ответы на следующие вопросы:

  1. Является ли это лучше использовать пространство имен, например gui.scrollbar.attach(), или глобальный метод, такой как $(domObj).attachScrollbar()?
  2. Лучше ли включать отдельные части в отдельные файлы js или как один файл js, где компоненты скопированы/вставлены? Я знаю, что в SDK приложения eBay Shopping API есть много .js-файлов в отдельных папках, не пострадает ли это от значительного повышения производительности?
  3. Есть ли другой совет, который вы бы дали кому-то, кто хочет создать javascript-библиотеку?

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

Благодаря

EDIT я должен быть первоначально заявил, что я не заново изобретать колесо, я ищу, чтобы упростить много общих задач между Windows Desktop Gadgets, так что я не нужен кросс-браузерная совместимость других библиотек и их основная функциональность действительно не применимы к тому, что я делаю. Я попытался сохранить общий вопрос, а не конкретно касаться настольных гаджетов, чтобы этот вопрос был полезен для других.

ответ

3

Простой ответ на ваш вопрос: напишите свою библиотеку , используя существующую.

У меня есть файлы javascript, написанные в jQuery только для таких целей.

Более конкретно,

  1. Если вы собираетесь объекта Java-стиль ориентированной Несс, идти на пространствах имен. Я предпочитаю использовать jQuery для написания плагинов.
  2. Если вы пишете собственный «инструментарий», лучше всего скопировать и вставить зависимости (мини) в исходный код. Таким образом
    a. вы избегаете накладных расходов, которые вы упомянули
    b. вы предотвращаете излишние зависимости, ползущие извне.

Cheers!

0

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

С точки зрения некоторые из ваших вопросов:

  1. Это действительно вопрос предпочтений ИМО. Пока вы получаете свои функции из глобального пространства имен, это главное. Тем не менее, этот выбор дизайна приведет многих других к линии.
  2. Лучше всего включить все основные функциональные возможности в один файл, а затем разместить остальные в файлы, необходимые для небольшой функциональности. Вы хотите, чтобы количество файлов было вниз, но вы также не хотите, чтобы пользователь загружал много вещей, которые им не нужны.

Сказав все это, я повторяю, что вы должны посмотреть на использование одной из уже имеющихся библиотек, если у вас нет оснований для этого. Имейте в виду, что вам нужно будет протестировать во всех старых браузерах, а также в любых новых браузерах. jQuery, YUI, Prototype, Mootools, extJS являются одними из самых популярных

+0

Я ожидал, что ol '' re-inventing the wheel "ответит и, вероятно, должен был упомянуть, что мне не нужна совместимость с x-браузером, и эта структура специально не предназначена для веб-страниц par se. –

1

Что касается вашего первого вопроса, два варианта - это действительно то же самое ИМО. Вместо глобального объекта, такого как YAHOO или gui, у вас есть глобальная функция типа $. В обоих случаях у вас есть глобальная переменная, которая содержит ваше пространство имен.

+0

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

+0

Да. Я бы добавил, что наиболее важно, чтобы вы не просачивали элементы в глобальное пространство имен: есть одна точка входа. –