Estaba planeando usar el autocompletado de jquery para un sitio y he implementado una versión de prueba. Ahora estoy usando una llamada ajax para recuperar una nueva lista de cadenas para cada entrada de caracteres. El problema es que se vuelve bastante lento, 1.5 segundos antes de que se llene la nueva lista. ¿Cuál es la mejor manera de hacer autocompletar rápido? Estoy usando cakephp y estoy haciendo un hallazgo y con un límite de 10 elementos.Cómo mejorar el rendimiento de Autocompletar de Jquery
Respuesta
This article - acerca de cómo flickr hace autocompletar es una muy buena lectura. Tuve algunas experiencias "guau" al leerlo.
"Este widget de descarga una lista de todos de sus contactos, en JavaScript, en virtud de 200 ms (esto es cierto incluso para miembros con más de 10.000 contactos). En fin de obtener este nivel de rendimiento , tuvimos que por completo repensar cómo enviamos datos desde el servidor al cliente ".
El verdadero problema para la velocidad en este caso, creo que es el tiempo que lleva correr la consulta en la base de datos. Si no hay forma de mejorar la velocidad de su consulta, tal vez extienda su búsqueda para incluir más elementos con algunos resultados altamente calificados, puede realizar una búsqueda cada dos caracteres y filtrar entre 20 y 30 resultados en el lado del cliente.
Esto puede mejorar la apariencia del rendimiento, pero en 1,5 segundos, primero trataría de mejorar la velocidad de consulta.
Aparte de eso, si nos puede dar más información, puedo darle una respuesta más específica.
¡Buena suerte!
Sí, iba a proponer eso también ... Haga algo de filtrado en el lado del cliente. – Niyaz
¡Tío! Use SOLR. Puedes golpear la URL directamente. Acabo de terminar de integrarlo en un proyecto y eso resolverá sus problemas de consultas db. Incluso puedes cargar los datos en SOLR desde MySQL (que asumí de cakephp). – Ligemer
Los intervalos de 1,5 segundos son espacios muy anchos para servir un servicio de autocompletar.
- En primer lugar optimice su consulta y db conexiones. Intente mantener viva su conexión de db con memoria caché.
- Use los métodos de caché de resultados si su servicio es muy utilizado para ignorar re-fetch.
- Use un caché de cliente (una lista JS) para mantener las solicitudes anteriores en el cliente. Si el usuario teclea y borra, te será útil. Los resultados vendrán de la memoria caché frontend en lugar de backend point.
- El filtrado Regex en el lado del cliente no será costoso, puede darle una oportunidad.
Antes de realizar algunas optimizaciones, primero debe analizar dónde se encuentra el cuello de la botella. Intente averiguar cuánto tarda cada paso (entrada → solicitud → consulta db → respuesta → visualización). Tal vez la implementación de CakePHP tiene un retraso para no enviar una solicitud por cada carácter ingresado.
El lado del servidor en PHP/SQL es lento.
No utilice PHP/SQL. Mi autocompletar escrito en C++, y utiliza hashtables para buscar. Vea el rendimiento here.
Esta es la computadora Celeron-300, FreeBSD, Apache/FastCGI.
Y, como ve, funciona rápido en grandes diccionarios. 10,000,000 de registros no es un problema
Además, admite prioridades, traducciones dinámicas y otras características.
Autocompletar no es lento, aunque su implementación ciertamente podría serlo. Lo primero que verificaría es el valor de su opción de demora (consulte los documentos de jQuery). A continuación, verificaría su consulta: es posible que solo vuelva a traer 10 registros, pero ¿está realizando un análisis de tabla enorme para obtener esos 10 registros? ¿Trae una tonelada de registros de la base de datos a una colección y luego toma 10 elementos de la colección en lugar de hacer una búsqueda en el servidor en la base de datos? Un índice simple podría ayudar, pero tendrá que hacer algunas pruebas para estar seguro.
Pruebe precargar su objeto de lista en lugar de hacer la consulta sobre la marcha.
También la autocompleta tiene un retardo de 300 ms por defecto.
eliminar Tal vez el retraso
$(".selector").autocomplete({ delay: 0 });
+1 por retraso. Olvidé que esta es una de las razones. No sé por qué el tiempo de demora predeterminado es de 300 ms, pero no de 0 ms. –
+1 aquí también si sus consultas son correctas. Si sus consultas toman tanto tiempo para 10 elementos de la lista, entonces algo está mal con sus consultas y esta no es la respuesta que necesita. – Ligemer
JQuery oficial que dice el valor predeterminado para la opción de demora https://api.jqueryui.com/autocomplete/#option-delay –
- 1. mejorar el rendimiento plantilla jQuery
- 2. ¿Cómo mejorar el rendimiento de WinForms MSChart?
- 3. ¿Cómo mejorar el rendimiento de SQLAlchemy?
- 4. cómo mejorar el rendimiento de purePDF?
- 5. ¿Cómo mejorar el rendimiento de este código?
- 6. ¿Cómo mejorar el rendimiento de FtpWebRequest?
- 7. ¿Cómo mejorar el rendimiento de Core Data?
- 8. Cómo mejorar el rendimiento de ViewFlipper/ViewAnimator
- 9. ASP.NET - mejorar el rendimiento
- 10. MySQL Query mejorar el rendimiento
- 11. Enhebrado para mejorar el rendimiento
- 12. Quiero mejorar el rendimiento de xslt
- 13. Sugerencias para mejorar el rendimiento de Eclipse
- 14. Cómo mejorar el rendimiento de lectura de lectura XML
- 15. ¿Cómo mejorar el rendimiento de inserción/actualización de datos?
- 16. ¿Cómo mejorar el rendimiento de desplazamiento de UIWebView?
- 17. ¿Cómo puedo mejorar el rendimiento de compilación de Teamcity?
- 18. ¿Cómo mejorar el rendimiento de la recolección de basura?
- 19. ¿Cómo mejorar el rendimiento del sitio web en iPad/iPhone?
- 20. vim sintaxis resaltar mejorar el rendimiento
- 21. ¿Cómo mejorar el rendimiento de este cálculo numérico en Haskell?
- 22. ¿Cómo mejorar el rendimiento de este programa Haskell?
- 23. ¿Cómo puedo mejorar el rendimiento de la aplicación en AppHarbor?
- 24. ¿Cómo mejorar el rendimiento de Hibernate en Java?
- 25. ¿Cómo puedo mejorar el rendimiento de la aplicación ASP.NET MVC?
- 26. ¿Cómo puedo mejorar el rendimiento de 'include() s' en PHP?
- 27. ¿Cómo puedo mejorar el rendimiento de WMI en .NET?
- 28. ¿Cómo puedo simplificar/mejorar el rendimiento de esta consulta MySQL?
- 29. Cómo mejorar el rendimiento de inicio en IIS/ASP.Net
- 30. ¿Cómo puedo mejorar el rendimiento de WMI usando Delphi?
¿El 1.5s incluyen el tiempo de espera de la función de autocompletar (es decir, el tiempo de espera para asegurarse de que no está escribiendo caracteres adicionales)? – Powerlord
¿Cómo se ve esta consulta? 1.5s por 10 elementos es ridículamente lento. Vea mi otro comentario a continuación sobre SOLR. Funcionó como un amuleto para nosotros con millones de filas por atravesar. – Ligemer
Mejoría ... ¡utiliza el plugin jquery elegido! –