2010-09-02 21 views
14

Me pregunto qué tan rápido se compara javascript del lado del cliente con Java del lado del servidor en términos de poder computacional sin procesar.¿Qué tan rápido es javascript del lado del cliente contra Java del lado del servidor?

Por ejemplo, clasificación. ¿Debería hacerse todo del lado del servidor si es posible? ¿Y qué tal iterar a través de una colección?

+0

Además de todo lo mencionado a continuación (recursos de servidor frente a cliente, compilación de código de bytes en una VM frente a una secuencia de comandos interpretada, etc.) - La velocidad de JavaScript depende del navegador. –

+0

Observo que Facebook ha cambiado el trabajo en sus granjas de servidores [masivas] desde JavaScript para aumentar el rendimiento. –

Respuesta

16

La respuesta es muy compleja y depende de cada situación específica.

Un servidor generalmente será de mayor magnitud que una máquina cliente; y el código administrado es generalmente mucho más rápido que el scripting.

Sin embargo, - la máquina cliente también suele tener una gran cantidad de potencia computacional de repuesto que no se está utilizando, mientras que el servidor podría estar ejecutando solicitudes para miles de usuarios. Entonces, en ese caso, gran parte del trabajo que se puede descargar al cliente es preferible.

Debe comprender las necesidades y expectativas de sus usuarios para cada funcionalidad individual en su aplicación y observar la carga relativa frente al costo de desarrollo para su organización para dividir el desarrollo entre dos entornos y descubrir qué funciona mejor. Por ejemplo, sus usuarios probablemente esperan que su sitio no congele su navegador o desafortunadamente provoque que los diálogos de "esta página web se estén comiendo de su computadora", de modo que las secuencias de comandos de sus clientes se escriban de forma inteligente. Eso no quiere decir que no pueda hacer un ton de trabajo en el cliente (puede hacerlo), solo tiene que ser inteligente acerca de cómo lo hace y recordar que bloquea el hilo de la interfaz de usuario.

+3

También debe tener cuidado con la cantidad que descarga al cliente ... no desea obtener ese molesto navegador emergente que dice "Este script está tardando demasiado ... Continue/Stop Script" – Zoidberg

+0

También hay el problema de las devoluciones. Cualquier cosa que haga en el servidor requerirá una devolución de datos, que recargará al menos parte de la página. Eso lleva un viaje de ida y vuelta al servidor y puede hacer que el usuario pierda donde estaba en la pantalla (lo que generalmente es molesto para los usuarios que completan un formulario o visualizan una página larga). Si puede hacerlo desde el lado del cliente, esto no es un problema; puede mitigar los problemas de comportamiento con AJAX, pero aún puede encontrarse con una pérdida de la posición del navegador. Y, por supuesto, si su operación requiere recursos del lado del servidor como la base de datos, la operación simplemente debe manejarse en el lado del servidor. – KeithS

4

Estas dos cosas no se pueden comparar una al lado de la otra.

Hay demasiados factores, y los idiomas son demasiado diferentes, y sirven para fines demasiado diferentes para comparar efectivamente su velocidad.

Realmente necesita decidir dónde hace sus cálculos caso por caso.

Si se requiere que la máquina cliente haga demasiado trabajo, se degradará el rendimiento de la aplicación, pero si se le pide al servidor que haga demasiado, puede ralentizar el tiempo de respuesta para todos.

5

La gran diferencia aquí no es la velocidad de las máquinas virtuales. La diferencia es que un único servidor tiene que atender a docenas o cientos de clientes. Otro factor: los viajes redondos al servidor agregan un lote de sobrecarga, por lo que desea minimizarlos.

Básicamente, cualquier cosa que no sea crítica para la seguridad y se pueda hacer fácilmente en el cliente, debe hacerse en el cliente.

2

Javascript es lo suficientemente rápido como para hacer la clasificación de datos en el cliente. Lo he usado con conjuntos de datos de 5.000 filas, 11 campos por fila y lo usé para ordenar tablas en el cliente (con paginación). Estos géneros utilizan funciones de comparación para que clasifique las filas por campo y tipo de datos. La parte real de JavaScript del proceso tomó algo del orden de las decenas de milisegundos (~ 80 si no recuerdo).

