2010-08-24 2 views
6

Helo,Удалить ненужные функции jQuery

Библиотека, подобная jQuery, полностью загружена и поставляется со многими функциями, которые мы не можем использовать в наших скриптах. Интересно, есть ли способ сказать, что мой скрипт узнает все функции jQuery, которые я использую, и его зависимости, а затем удалить оставшиеся функции из библиотеки jQuery. Это может быть применено практически к любой библиотеке и на самом деле не является специфическим для jQuery вопросом.

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

+0

Хороший бог, позвольте спросить, почему? – jAndy

+0

Да, вы можете. У нас есть программное обеспечение, которое работает на тысячах сайтов, а код jQuery добавляется вместе с нашим кодом. Но по мере продвижения вперед мы хотим удалить ненужные части (поскольку мы едва используем какие-либо основные функции jQuery, кроме нескольких). Мы загружаем jQuery с помощью CDN, но нашим клиентам это не нравится. Они хотят все устраивать. Не спрашивайте меня, почему, как я не знаю. –

+0

Если вы придумали разумную стратегию кэширования, вы можете локально использовать весь файл jQuery, но кешируйте его так, чтобы вам не пришлось беспокоиться о стоимости загрузки/дополнительного HTTP-запроса. [Кэширование для веб-авторов и веб-мастеров] (http://www.mnot.net/cache_docs/) - отличный ресурс. –

ответ

2

Вы можете использовать closure compiler

кажется, делать то, что вы хотите.

1

jQuery не предлагает упакованные загрузки, такие как Prototype и MooTools, и их создание самостоятельно, вероятно, будет трудным, потому что вам придется разобраться во всех зависимостях вручную - и снова и снова для каждой новой версии jQuery.

Кроме того, в настоящее время размер gzip для 24kb для полной библиотеки, я ставлю его вам размер не имеет значения. Библиотека загружается только один раз - если вы загружаете ее из CDN, она получает централизованную кешировку, что делает ее осуществимой даже для медленных модемных соединений.

0

Это была бы плохая идея.

Во-первых, вы можете удалить флажок, скажем, InArray, поскольку вы можете использовать базовую альтернативу javascript, но другие методы, которые вы храните, могут полагаться на InArray.

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

Если вы действительно хотите сделать это, я бы так:

$M = MyjQuery = function(element,context) 
{ 
    this.fn = {} 
    this.extend = function(base,new) 
    { 
     //Extend them here 
    } 
} 

И начать с нуля!

2

Даже если я понятия не имею, почему, вы могли бы сделать это:

Перейти к http://github.com/jquery/jquery/blob/master/Makefile

Это является Makefile из Lib JQuery. jQuery разделяется на несколько модулей, которые объединены. Те, что base files заказаны в dependencys, soooo, вы можете очистить модули, которые вы не используете ...

Я не уверен на 100%, если это работает, никогда не пробовал это самостоятельно, но вы можете это сделать ,

+0

Даже если вы разделили на несколько файлов на стадии разработки, это не значит, что они могут работать как автономные, просто команда jquery организует там работников, например, команда данных будет работать на 'data.js' и так на, тогда у них будет куча тестировщиков, которые будут тестировать новые методы/функциональность. так что да, это просто процесс проектирования ничего более - хорошая ссылка, хотя :) – RobertPitt

+1

@RobertPitt: Я не знаю, это похоже на дерево зависимостей для меня. Порядок имеет смысл. Поэтому я действительно считаю, что вы могли бы просто удалить «Размеры», например. – jAndy

+0

Возможны варианты, так как другие объекты, такие как 'css' работают с' elem.offsetWidth', и такие, но удаление подпакетов, таких как css, может вызвать огромные проблемы, поскольку оно используется во всей библиотеке! - не говоря уже о добавленных новых библиотеках, они пострадали бы также :( – RobertPitt

1

Если ваш JavaScript не очень динамичный, вы можете дать Closure Compiler выстрел.

Собирают все Ваш JavaScript в одном месте (в том числе Jquery, плагины, другие библиотеки, все) и кормить его ССАГПЗ, используя расширенный вариант компиляции.

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

Простой пример такого рода оптимизации компилятор делает это:

function hello(name) { 
    alert('Hello, ' + name); 
} 

hello(); 

будет получить снижается до:

alert("Hello, undefined"); 

, так что это все, что в основном происходит.