ventajas usan que node introduccion funciona espaƱol empresas ejercicios desventajas desarrollo como caracteristicas javascript node.js backbone.js seo

javascript - usan - node js ventajas y desventajas



Uso de node.js para servir contenido de una aplicaciĆ³n Backbone.js para buscar rastreadores para SEO (6)

Básicamente, debe decidir qué es lo que está sirviendo: ¿es una aplicación verdadera (es decir, algo que podría sustituir a una aplicación de escritorio dedicada), o es una presentación de contenido (es decir, una "página web" clásica)? )? Si le preocupa el SEO, es probable que sea el último ("sitio de contenido") y en ese caso el modelo de "aplicación de una sola página" no es apropiado; realmente desea el modelo de "sitio web mejorado progresivamente" (busque frases como "JavaScript no intrusivo", "mejora progresiva" y "diseño web adaptable").

Para amplificar un poco, "el servidor envía solo datos serializados y el cliente realiza todo el renderizado" solo es apropiado en el escenario de "verdadera aplicación". Para el escenario de "sitio de contenido", el modelo apropiado es "el servidor realiza la representación principal, el cliente lo hace ver mejor y realiza una representación a pequeña escala para evitar transiciones de página perturbadoras cuando sea posible".

Y, por cierto, la objeción de que la mejora progresiva significa "asegurarse de que un usuario pueda ver no tiene nada mejor que un usuario ciego que usa texto a voz" es una expresión de resentimiento político, no de realidad. Los sitios mejorados progresivamente pueden ser tan sofisticados como desee desde la perspectiva de un usuario con un sistema de renderizado de alta gama.

O mi google-fu me ha fallado o realmente no hay mucha gente haciendo esto todavía. Como saben, Backbone.js tiene un talón de Aquiles: no puede servir el html que representa a los rastreadores de páginas como googlebot porque no ejecutan JavaScript (aunque, dado que es Google con sus recursos, el motor V8 y el hecho alarmante de que Las aplicaciones de JavaScript están en aumento, espero que esto suceda algún día). Soy consciente de que Google tiene una política de solución de hashbang pero es simplemente una mala idea. Además, estoy usando PushState. Este es un tema extremadamente importante para mí y espero que también lo sea para otros. El SEO es algo que no se puede ignorar y, por lo tanto, no se puede considerar para muchas aplicaciones que lo requieren o dependen de él.

Introduce node.js. Apenas estoy empezando a meterme en esta locura, pero parece posible tener la misma aplicación Backbone.js que existe en el cliente en el servidor con las manos con node.js. node.js podría entonces servir html representado desde la aplicación Backbone.js a los rastreadores de páginas. Parece factible, pero estoy buscando a alguien que tenga más experiencia con node.js o, mejor aún, alguien que haya hecho esto, para que me asesore.

¿Qué pasos debo seguir para permitirme usar node.js para servir mi aplicación Backbone.js a los rastreadores web? Además, mi aplicación Backbone consume una API que está escrita en Rails, lo que creo que haría que esto sea un dolor de cabeza.

EDITAR: No mencioné que ya tengo una aplicación de producción escrita en Backbone.js. Estoy buscando aplicar esta técnica a esa aplicación.


Creo que puedes tomar un enfoque de tipo de estrategia alternativa. Considere lo que sucedería con javascript desactivado y un enlace que se haga clic en vs js on. Cualquier cosa que haga en su página que pueda ser rastreada debería tener algún procedimiento de repliegue razonable cuando el javascript esté desactivado. Sus enlaces siempre deben tener el enlace al servidor como href, y la acción predeterminada que ocurre debe evitarse con javascript.

No diría que esto es responsabilidad de la columna vertebral necesariamente. Me refiero a que lo único que puede ayudarlo con el backbone aquí es modificar su URL cuando cambia la página y que sus modelos / colecciones sean del lado del cliente y del servidor. Las vistas y los enrutadores creo que sería estrictamente del lado del cliente.

