Colocación de calzoncillos de amianto ...
Ayer mi título con Packt Publications, Programación reactiva con JavaScript . No es realmente un título centrado en Node.js; Los primeros capítulos están destinados a cubrir la teoría, y los capítulos posteriores con mucho código cubren la práctica. Debido a que realmente no pensé que sería apropiado no darles a los lectores un servidor web, Node.js parecía, con mucho, la opción obvia. El caso se cerró incluso antes de abrirlo.
Podría haber dado una visión muy optimista de mi experiencia con Node.js. En cambio, fui honesto sobre los puntos buenos y malos que encontré.
Permítanme incluir algunas citas que son relevantes aquí:
Advertencia: Node.js y su ecosistema están calientes: ¡lo suficiente como para quemarte mucho!
Cuando era asistente de maestra en matemáticas, una de las sugerencias no obvias que me dijeron fue que no le dijera a un alumno que algo era "fácil". La razón fue algo obvio en retrospectiva: si le dice a la gente que algo es fácil, alguien que no ve una solución puede terminar sintiéndose (aún más) estúpido, porque no solo no entienden cómo resolver el problema, sino el problema ¡son demasiado estúpidos para entender que es fácil!
Hay problemas que no solo molestan a las personas que vienen de Python / Django, que inmediatamente recarga la fuente si cambia algo. Con Node.js, el comportamiento predeterminado es que si realiza un cambio, la versión anterior continúa activa hasta el final de los tiempos o hasta que pare y reinicie el servidor manualmente. Este comportamiento inapropiado no solo molesta a los Pythonistas; También irrita a los usuarios nativos de Node.js que proporcionan varias soluciones. La pregunta de StackOverflow "Recarga automática de archivos en Node.js" tenía, en el momento de escribir este artículo, más de 200 votos a favor y 19 respuestas; una edición dirige al usuario a un script de niñera, nodo-supervisor, con página de inicio en http://tinyurl.com/reactjs-node-supervisor. Este problema ofrece a los nuevos usuarios una gran oportunidad para sentirse estúpidos porque pensaron que habían solucionado el problema, pero el viejo comportamiento con errores no ha cambiado por completo. Y es fácil olvidarse de hacer rebotar el servidor; Lo he hecho muchas veces. Y el mensaje que me gustaría dar es: “No, no eres estúpido porque este comportamiento de Node.js te mordió la espalda; es solo que los diseñadores de Node.js no vieron ninguna razón para proporcionar un comportamiento apropiado aquí. Trate de sobrellevarlo, tal vez tomando un poco de ayuda del supervisor de nodo u otra solución, pero por favor no se vaya sintiéndose estúpido. No eres el que tiene el problema; el problema está en el comportamiento predeterminado de Node.js ".
Esta sección, después de un debate, se dejó, precisamente porque no quiero dar una impresión de "Es fácil". Me corté las manos repetidamente mientras hacía que las cosas funcionaran, y no quiero suavizar las dificultades y hacer que creas que hacer que Node.js y su ecosistema funcionen bien es una cuestión sencilla y si no lo es para ti también , no sabes lo que estás haciendo. Si no encuentras dificultades desagradables con Node.js, es maravilloso. Si lo haces, espero que no te vayas sintiendo: "Soy estúpido, debe haber algo mal conmigo". No eres estúpido si experimentas sorpresas desagradables al tratar con Node.js. ¡No eres tu! ¡Es Node.js y su ecosistema!
El Apéndice, que realmente no quería después del aumento creciente en los últimos capítulos y la conclusión, habla sobre lo que pude encontrar en el ecosistema y proporcionó una solución para el literalismo imbécil:
Otra base de datos que parecía un ajuste perfecto, y que aún puede canjearse, es una implementación del lado del servidor del almacén de valores clave HTML5. Este enfoque tiene la ventaja fundamental de una API que la mayoría de los buenos desarrolladores front-end entienden lo suficientemente bien. Para el caso, también es una API que la mayoría de los desarrolladores front-end no tan buenos entienden lo suficientemente bien. Pero con el paquete node-localstorage, aunque no se ofrece acceso de sintaxis de diccionario (desea utilizar localStorage.setItem (clave, valor) o localStorage.getItem (clave), no localStorage [clave]), se implementa la semántica localStorage completa , incluida una cuota predeterminada de 5 MB: ¿POR QUÉ? ¿Los desarrolladores de JavaScript del lado del servidor deben protegerse de sí mismos?
Para las capacidades de la base de datos del lado del cliente, una cuota de 5 MB por sitio web es realmente una cantidad generosa y útil de espacio para respirar para que los desarrolladores puedan trabajar con ella. Podría establecer una cuota mucho más baja y aún así ofrecer a los desarrolladores una mejora inconmensurable sobre la cojera junto con la gestión de cookies. Un límite de 5 MB no se presta muy rápidamente para el procesamiento del cliente Big Data, pero hay una asignación bastante generosa que los desarrolladores ingeniosos pueden usar para hacer mucho. Pero, por otro lado, 5 MB no es una porción particularmente grande de la mayoría de los discos comprados recientemente, lo que significa que si usted y un sitio web no están de acuerdo sobre el uso razonable del espacio en disco, o si algún sitio es simplemente falso, realmente no cuesta usted mucho y no corre el peligro de un disco duro inundado a menos que su disco duro ya esté demasiado lleno.
Sin embargo, cabe señalar que cuando usted es el que escribe el código para su servidor, no necesita ninguna protección adicional para que su base de datos no supere los 5 MB de tamaño tolerable. La mayoría de los desarrolladores no necesitarán ni querrán herramientas que actúen como una niñera y que las protejan del almacenamiento de más de 5 MB de datos del lado del servidor. Y la cuota de 5 MB que es un acto de equilibrio de oro en el lado del cliente es bastante tonta en un servidor Node.js. (Y, para una base de datos para múltiples usuarios, como se cubre en este Apéndice, podría señalarse, un poco doloroso, que no son 5 MB por cuenta de usuario a menos que cree una base de datos separada en el disco para cada cuenta de usuario; eso es 5 MB compartido entre todas las cuentas de usuario juntas. Eso podría ser dolorososi te vuelves viral!) La documentación indica que la cuota es personalizable, pero hace una semana un correo electrónico al desarrollador preguntando cómo cambiar la cuota no tiene respuesta, como lo hizo la pregunta de StackOverflow. La única respuesta que he podido encontrar está en la fuente de Github CoffeeScript, donde aparece como un segundo argumento entero opcional para un constructor. Así que es bastante fácil, y podría especificar una cuota igual a un disco o tamaño de partición. Pero además de portar una característica que no tiene sentido, el autor de la herramienta no ha seguido por completo una convención muy estándar de interpretar 0 como "ilimitado" para una variable o función en la que un entero debe especificar un límite máximo para el uso de algunos recursos. Lo mejor que puede hacer con este error es probablemente especificar que la cuota es Infinito:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Intercambiando dos comentarios en orden:
Douglas Crockford decía en esencia que las personas se disparaban innecesariamente en el pie constantemente usando JavaScript en su conjunto, y parte de que JavaScript se convirtiera en un lenguaje respetable decía en esencia: “JavaScript como lenguaje tiene algunas partes realmente buenas y algunas partes realmente malas. Aquí están las buenas partes. Solo olvida que hay algo más allí. Quizás el cálido ecosistema de Node.js desarrolle su propio "Douglas Crockford", quien dirá: "El ecosistema de Node.js es un codificador del Salvaje Oeste, pero hay algunas gemas reales por encontrar. Aquí hay una hoja de ruta. Aquí están las áreas para evitar a casi cualquier costo. Aquí están las áreas con algunos de los paydirt más ricos que se encuentran en CUALQUIER idioma o entorno ”.
Quizás alguien más pueda tomar esas palabras como un desafío, y seguir el ejemplo de Crockford y escribir "las partes buenas" y / o "las mejores partes" para Node.js y su ecosistema. ¡Compraría una copia!
Y dado el grado de entusiasmo y las horas de trabajo en todos los proyectos, puede justificarse en un año, o dos, o tres, moderar bruscamente cualquier comentario sobre un ecosistema inmaduro hecho al momento de escribir este artículo. Realmente puede tener sentido en cinco años decir: “El ecosistema Node.js 2015 tuvo varios campos minados. El ecosistema 2020 Node.js tiene múltiples paraísos ”.