Red de conocimiento informático - Problemas con los teléfonos móviles - Las similitudes y diferencias entre el desarrollo front-end web y el desarrollo de terminales iOS

Las similitudes y diferencias entre el desarrollo front-end web y el desarrollo de terminales iOS

Idioma

Como programas orientados al usuario, el front-end y el terminal tienen las mismas características: deben depender del entorno de ejecución de la máquina del usuario, por lo que básicamente no hay otra opción. en el lenguaje de desarrollo A diferencia del backend donde puedes usar lo que quieras, iOS solo puede usar Objective-C y el front-end solo puede usar JavaScript. Por supuesto, iOS también puede usar RubyMotion y el front-end también puede usar. GWT/CoffieScript, pero no es común y muy pocas personas lo usan. También causará muchos problemas.

Existe un contraste interesante entre los dos: los estilos de denominación de variables/métodos son exactamente opuestos. Apple siempre ha abogado por la experiencia del usuario y escribir código no es una excepción. Los nombres de los programas están todos en inglés y deben ser lo más detallados posible. Nos esforzamos por saber cuáles son las variables y los nombres de los métodos, como aplicación: didFinishLaunchingWithOptions:. Debido a que js debe descargarse de Internet cada vez, debemos esforzarnos por reducir el tamaño del código, de modo que los nombres de los métodos de las variables se acorten tanto como sea posible. De hecho, existen herramientas de compresión de código sin importar la longitud del nombre de la variable. , El efecto final en línea es el mismo, pero todos también Estamos acostumbrados a usar nombres cortos. Por ejemplo, el método application:didFinishLaunchingWithOptions: del objc mencionado anteriormente generalmente se nombra en js: $().

objc y js son lenguajes dinámicos y su uso es bastante similar, pero objc se compila y es rápido, y se pueden encontrar muchos errores durante la interpretación de js, y su rendimiento depende de. interpretación El motor, incluso con el potente motor v8, no puede seguir el ritmo de los lenguajes compilados. El lenguaje es demasiado dinámico y las variables no tienen ningún tipo. Es divertido de escribir pero un poco laborioso de depurar. Siempre he sentido que js es ligero, flexible y bohemio, lleno de todo tipo de trucos y objc es bastante satisfactorio, no tan serio como c ++ java ni tan flexible como js.

Subprocesos

El desarrollo front-end casi no necesita el concepto de subprocesos. El navegador implementa el análisis y la representación de HTML y CSS en la página y es posible que no estén en el mismo subproceso. Como js, ​​pero todos los códigos js solo se ejecutan en un subproceso, no habrá ejecución concurrente en el subproceso, por lo que no es necesario considerar varios problemas de programación concurrente. En la nueva característica JS, se pueden crear tareas de trabajo. Dichas tareas se pueden ejecutar en paralelo iniciando un nuevo hilo. Sin embargo, dado que no todos los navegadores lo admiten, diferentes hilos tienen diferentes estándares para transmitir datos y existen pocos escenarios de uso. , no parece utilizarse a gran escala. Tareas como operaciones de bases de datos/envío de solicitudes de red se encuentran en subprocesos diferentes a los de ejecución de código js, ​​pero el navegador las administra y no necesita preocuparse y no puede afectar estos subprocesos. Solo necesita recibir devoluciones de llamadas de eventos y no lo hace. Es necesario abordar cualquier problema de concurrencia.

El desarrollo de terminales requiere un uso extensivo de subprocesos múltiples. iOS tiene un subproceso principal, y la representación de la interfaz de usuario se realiza en este subproceso. Otras solicitudes de red/IO de base de datos o lógica que consumen mucho tiempo deben ejecutarse en subprocesos separados. De lo contrario, ocuparán el tiempo del hilo principal, lo que hará que la interfaz no pueda responder a los eventos de interacción del usuario o que el procesamiento sea lento, lo que provocará que el desplazamiento se bloquee. La lógica del programa se distribuye y se ejecuta en varios subprocesos. Es necesario abordar problemas como la inconsistencia de datos/desorden de tiempo que pueden ser causados ​​por la ejecución simultánea de varios códigos. La concurrencia también hace que algunos errores sean difíciles de solucionar. Tenga cuidado, caerá en una trampa. Debe usarlo adecuadamente. Algunas colas/bloqueos garantizan el orden de ejecución del programa. iOS proporciona un conjunto de métodos de administración de subprocesos múltiples GCD, que encapsula subprocesos y colas de una manera muy simple, fácil de usar y poderosa. Es mucho mejor que otros terminales o fondos, pero aún requiere mucho esfuerzo. para tratar problemas de subprocesos múltiples.

