@x-rw mira, todo servidor http su única tarea es la de producir un documento html, si se quiere exportar una variable accesible desde el lado cliente, entonces el servidor http debe inyectar en el html la variable correspondiente
Si, se que suena un poco contradictorio y que lo que debería de estar buscando es la optimizasion de la aplicación para que consuma menos recursos, pero en mi caso es lo contrario, quiero asignarle mas potencia para que realice tareas mas rápidas.
@EduenSarceño Mi aplicacion la estoy desarrollando en java.
@David ya localizaste qué es lo que alentiza tu sistema?, pueden ser varias razones, 1) Poca memoria heap habilitada, 2) Muchas solicitudes I/O bloqueantes, 3) Mal manejo de recursos por parte de tu aplicación
@x-rw respuesta corta: No
Recuerda que http es un protocolo cliente-servidor. Una vez el servidor de la respuesta el cliente ya no tiene conexión.
El cliente es el navegador web, sobre tu navegador web está angular, angular no puede pedir información directamente a tu servidor.
Con Angular se acostumbra crear una REST api o inyectar el código directamente en el html
@EduenSarceño nada de eso. Simplemente la aplicación no trabaja tan rápido como quisiera. Al monitorearla veo que en promedio solo consume un 3% del CPU. Quisiera poder aumenta su consumo de cpu para que esta trabaje mas rápido.
var con = new XMLHttpRequest(); con.open('GET', 'api/v1/users?get=all&limit=10') con.readyStateChange(...) con.send()
es que los tutoriales te dan la forma en que ellos trabajan,no es la única forma
yo te recomiendo que primero aprendas las bases del protocolo http
tu temario debería ser 1) Protocolo http arquitectura, paso de mensajes, comunicación entre nodos 2) Generación de recursos dinámicos
@David es que dependerá de tu aplicación, si tu aplicación hace solicitudes I/O bloqueantes, entonces tu aplicación pasará la mayor parte del tiempo suspendido
por ejemplo si tu aplicación lee un archivo ya sea stdin o cualquier otro, y haces un read(...) cuando el buffer está vacío, eso automáticamente pondrá tu aplicación en un estado de suspención hasta que el buffer esté lleno de nuevo.
Si utilizas GUI, tu aplicación también es bloqueante, en el caso de java.swing es monohilo, y utiliza un sistema basado en mensajes, java.awt.EventDispacher es bloqueante cuando no hay ningún mensaje que despachar.
en general existen cientos de funciones que son bloqueantes y ponen a tu aplicación en suspensión.
por ejemplo las bases de datos jamás usarán el 75% del CPU, salvo que toda la base de datos esté en memoria, lo cuál es imposible si la base de datos excede la memoria principal del computador
la razón: Las bases de datos leen archivos en el sistema de archivos, al hacer una solicitud I/O el sistema operativo pone en espera la aplicación e interrumpe su ejecución y la reanuda hasta que el recurso solicitado esté disponible para su uso.
en Interfaces gráficas la propia interfaz se coloca en un estado de suspención hasta que sucede una excepción controlada (ej el usuario mueve el mouse, presiona una tecla, etc)
A ver si nos entendemos mejor. Tengo un for que obtiene una gran "cantidad de datos", en cada iteracion este obtiene 20 datos y realiza mas de 500 iteraciones. El proceso total tarda como 3 minutos. Vuelve mi pregunta: Podria hacer que el for obtenga los datos mas rapidos?
el web scrapping siempre guarda los recursos en ficheros alojados en disco
en este caso aún sería mas lento
Se crearía una conexión con el servidor, se esperaría el mensaje (limitado por tu ancha de banda) se guardaría la respuesta en disco, luego leerías la repsuesta en disco.
SAX no construye un objeto así que no tendrás límite de memoria, en su lugar el te notifica por eventos lo que vaya analizando, es tu deber ir haciendo las validaciones que sean necesarias para dar con el recurso que buscas
Y todo lo que dices es como que el consumo de la aplicación aumenta por el tiempo que esta dure ejecutándose sin interrupción (sin dormir). Osea, que una aplicación que comience en 0% a los 10 minutos estará consumiendo un 10% de la cpu. Eso es lo que puedo entender de todo lo que me has dicho de las "solicitudes I/O".
la conexión http de web scrapper es I/O, la lectura a la respuesta del web scrapper es I/O, si tu aplicación consume bastante RAM, la mayoría de tus objetos estará en disco y no en ram, entonces también es I/O
entonces deja de hacer I/O bloqueante
así de sencillo.
respuesta corta: re programa tu aplicación pero esta vez teniendo en cuenta lo que haces
In computer science, asynchronous I/O, or "Non-sequential I/O" is a form of input/output processing that permits other processing to continue before the transmission has finished.
Input and output (I/O) operations on a computer can be extremely slow compared to the processing of data. An I/O device can incorporate mechanical devices that must physically move, such as a hard drive seeking a track to read or write; this is often orders of magnitude slower than the switching of electric current. For example, during a disk operation that takes ten milliseconds to perform, a processor that is clocked...
@AlvaroMontoro bien, ahora ordenando papeles. Y tengo en mente realizar una librería de Javsacript pero no sé muy bien como empezar. ¿Sabes si hay algunas pautas definidas? Habia pensando en crearme un namespace y que estuvieran todas las funciones contenidas en el mismo.
@AlvaroMontoro Sería para simplificar funciones que son triviales pero que de normal hay que escribir algo más que una línea de código. Ejemplo: que haya una función compruebaPrimo(), le pases uno o varios números y te devuelva el resultado.
@AlvaroMontoro entonces la llamaría así librería.compruebaPrimo(parametros)
@AlvaroMontoro Sí, mi idea es publicarla en GitHub una vez terminada o al menos en su primera fase. Así podría contribuir más gente y la podrían utilizar libremente :P