2010-02-11 13 views
5

En lugar de presionar la base de datos cada vez que alguien escribe un carácter en el cuadro de búsqueda, quiero crear archivos .js estáticos.20K productos que usan autocompletado, quieren crear archivos javascript estáticos

Cuáles son algunas de las técnicas que puedo usar para crear archivos .js estáticos que básicamente son matrices para cargar el complemento de autocompletado de jquery.

Mi producto interfaz de SKU como:

ABC1234 

o

Alpha Beta C 1234 

(abc es la forma abreviada del nombre del fabricante, mientras que 'Alpha Beta C' es la forma larga, seguido de 3 -4 números).

+0

Solo 20,000?!?! –

Respuesta

2

Este es un gran uso para JSON. Notación de objetos Javascript. Solo puede incluir los archivos JS y tendrá todos sus datos en objetos.

http://www.json.org

var products = [{sku:'aaaa', price: 50}, {sku:'bbbb', price: 60}]; 

favor mi sintaxis, que es de la memoria.

+0

Dependiendo de las restricciones de ancho de banda y la longitud de cada nombre de producto, esa carga de la primera página podría ser un doozey. –

+0

Definitivamente me aseguraré de que el cargador de scripts js esté en la parte inferior de la página. –

+1

Eso es verdad. Lo que podría querer hacer es colocar el archivo JSON en la parte posterior de una llamada AJAX. De esta forma, no está cargando toda la base de datos en la página en tiempo de ejecución y tampoco está accediendo a la base de datos cada vez. Esto funcionaría a menos que su base de datos de productos se actualice constantemente. – chamiltongt

1

También puede enviar todas las posibilidades restantes en JSON mediante una llamada AJAX solamente después de 2/3 teclas y extraer los resultados restantes de ese objeto/matriz (no sé si JQuery admite este comportamiento). Esto ahorra ancho de banda, ya que no toda su base de datos debe enviarse al cliente, y no tiene que llamar a la base de datos más de una vez (generalmente, si las primeras claves son correctas).

No estoy seguro de si su pregunta es también del lado del servidor relacionado (ni qué lado del servidor tecnología que usa), por lo que sólo FYI, echar un vistazo a PHP's JSON functions (especialmente json_encode) para leer más sobre él.

+0

Sí, enviar una cuasi-base de datos JS al cliente suena doloroso –

0

Puede construir una máquina de estados finitos minimizada (por ejemplo, un DAWG) que contenga los nodos finales para todos sus códigos de producto que existan. A continuación, almacénelo en un formato optimizado en una cadena de Javascript (o en un número pequeño de cadenas).

Estas cadenas podrían enviarse comprimidas al navegador, probablemente no tardaría demasiado en cargarse.

A continuación, puede recorrer la máquina de estados en función de la cantidad de caracteres ya introducidos y buscar de manera eficiente todos los códigos de productos que comienzan con esos caracteres.

Así es como lo haría de todos modos.

O simplemente cargue todo el diccionario porque 20k no es mucho. Escribí un juego de Javascript que cargó un diccionario más grande que eso y no era un problema real.

+0

Dice 20K * productos *, no 20K bytes.Si un registro de producto está representado por 100 bytes de JSON, tendrá que descargar 2 MB de datos JSON para obtener toda la base de datos. –

+0

Solo para almacenar el código del producto, no debería tomar 100 bytes, y mucho menos si los almacena de manera eficiente y lo comprime. Creo que 10 bytes es más realista. – MarkR

Cuestiones relacionadas