|
A nadie le importa una mierda, pero...
|
... Pero hasta hace un par de dÃas si pinchabas en el menú "Tracker", ibas a un listado generado al vuelo que por extrañas razones sólo me veÃa los torrents que tenÃa hospedados en mi tracker... Y tardaba un cojón.El caso es que me puse a optimizar un poco el código de la implementación de una librerÃa que lee los torrents y los scrapes de los trackers y saca de ahà los datos de los mismos. La verdad es que arreglando un poco el código conseguà mejoras del 50% de velocidad, pero aún me quedaba una cosilla pendiente.Resulta que trackers como el de Frozen-layer escupen el scrape comprimido, cosa que no tenÃa en cuenta la implementación que tenÃa de la librerÃa de decodificado de scrapes. Y cual fue mi sorpresa que cuando consigo arreglar el problema, el servidor se queda frito durante varios minutos, hasta que por fin, escupe los datos.La optimización de la implementación de la librerÃa no era suficiente: TenÃa que optimizar la propia librerÃa.Pero es que la librerÃa es un ejemplo de cómo no se debe hacer algo. Variables monocarácter, ausencia total de comentarios del código, y lo peor... generaba un diccionario a base de ir iterando por todo el scrape carácter por carácter para ir sacando los datos.Imagináos cuando el scrape es como el de Frozen, de más de 600 Kas y tiene que ir iterando por toda la cadena, para alante, para atrás, carácter por carácter. Una bazofia. El sistema de por sà es lento con scrapes pequeños, pero con strings tan enormes, se hace demencial.Total, que hoy me he dedicado en mi tarde libre a leerme las bases del protocolo de scrapping de BitTorrent y crear un sistemilla que, lo primero, explote el scrape en pedazos más pequeños e ir rompiendo usando algún reg_exp y otros métodos más waltrapillas.Es cierto, que no es el código más limpio que he hecho, aun tengo que pensármelo mejor, pero... Ahora un scrape completo desde cero de todos los torrents que llevo, me cuesta parsearlo menos de 1 segundo y medio.¿A que molo?
|