2010-08-24 14 views
6

Helo,Eliminar funciones de jQuery no deseadas

Una biblioteca como jQuery está completamente cargada y viene con muchas funciones que no podemos usar en nuestros scripts. Me pregunto si hay una forma de decir "leer mi script", averigüe todas las funciones de jQuery que estoy usando y sus dependencias y luego elimine las funciones restantes de la biblioteca de jQuery. Esto podría aplicarse a prácticamente cualquier biblioteca y no es realmente una pregunta específica de jQuery.

Hágame saber sus ideas sobre cómo esto se puede lograr. Sé que puede ser un dolor de cabeza más tarde si digo que agrego una función nueva a mi código y la función no existe en jQuery. Pero estoy dispuesto a correr ese riesgo.

+0

Dios mío, ¿puedo preguntar por qué? – jAndy

+0

Sí, puede. Tenemos un software que se ejecuta en miles de sitios, y el código jQuery se agrega junto con nuestro código. Pero a medida que avanzamos queremos eliminar las partes innecesarias (ya que apenas utilizamos algunas de las funciones básicas de jQuery, excepto algunas). Hemos estado cargando jQuery usando CDN, pero a nuestros clientes no les gusta. Quieren auto-acoger todo. No me preguntes por qué, ya que no sé. –

+0

Si se le ocurre una estrategia sensata de almacenamiento en caché, puede servir el archivo jQuery completo localmente, pero almacenarlo en la memoria caché para que no tenga que preocuparse por el costo de la descarga/solicitud HTTP adicional. [Tutorial de almacenamiento en caché para autores web y webmasters] (http://www.mnot.net/cache_docs/) es un gran recurso. –

Respuesta

1

jQuery no ofrece descargas empaquetadas como Prototype y MooTools, y construirlas usted mismo probablemente será difícil, ya que tendría que ordenar todas las dependencias manualmente, y una y otra vez para cada nueva versión de jQuery.

Por otra parte, actualmente con 24kb de tamaño comprimido para la biblioteca completa, lo pongo a su medida. Realmente no importa. La biblioteca se carga solo una vez; si la carga desde el CDN, se almacena en caché centralmente, lo que es factible incluso para conexiones lentas de módem.

0

Esto sería una mala idea.

En primer lugar es posible que desee eliminar, digamos InArray, ya que puede utilizar una alternativa base javascript, pero otros métodos que guarde pueden depender de InArray.

Básicamente, los métodos de jQueries se utilizan mutuamente para completar tareas, esta es una de las formas en que mantienen reducido el tamaño de los paquetes.

Si realmente quieres hacer esto lo haría así:

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

y empezar de cero!

2

Incluso si no tengo idea de por qué, usted puede hacer esto:

Ir a http://github.com/jquery/jquery/blob/master/Makefile

Ese es el makefile de la lib jQuery. jQuery está dividido en varios módulos, que se unen. Esos base files se ordenan en dependencias, por lo que puede pelar los módulos que no está usando ...

No estoy 100% seguro de que si eso funciona, nunca lo intenté por mi cuenta, pero puede dar una oportunidad .

+0

Incluso si se dividen en varios archivos para las etapas de desarrollo no significa que puedan ejecutarse de manera independiente, solo el equipo de jquery organiza a los trabajadores, por ejemplo, el equipo de datos estaría trabajando en 'data.js' y así en adelante, entonces tendrían un grupo de probadores que evaluarían los nuevos métodos/funcionalidad. así que sí, es solo un proceso de diseño, nada más, buena referencia :) – RobertPitt

+1

@RobertPitt: No lo sé, parece un árbol de dependencias para mí. El orden tiene sentido. Así que realmente creo que podrías eliminar las "Dimensiones" por ejemplo. – jAndy

+0

las dimensiones pueden ser posibles ya que otras entidades como 'css' funcionan con' elem.offsetWidth' y tal, pero la eliminación de subpaquetes como css causaría grandes problemas a medida que se usa en toda la biblioteca. - sin mencionar las nuevas bibliotecas añadidas, también sufrirían :( – RobertPitt

1

Si su JavaScript no es muy dinámico en la naturaleza, a continuación, le puede dar la Closure Compiler un tiro.

Reunir todos su código JavaScript en un solo lugar (incluyendo jQuery, plugins, otras bibliotecas, todo) y alimentar a gcc usando la opción de compilación avanzada.

Esto eliminará todas las funciones no utilizadas que pueden romper su código. Solo recomendaría esto si tiene casos de prueba o si su JS es lo suficientemente pequeño como para probarlo completamente.

Un simple ejemplo de la clase de optimización del compilador hace es:

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

hello(); 

obtendrá reducida a:

alert("Hello, undefined"); 

ya que es básicamente todo lo que se sucede.

Cuestiones relacionadas