Preferiría llevar ese tipo de tarea mundana al cliente en cualquier momento en lugar de obstruir un servidor muy ocupado con ella. YMMV.

8

Server side Java ciertamente funcionará mucho más rápido, necesitará un punto de referencia para su caso particular, pero probablemente esté buscando una ventaja de velocidad de 10-20x.

Sin embargo, que probablemente no importa mucho: independientemente de la potencia de cálculo en bruto Todavía recomendaría tratando de hacer tanto como sea posible el cálculo lado del cliente en Javascript por las siguientes razones:

  • Incluso Es probable que 20x más lento sea imperceptible para el usuario
  • Cuando se tiene en cuenta la latencia de las comunicaciones entre el cliente y el servidor, hacerlo localmente en el cliente casi con seguridad responderá mejor al usuario
  • Las máquinas cliente probablemente no están vinculadas a la CPU, por lo que ejecutar algún código adicional en ellas es gratis
  • Si puede descargar el trabajo del servidor al cliente, necesitará menos infraestructura del lado del servidor, que puede ser costosa cuando lo necesite para comenzar a escalar
  • Tener muchas comunicaciones de cliente a servidor puede complicar su arquitectura y dificultar el desarrollo de nuevas funcionalidades en el futuro.
  • cálculos que hace en el cliente a menudo pueden reducir los requerimientos de ancho de banda

Hay razones, por supuesto, buena para mantener las cosas en el servidor, por ejemplo:

  • implicaciones de seguridad (si el cliente no se puede confiar)
  • muy amplio conjunto de datos necesarios (llevaría demasiado tiempo para descargar al cliente)
  • necesidad de explotar los cálculos en paralelo masivo (por ejemplo, para la búsqueda de Google)
  • Evite la necesidad de tener en cuenta las diferencias en los clientes (p. Javascript versions)

Pero si esto no se aplica, entonces trataré de llevar las cosas al cliente tanto como sea posible.

+0

+1 Buena respuesta. Puede agregar a la lista de servidores de ventaja: no se preocupe tanto por la versión de JavaScript que admite el navegador del cliente. – emory

+0

¡¡Buena idea, agregada !! – mikera

2

No mezcle Java con Javascript - el nombre es similar pero son idiomas completamente diferentes. Javascript es un lenguaje interpretado por el lado del cliente, Java es un lenguaje de código de bytes que se ejecuta dentro de una máquina virtual, con mucha más optimización para manejar datos de gran tamaño. Por el hecho de que los servidores que ejecutan servicios Java normalmente tienen mucha más potencia (CPU más rápidas y E/S de disco, más RAM) la informática en Java siempre es más rápida en mi experiencia. Se puede usar Javascript en el lado del cliente si desea calcular datos pequeños (como ordenar solo unos pocos cientos de elementos).

En general, tendrá que decidir qué camino es más rápido: calcular y preparar los datos en un servidor y transmitirlos al cliente (donde la transmisión a través de Internet es la mayor razón de desaceleración), o calcular el datos ya en el lado del cliente a través de javascript.

Mi sugerencia es: si ninguno de los datos que desea en el lado del cliente ya están en el lado del cliente, es importante calcularlos en el servidor y transmitir los datos ya preparados al cliente. Pero si los datos ya están en el lado del cliente y no son más que unos cientos, la mejor experiencia de usuario es computarlos en el navegador del usuario.

0

Realmente depende de los cuadros que está ejecutando el código, qué tan grande es la información y la disponibilidad para trabajar con el proceso y otros factores, además tiene que pensar en enviar datos a través del cable que es caro.Tienes que equilibrar lo que vas a hacer con eso y si es mejor pasar más tiempo procesando cosas antes y dejar los recursos libres para las cosas pesadas, y jugar enviando datos de ida y vuelta.

Cuestiones relacionadas