Almacenamiento

El desarrollo de terminales requiere mucha lógica de almacenamiento de datos. Las aplicaciones móviles no son como los navegadores. Los usuarios deben estar conectados a Internet al abrir un navegador, pero es probable que lo estén. offline al abrir una APP, también es probable que esté en un GPRS móvil con condiciones de red extremadamente malas, por lo que se deben guardar los datos solicitados anteriormente. Después de guardar los datos, es necesario sincronizarlos con los datos más recientes en el servidor. Si la cantidad de datos de sincronización completa es demasiado grande y la velocidad del consumo de tráfico también es lenta, se requiere una sincronización incremental. Debe resolverse con el servidor, que debe manejarse bien. El problema de la coherencia de los datos entre el cliente y el servidor. Cuando el volumen de almacenamiento de datos es grande y la estructura es compleja, también es necesario hacer un buen uso de la memoria limitada como caché para optimizar el rendimiento de varias consultas de almacenamiento.

El front-end rara vez necesita almacenamiento en el escritorio, a menos que sea una aplicación de una sola página. Sin almacenamiento, no hay necesidad de una serie de tareas de actualización de datos. Los datos se obtienen del fondo y se unen. y se muestra directamente en la página, incluso si Weibo, por ejemplo, puede cargar continuamente más datos en la página. Los datos solo existen en la memoria y no se almacenarán de forma persistente porque la velocidad de la red del escritorio es estable y no cuenta. tráfico, todos los datos se pueden obtener directamente desde el backend y el cliente no necesita realizar otro conjunto de almacenamiento. Las aplicaciones web en el lado móvil que se parecen mucho a las aplicaciones nativas son las mismas que las del desarrollo de terminales. Los datos también se guardan en SQLite y la lógica de almacenamiento y los problemas a resolver son similares.

Marco

En los marcos de terceros, el front-end web y el desarrollo de iOS son completamente opuestos. Los nativos web son débiles y muy abiertos, lo que permite una gran cantidad de marcos de terceros. Las bibliotecas de clases ejercen su poder, mientras que las nativas de iOS son potentes y muy cerradas, lo que deja poco espacio para que sobrevivan los marcos de terceros.

Los navegadores se diseñaron originalmente para páginas web basadas en contenido, y js era solo un lenguaje de programación que podía agregar algunos pequeños efectos especiales a la página web. No podía seguir el ritmo del desarrollo en la era de las aplicaciones web. y requería muchas bibliotecas y marcos de terceros Auxiliares, junto con el hecho de que el desarrollo front-end es un campo completamente abierto, lo que resultó en una abrumadora cantidad de bibliotecas y marcos. En los primeros días, la función de la mayoría de las bibliotecas se centraba en. Encapsulando las operaciones DOM Todo el mundo siguió reinventando la rueda de la biblioteca de operaciones DOM básica, y después de un período de disputa entre cien escuelas de pensamiento, se convirtió en la dominante, utilizada por más del 90% de los sitios web que utilizan la biblioteca. Casi se ha convertido en una biblioteca básica estándar. En el período posterior, ya no reinventamos la rueda de esta biblioteca básica, sino que agregamos algunos marcos para la organización del código y la arquitectura front-end, como require.js, un marco que ayuda a la modularización del proyecto, MVC framework backbone/angular.js, etc.

Para el desarrollo de iOS, Apple ha proporcionado un marco de desarrollo completo cacao, y este marco se está actualizando, optimizando y agregando a cada generación de sistemas. El modelo de desarrollo también se ha finalizado. Los marcos de terceros sobreviven y son populares en grandes cantidades. Los proyectos de código abierto incluyen algunos componentes y bibliotecas comunes, como la biblioteca de solicitudes de red AFNetworking y la biblioteca de operación de bases de datos FMDB. Algunos frameworks grandes como beeFramework/ReactiveCocoa son más difíciles de popularizar.

Compatible

El desarrollo front-end debe ser compatible con una gran cantidad de navegadores, incluidos Desktop Chrome, Safari, ie6-ie10, Firefox y varios navegadores como Cheetah 360. Navegadores respectivos para dispositivos móviles iOS/Android y diferentes tamaños de pantalla ilimitados. Parece aterrador, pero en realidad no es tan difícil de hacer. Sólo se usa para asustar a los sirvientes. Chrome/safari de escritorio y el modo de velocidad de varios shells usan Webkit, y la diferencia es muy pequeña. Firefox también generalmente sigue la implementación estándar y no es muy diferente de Webkit. El antiguo IE6/7 necesita cuidados especiales, pero muchos sitios web. IE6 ya no es compatible y todos los terminales móviles son Webkit. Aparte de los diferentes niveles de soporte para nuevas funciones, no hay mucha diferencia. Para diferentes tamaños de pantalla, los de gama alta utilizarán diseños receptivos para adaptarse a diferentes diseños para diferentes tamaños de pantalla. En términos generales, el lado del escritorio tendrá un ancho fijo y el lado móvil se estirará y se adaptará al ancho.