Sin embargo, lo que puede hacer es hacer que sus páginas de jade y una representación parcial desde el lado del cliente o del servidor con o sin contenido inyectado. De esta manera, la misma página se puede representar de cualquier manera. Es decir, si reemplaza una gran parte de su página y cambia la url, entonces el html que está capturando puede ser de la misma plantilla como si alguien hubiera ido directamente a esa página.

Cuando su servidor recibe una solicitud, debe llevarlo directamente a esa página en lugar de pasar por el punto de entrada principal y la red troncal de carga, manipular la página y configurarla de forma que el usuario intente con la URL.

Creo que deberías poder lograr esto simplemente reorganizando un poco las cosas en tu aplicación. No hay reescritura real, solo una buena cantidad de cosas en movimiento. Es posible que deba escribir un controlador que le sirva archivos html con contenido inyectado o no inyectado. Esto servirá para darle a su aplicación de red troncal el html que necesita para unirse con los datos de los modelos. Como he dicho, esas mismas plantillas se pueden usar cuando golpeas directamente esos enlaces a través de los enrutadores definidos en express / node.js


En primer lugar, permítame agregar un descargo de responsabilidad que creo que este uso de node.js es una mala idea. Segundo descargo de responsabilidad: he hecho trucos similares, pero solo con el propósito de realizar pruebas automatizadas, no de rastreadores.

Con eso fuera del camino, vamos. Si pretende ejecutar su aplicación del lado del cliente en el servidor, deberá volver a crear el entorno del navegador en su servidor:

  1. Lo más obvio es que le falta el DOM (Modelo de objetos de documento), básicamente el AST en la parte superior de su documento HTML analizado. La solución de node.js para esto es jsdom .

  2. Sin embargo, eso no será suficiente. Su navegador también expone BOM (Modelo de objetos del navegador): acceso a funciones del navegador como, por ejemplo, history.pushState . Aqui es donde se pone complicado. Hay dos opciones: puedes intentar doblar phantomjs o casperjs para ejecutar tu aplicación y luego eliminar el HTML. Es frágil ya que está ejecutando un enorme navegador WebKit completo con las partes de la interfaz de usuario cortadas.

  3. La otra opción es Zombie , que es una reimplementación liviana de las características del navegador en Javascript. De acuerdo con la página, es compatible con pushState, pero mi experiencia es que la emulación del navegador está lejos de ser completa; sin embargo, inténtelo y vea hasta dónde llega.


Esto está en mi lista de cosas que hacer con nuestra aplicación: haga que Node.js analice las rutas de Backbone (almacenadas en la memoria cuando se inicie la aplicación) y al menos sirva la plantilla de las páginas principales con HTML directo; demasiada sobrecarga / procesamiento para el BE cuando considera que miles de usuarios llegan a su sitio.

Creo que las aplicaciones de Backbone como AirBnB lo hacen de esta manera también, pero solo para Robots como Google Crawler. También necesita esta situación para cosas como los "me gusta" de Facebook, ya que Facebook envía un rastreador para leer sus etiquetas og :.


La solución de trabajo es utilizar Backbone en todas partes https://github.com/Morriz/backbone-everywhere pero te obliga a usar Node como tu backend.

Otra alternativa es usar las mismas plantillas en el servidor y en el front-end. El front-end carga las plantillas de bigote con el complemento de texto require.js y el servidor también representa la página con las mismas plantillas de bigote.

Otra adición es que también muestre los datos del módulo bootstrapped en la etiqueta javascript como datos JSON para que sean utilizados inmediatamente por Backbone para poblar modelos y colecciones.


Voy a dejar que usted decida si empujar su motor de renderizado hacia el lado del servidor es una decisión acertada.

Debido a que Nodejs se basa en V8 (el motor de Chrome) ejecutará javascript, como Backbone.js. Crear tus modelos y demás se haría exactamente de la misma manera.

El entorno Nodejs, por supuesto, carece de un DOM. Así que esta es la parte que necesitas recrear. Creo que el módulo más popular es:

jsdom

Una vez que tenga una API accesible en Nodejs, simplemente compile sus nodos como lo haría para un cliente de navegador típico (tal vez usando jQuery) y responda a las solicitudes del servidor con HTML renderizado (a través de $ ("myDOM"). Html () o similar ).