追求客户端和服务器编程语言的一致有多大的意义

Python010

追求客户端和服务器编程语言的一致有多大的意义,第1张

来说服务器端 JavaScript 的事吧。卖点主要有三个:

一是部分代码可以在服务器端和客户端共享。浏览器只有 JavaScript。通常的例子无非是为了用户体验,将部分表单验证代码写成 JavaScript,用户输入后如果有错误即时提示。表单传输至服务器后,同样的验证过程要在服务器端再次进行,因为你不能相信用户输入(谁不做谁傻逼)。如果服务器端逻辑不是 JavaScript 写的,意味着同样的验证代码要在 JavaScript 和服务器端用的语言同时实现两次。这会导致不一致和维护问题。在移动互联兴起后,另外的一个应用场合是可以在服务器端和客户端均衡计算任务。比如如果客户端是比较强大的桌面浏览器,那么很多计算任务可以在客户端完成。但如果客户端是弱小的移动浏览器,同样的任务也许要考虑转移到服务器端进行,以降低客户端移动设备的电力消耗和提高完成速度。

二是以 Node.js 为代表的服务器端 JavaScript 是完全异步的(asynchronous)。大部分网络服务的前端部分(插话:似乎很多人对前端、后端的理解有误。其实前端和后端都是讲的服务器端的事,而不是通常误解的前端是客户端、后端是服务器端)并非 CPU-bound,而是 I/O-bound。传统的 thread-per-connection 或 process-per-connection 无法有效处理大量客户端的并发、低速连接。现在流行的方式通常是基于 epoll/kqueue 的异步 I/O(但实际上要达到最佳性能还是要权衡异步 I/O 和同步 I/O 的不同性能、代价)。但在大多数语言里面,异步 I/O 的支持或不存在、或不完善,而且通常语法并不适合编写基于异步 I/O 的程序。Node.js 看中了 JavaScript 从一开始就完全异步 I/O、并且匿名函数的语法很适合编写基于回调(callback)的异步程序(至于说嵌套了比如 13 层回调的异步 JavaScript 程序如何维护、调试、除虫,那是另外一码事了……)。并且在 Web Worker 普及之前,由于通常 JavaScript 单线程的限制,要做并发也只能走 event-based + 异步 I/O 这条路。

三是带 JIT 的 V8 JavaScript 引擎效率很不错。现在主流的动态语言里面,执行效率排序大概是 JavaScript >Python >Ruby (假设用常见的实现:V8、CPython、MRI)。

作者:不鸟万Rio

1 后端开发语言

包括但不限于(php, python, java, scala, go, ruby) 之一。 能够使用一门或者数门语言构造大型应用。

2 运维

了解 (ansible, salt, puppet)等自动化运维技术, 了解docker, 熟练掌握shell脚本处理线上问题

3 安全

知道各种安全攻击方式(xss, csrf, sql注入) 代码实现能够规避常见的安全漏洞, 处理各种网络攻击事件

4 数据库

知道常见的数据库的优化以及运维,能够分析sql并且调优使之满足性能

5 网络编程

了解linux的网络模型epoll, 熟练掌握http, tcp/ip协议,并且能够通过抓包方式debug。 熟练掌握linux, 能够在高兵法场景下通过优化内核解决问题。

6 大数据

了解 (hadoop/storn/spark)技术栈, 能够使用大数据技术栈解决常见的大数据问题

7 算法和数据结构

知道常规的算法和数据结构,通过分析代码能了解架构的计算复杂度和性能,并针对性做出优化

8 机器学习算法

知道常见的机器学习算法,能够使用机器学习和深度学习解决一些人工智能问题,比如聊天机器人, 反spam, 机器推荐等

9 搜索引擎

掌握elasticsearch solr等开源搜索引擎,能够搭建搜索引擎实现各种搜索以及排序任务