El desarrollo del terminal también debe ser compatible con varias versiones del sistema y tamaños de teléfonos móviles. No hace falta decir que Android, iOS también tiene tamaños de 3,5/4/4,7/5,5/9,7 pulgadas, pero la compatibilidad es tan fácil como. Web. Su ancho adaptable. UIKit de iOS maneja todo esto. También están disponibles funciones avanzadas como diseño automático y sizeClass, por lo que no tiene que dedicar demasiado esfuerzo al tamaño. iOS7 es un punto de inflexión en términos de versión del sistema. Las diferencias de interfaz de usuario entre las versiones anterior y posterior de iOS7 son relativamente grandes y se necesitan algunos esfuerzos para que sean compatibles. Sin embargo, los usuarios de iOS se están actualizando rápidamente y se espera que los usuarios siguientes. iOS7 podrá ignorarlo en uno o dos años más.

Rendimiento

Tanto el terminal como el front-end están orientados al usuario. El propósito de la optimización del rendimiento es presentar el contenido lo más rápido posible y permitir que el programa se ejecute sin problemas bajo las operaciones del usuario. . La principal preocupación del terminal es el rendimiento de almacenamiento/renderizado.

Cuando una aplicación almacena una gran cantidad de datos y tiene relaciones de datos complejas, la consulta de datos puede convertirse fácilmente en un cuello de botella en el rendimiento. Es necesario optimizar continuamente la eficiencia del acceso a los datos, planificar subprocesos de E/S de datos, diseñar la memoria caché y hacer un buen uso. memoria limitada del dispositivo terminal y evite errores de renderizado. Repita el renderizado, reutilice las vistas tanto como sea posible y encuentre la solución de renderizado más eficiente.

El front-end presta atención a la velocidad de carga de la página. Dado que las imágenes de estructura/estilo/programa/recursos de la página web se solicitan en tiempo real, es necesario que la página procese el contenido más rápido. Es necesario optimizar estas solicitudes para que estos recursos se puedan utilizar de la mejor manera posible. Carga rápida, incluida la combinación de imágenes/códigos para reducir la cantidad de solicitudes, la compresión de códigos, las solicitudes paralelas, el almacenamiento en caché de solicitudes de código basadas en números de versión y la compresión gzip. , carga diferida de módulos/imágenes, etc. Además, al igual que la terminal, también prestamos atención al rendimiento de renderizado, seguimos algunas reglas para evitar el reflujo de la página, evitamos el uso de efectos especiales que consumen rendimiento como sombras CSS, usamos animaciones CSS3 en lugar de js, etc.

Compilación

El desarrollo de la terminal requiere el proceso de compilación. El programa se compila en lenguaje de máquina, luego se vincula con varias bibliotecas para generar un archivo ejecutable correspondiente a la plataforma y finalmente se programa y se ejecuta. ejecutado por el sistema operativo. Apple ha encapsulado las reglas de compilación y vinculación en el desarrollo de terminales iOS en la herramienta de desarrollo xcode. No necesita preocuparse por eso en el desarrollo general, pero aún necesita lidiar mucho con la compilación cuando tiene necesidades profundas, como. usar el front-end de compilación Clang para personalizar las reglas de detección de código estático, escribir scripts de compilación para compilación automatizada e integración continua, empaquetar y generar bibliotecas estáticas, optimizar el tamaño de la APLICACIÓN en función de la composición del archivo ejecutable vinculado, etc.

Los programas de desarrollo front-end no requieren un proceso de compilación. Solo necesitan enviar el código al navegador, y el navegador analizará el código y lo ejecutará. Aunque el navegador puede analizar y ejecutar el código js/css sin hacer nada después de escribirlo, para la optimización del rendimiento mencionada anteriormente, todos los códigos y archivos de recursos se procesarán antes de que el código front-end esté en línea. Estos procesos incluyen: comprimir y fusionar. js/css, fusionar gráficos de sprites css, manejar dependencias de módulos, manejar números de versión de recursos de código, manejar posicionamiento de recursos, etc. Este proceso es muy similar a la compilación de programas tradicionales. Optimiza el código para la visualización humana en la visualización de la máquina y resuelve algunas dependencias. Puede considerarse como un proceso de compilación front-end. Herramientas como grunt.js/fis pueden ayudar a completar este proceso de compilación. Por lo general, la compilación front-end se combina con la implementación en línea como parte del sistema en línea.

Seguridad

Aunque los problemas de seguridad del front-end y del terminal no necesitan considerarse tanto como los problemas de back-end, todavía hay algunas cosas a las que se debe prestar atención. En términos de seguridad de las solicitudes, tanto el terminal como el front-end son iguales. Las solicitudes enviadas por los usuarios al back-end deben pasar por capas de enrutamiento y son interceptadas, manipuladas o reproducidas sin saber dónde. Es necesario tomar algunas medidas para prevenir estas situaciones. La más común es la verificación de identidad, que generalmente utiliza un token caducado en lugar del nombre de usuario y la contraseña para evitar que los piratas informáticos inicien sesión permanentemente en la cuenta después de ser capturados. Aquellos con altos requisitos de seguridad de datos utilizarán transmisión cifrada o https. Además, algunos problemas como el secuestro de DNS y la implantación de publicidad del operador también deberán abordarse según la situación.

El terminal rara vez considera otros problemas de seguridad. En una máquina iOS sin jailbreak, el sistema ha ayudado a garantizar la seguridad de todo el entorno de ejecución de la aplicación. En una máquina con jailbreak, los programas maliciosos tienen permisos de root y. Puede hacer cualquier cosa. La aplicación también es difícil de prevenir. En el lado del front-end, las características de los navegadores hacen que el desarrollo del front-end tenga varios riesgos de seguridad. En primer lugar, el código js se puede insertar dinámicamente en cualquier lugar de la página web y el navegador ejecutará estos códigos indiscriminadamente. almacenado uniformemente en cookies. En tercer lugar, la página se puede incrustar con páginas de otros sitios web a través de iframe a voluntad. Causa XSS, CSRF, secuestro de cookies y otros métodos de ataque, por lo que al escribir código front-end, debe considerar estos problemas de seguridad y tomar las precauciones correspondientes. La precaución más simple e importante es filtrar completamente todo el contenido de entrada y salida del usuario para evitarlo. El código malicioso está incrustado en la página.

Interacción/Desarrollo

Finalmente, permítanme hablar sobre mis sentimientos personales sobre la interacción y el desarrollo en estos dos campos. Cuando estaba trabajando en el front-end de la Web, sentí que la Web había retrocedido diez años de interacción entre humanos y computadoras. Las interacciones se trataban de hacer clic y hacer clic, y el desplazamiento era refrescante uno por uno. Mucha gente predicaba sobre lo deslumbrante. efectos que HTML5 podía producir En ese momento, FLASH en realidad se podía producir hace diez años y era más fluido que los navegadores más modernos.

Después de que el iPhone se hizo popular, la interacción persona-computadora finalmente volvió a su nivel adecuado. La experiencia es mucho más fluida que la de la Web, animación suave, gestos deslizantes convenientes, implementación ilimitada, y la corriente principal finalmente ha recuperado o superado lo que era. Fue hace diez años.

Sin embargo, la interacción entre humanos y computadoras ha mejorado, pero los métodos de desarrollo han retrocedido considerablemente. Los métodos de desarrollo web son muy avanzados. Los errores encontrados se pueden reparar inmediatamente en línea, lo cual es especialmente adecuado. para el entorno de Internet, pero la aplicación del terminal no puede hacerlo. Dejando de lado la revisión del iPhone, Android no puede garantizar que los usuarios estén utilizando los últimos programas. Utilizan el método de actualización del cliente tradicional y no se pueden proporcionar correcciones de errores a tiempo. Los usuarios no pueden conectarse decenas de veces al día y necesitan mantener muchas versiones antiguas. El método de desarrollo ha retrocedido a la era anterior a la Web. Todo esto se debe a la red móvil inestable y al tráfico limitado. El terminal móvil no puede depender completamente de la red como el navegador de escritorio, por lo que hasta que la red móvil tenga un tráfico estable y libre, el método de desarrollo no cambiará mucho.

Además, no soy optimista sobre HTML5. Se ha dicho en Internet que puede reemplazar a la aplicación durante tres o cuatro años, pero hasta ahora no he visto sus ventajas. La aplicación nativa puede obtener más recursos del sistema. HTML5 nunca podrá igualar la experiencia de interacción persona-computadora más fluida en este sentido y no puede aprovechar las ventajas de desarrollo de la Web bajo las limitaciones del tráfico y la red móvil. no se generalizará y solo es adecuado para algunas aplicaciones ligeras.