服务器后端的编程语言
    Sunday, December 4, 2016
    8:56 AM
    ![本 文 来 自 : CSDNtÜ 客 版 权 归 届 原 作 者 服 务 器 后 端 的 编 程 语 言 @仃 程 厚 猿 & & 酷 勤 网 制 作 对 于 那 些 需 要 we b 服 务 的 初 创 公 司 里 的 大 型 新 项 目 , 我 会 选 降 何 种 后 端 编 程 语 言 呢 ? 在 客 F 端 仉 有 css 、 htmlQ javascript ( 类 衍 生 语 ) 可 供 选 降 。 而 对 于 存 储 , 我曾竖馬 过 mysql_Qredls , 这 也 基 本 够 了 。 但 是 选 降 服 务 器 端 的 语 言 却 没 那 么 容 剔 。 我 曾 使 了 好 长 时 间 的 php , 因 为 在 我 刚 开 始 程 时 佞 , 它 最 简 单 , 成 本 也 最 低 。 但 是 时 过 境 迁 , 觋 在 的 我 不 再 昂 贵 的 服 务 器 托 管 了 。 尽 管 我 对 web 项 目 的 没 那 么 多 , 但 我 还 是 想 分 享 自 己 的 一 些 看 法 。 定 义 : 后 端 与 安 全 性 事 先 声 明 一 下 : 我 只 讨 论 后 端 。 所 诓 的 后 端 , 指 的 是 处 理 服 务 器 请 求 的 数 据 唼 入 层 。 它 需 要 肩 负 着 处 理 很 多 请 求 ( 大 于 100 请 求 每 秒 ) 和 快 速 处 理 请 求 ( 平 均 处 理 时 间 小 于 300mS ) 的 职 责 。 而 那 些 可 以 被 提 前 计 笪 , 或 者 是 不 需 要 直 唼 展 亍 给 客 F 端 的 繁 重 计 笪 的 工 作 , 则 并 不 适 合 后 端 进 行 处 理 。 这 些 工 作 可 以 通 过 其 他 的 语 言 通 过 另 外 的 方 式 实 觋 。 后 端 也 并 不 直 唼 处 理 对 F 的 展 现 , 这 是 前 端 应 该 做 的 。 但 是 后 端 开 发 者 , 应 该 对 如 何 给 前 端 提 供 数 据 有 着 清 晰 的 认 知 。 我 所 见 过 最 晰 的 方 式 就 是 在 前 后 端 之 间 使 纯 Restful AP [ 进 行 交 互 后 端 语 言 也 应 该 很 容 易 校 验 前 端 发 来 的 数 据 , 方 便 的 连 接 数 据 库 , 以 及 从 文 件 系 统 保 存 或 是 获 取 文 件 。 在 唼 下 来 的 篇 幅 中 , 我 会 描 述 语 言 的 安 全 性 。 但 这 并 不 意 味 着 你 不 能 不 安 全 的 语 言 写 出 安 全 的 代 码 而 是 不 同 语 言 译 器 能 够 保 证 你 的 代 码 不 出 觋 某 些 特 定 的 bug 。 举 例 而 , C 的 译 器 并 不 进 行 边 界 检 查 , 因 此 它 是 一 种 菲 常 不 安 全 的 语 言 而 那 些 可 以 被 自 动 工 具 检 查 出 来 的 错 误 包 括 · 语 法 错 误 · 读 越 界 · 内 存 溢 出 ( c / c + + 并 不 查 , 但 在 」 ava 中 几 乎 不 可 · 耒 被 使 的 变 量 · 类 型 问 题 : 这 个 问 题 略 微 有 些 馍 棱 叻 可 , 因 为 在 每 种 语 言 你 都 能 写 出 强 类 型 的 代 码 。 但 是 在 一 些 语 言 中 类 型 更 为 常 见 。 有 些 语 言 同 样 也 使 类 型 系 统 来 发 现 错 误 。 举 例 而 言 , p h p 从 这 个 意 义 上 来 说 十 分 不 安 “ 都 可 以 为 true. PythoniäiH 安 0 2 gab 1 2 3 = 全 一 点 , 但 你 却 可 以 随 意 的 返 回 值 。 va 相 比 之 下 安 全 多 了 。 Haske ] 从 这 个 层 面 来 说 更 加 安 全 , 因 为 它 的 强 类 型 系 统 会 拒 绝 执 行 任 何 无 意 义 的 表 达 式 , 同 时 也 不 会 进 行 任 何 形 式 的 强 制 转 换 。 在 程 序 的 运 行 时 , 也 有 一 些 错 误 会 被 发 觋 。 而 在 不 同 的 语 言 中 , 对 这 种 运 行 时 错 误 的 处 理 完 全 不 同 。 举 例 来 说 , C_Q c + + 会 默 默 的 实 败 。 ( 像 这 个 链 接 里 说 的 ) 这 当 然 是 很 不 好 的 。 相 比 C / C + + 对 越 界 错 误 的 忽 略 , Rust 则 会 发 出 明 显 的 提 亍 ( 之 前 的 heartb 尾 ed 是 一 个 典 型 的 例 子 , 可 以 看 看 这 篇 文 章 ) 当 然 了 , 所 有 这 些 问 题 都 可 以 通 过 良 好 的 测 试 来 发 觋 。 但 是 , 能 够 被 动 化 的 过 程 越 多 , 当 你 测 试 不 那 么 充 分 的 时 候 , 可 能 发 生 的 意 外 也 就 越 少 。 Java 是 跑 在 」 ava 虚 拟 机 的 面 向 对 象 的 语 言 对 于 商 业 网 站 而 Java , java 是 使 最 广 泛 的 语 言 为 什 么 呢 ? · java 比 较 成 熟 : 1995 年 就 已 出 现 。 很 多 大 学 都 会 教 授 」 ava , 很 多 人 也 因 此 至 少 对 它 一 知 半 解 。 所 以 公 司 寻 找 」 ava 的 开 发 者 也 并 不 困 唯 。 尽 管 那 些 号 称 了 解 」 ava 的 人 可 能 都 是 泛 泛 之 。 Java 的 生 态 系 统 非 常 成 熟 、 [DE 有 eclipse 、 IntelliJ[DEA 和 Netbeans Je nkins 进 行 恃 续 集 成 GlassFish Apache Ant/Apache 进 行 动 化 构 建 」 Unit , M 。 ( k ] t 。 是 动 化 单 元 测 试 的 利 器 g4 」 和 g4 」 2 进 行 打 g 。 Apache 」 Meter 进 行 负 载 测 试 」 ersey 提 供 RESTful 的 webßE 务 Apache Tomcat/WlldFly: 应 服 务 器 web 服 务 器 、 servlet 容 器 Grizzly/Jetty: WebßE 务 器 FindBugs,SonarQubeiF 行 代 码 质 量 吧控 与 静 态 代 码 分 析 行 ORMapping 像 Spring , JSF,JSP,Apache Struts 2,Apache W 化 ket 这 类 框 架 。 Java_E 由 Oracle 发 的。 因 此 当 遇 到 的 问 题 的 时 佞 , 可 以 向 他 们 寻 求 技 术 支 時 上 述 是 」 ava 的 优 点 , 那 么 它 的 缺 点 呢 · 非 常 笨 拙 的 语 法 。 为 了 完 成 一 个 功 能 , 你 可 能 要 打 很 多 字 。 当 然 动 补 全 是 必 不 可 少 的 , 但 是 要 打 的 午 西 还 是 不 少 。 代 码 越 多 , 维 沪 起 来 成 本 越 高 · 要 吧 一 个 工 具 跑 起 来 难 度 很 高 · 那 些 被 设 计馬 来 扩展 的 super-abstractætl , 事 实 上 可 能 永 远 不 会 被 到 。 · 因 为 没 有 指 针 的 存 在 , va 不 能 访 问 越 界 的 数 组 , 所 以 比 c / c + + 安 全 一 些 。 那 些 烦 恼 你 的 内 存 溢 出 也 几 乎 不 存 在 了 。 但 是 付 出 的 代 价 就 是 语 法 更 加 的 复 杂 而 且 你 如 果 一 不 小 心 , 就 会 掉 入 」 ava 中 得 不 安 全 的 陷 阱 。 · 速 度 和 内 存 使 量 : va 在 速 度 上 并 不 突 出 , 而 在 内 存 使 上 则 是 相 当 的 多 。 但 是 这 并 没 给 它 的 大 范 围 使 用 带 来 太 多 的 问 题 。 感 兴 趣 的 可 以 看 看 这 篇 文 章 对 于 」 ava 还 可 以 参 考 以 下 文 章 · Java 是 编 译 还 是 解 释 性 的 语 言 ? 答 案 是 否 定 的 , 但 是 」 ava 可 能 不 想 听 到 这 个 结 论 : ) · 为 什 么 我 听 到 了 这 么 多 关 于 」 ava 不 安 全 的 论 点 ? 其 他 语 言 更 安 全 么 ? 、 案 也 是 否 定 的 , 想 想 C / C + + 吧 · 」 VM 对 服 务 器 的 安 全 性 C++ 性 能 Vs Java/C# JavaScript: Node.js Node 书 从 2 佣 9 年 发 布 一 下 , 使 十 分 广 泛 。 NodejsA 有 异 步 , 事 件 驱 动 以 及 可 扩 展 的 特 性 。 Node.js 应 馬是 由 JavaScript 发 的 , 因 此 它 具 有 」 avaS ( ript 的 所 有 优 点 · 享受 到 了 JavaScript V8 引 擎 的 好 处 · 灵 活 而 轻 量 级 的 语 法 一 样 , 」 avas ( ript 出 觋 在 1995 年 。 所 以 语 本 · ENJava 身 发 展 历 史 很 长 , 相 对 樽 定 。 很 多 开 发 者 都 或 多 或 少 的 了 解 一 些 」 avas ( rip t 。 生 态 系 统 很 成 熟 npm_Qboweri# 行 包 管 理 行 MVP/MVC Unit.jsi# 行 单 元 测 试 。 Grunt 进 行 动 化 任 务 管 理 Sequelizei 行 ORM 。 Karma 进 行 测 试 构 建 expressjs : web 应 框 架 。 很 多 非 常 简 单 的 教 程 还 有 什 么 要 补 充 的 ? · Node 很 快 , 而 且 可 扩 展 。 ( 参 Performance Comparison Between Node.js and Java EE ) · 」 avaScript 不 太 安 全 。 即 使 很 小 的 语 法 错 误 也 口 会 在 执 行 的 时 佞 暴 露 出 来 。 因 此 单 元 测 试 十 分 重 要 NodejsFLlnked[n , Yahoo!, Uber, PayPal 使 用 · 有 很 多 人 从 N 。 de.js 转 向 了 G 。 123 参 者 · 如 何 决 定 何 时 使 N 。 dejs · 如 何 debug Node.js 的 应 Node.jsÄf• G 0 GoZ 由 Google 开 发 的 , 静 态 类 型 的 编 译 语 言 它 直 到 2 佣 9 年 才 出 现 , 十 分 短 皙 。 · G 。 提 供 了 那 些 你 进 行 we b 开 发 需 要 的 基 本 工 具 一 个 we b 开 发 框 架 0 GOnlC: 。 mustachel 行 馍板痛 染 0 gorm : ORM · 有 不 错 的 教 程 和 一 些 we b 开 发 的 材 料 · 有 一 些 任 务 在 Go 语 言 中 超 过 顸 期 的 复 杂 , 比 如 排 序 详 见 link · G 。 有 一 些 跟 其 他 语 言 完 全 不 同 的 diffuser, 比 如 如 果 你 想 声 明 一 个 pub 雇 方 法 , 那 这 个 方 法 的 第 一 个 字 母 一 定 要 是 大 写 的 。 还 有 耒 被 使 的 变 量 会 导 致 编 译 错 沃 。 参 者 · Gin Gonic 可 能 比 M “ t 丽 快 40 俨 , 但 却 没 什 么 丨 uan · GO vs Node.js C c # 是 由 微 软 开 发 的 具 有 静 态 类 型 的 编 译 语 言 但 是 它 却 有 很 多 动 态 特 性 。 它 出 觋 在 2 佣 0 年 。 而 针 对 web 开 发 的 框 架 ASP.NET 直 到 2002 年 才 发 布 。 c # 的 生 态 系 统 包 括 · buget 、 org · [IS’ webhE 务 器 · Enity Framework: ORM · L[NQ: SQLFfi · Visual Studio: [DE · ASP.NET: MVC 框 架 我 对 C # / ASP.NET 的 理 解 并 不 深 入 , 因 此 无 法 更 详 尽 的 分 析 它 的 优 略 。 Python pyth 。 n 是 觋 在 在 的 最 古 老 的 语 言 之 一 。 它 最 早 出 觋 于 1991 年 。 Python 是 具 有 动 态 的 类 型 , 面 向 对 象 的 解 释 性 语 而 且 它 具 有 函 数 程 的 特 性 尽 管 我 曾 在 很 多 项 目 中 使 过 Python , 但 并 不 包 括 web 项 目 。 因 此 那 些 重 要 的 工 具 和 框 架 可 能 会 被 遗 · 生 态 系 统 . 。 pypi python.org 和 pip 包 托 管 和 包 管 理 。 Sphinx: 自 动 代 码 文 档 生 成 , 比 如 SCIPY docs 就 是通 过 Sphinx 生 成 的 。 这 是 我 所 见 过 的 最 好 的 文 裆 。 Django/Flash 作 为 框 架 。 pytest/nosei# 行 测 试 。 gevent: 基 于 协 程 的 Python 网 络 框 架 。 Tornado: WebßE 务 器 · 有 些 使 Pyth 。 n 的 开 发 者 切 换 到 了 G 。 12 有 不 错 的 教 程 和 很 赞 的 文 裆 · Python 。 Flash 。 dJand0b00k 、 com 和 docs.djangoproject.com 。 fullstackpython 、 com · Flask_0Django 配 apypy( 源 码 ), 性 能 会 更 高 . 那 些 使 Pyth 。 n 的 成 熟 公 司 0 0 Prez1,Plnterest,[nstagram(source) 0 Bitbucket, The Onionsource 我 认 为 Pyth 。 n 最 芏 要 的 优 在 于 代 码 容 易 麟 写 , 而 且 可 读 性 很 高 我 对 Python 显 然 是 有 偏 爰 的 , 而 且 我 坚 信 很 多 人 和 我 有 着 同 样 的 观 点 。 PHP PHP 是 动 态 类 型 的 服 务 器 端 语 言 , 它 在 1995 年 被 推 出 。 · 语 言 的 不 连 续 性 是 PHP 很 大 的 一 个 问 题 , 可 以 看 看 这 篇 文 章 · 生 态 系 统 是 比 较 完 善 的 。 PHPC[_Qcrwsecontr011 行 恃续 集 成 Zend Framework/Symfony 有 类 似 于 CakePHP 和 Code Igniterfi 类 轻量级 框 架 0 Drupal/Joomla/TYP03/WordPress 。 PHPUnit1* 行 单 元 测 试 。 行 包 管 理 , packagist.org 来 寻 找 phpä PHP 最 大 的 优 是 学 习 门 槛 低 。 它 基 本 可 以 在 任 何 地 方 被 执 行 , 托 管 和 菲 常 简 单 。 Wikipedia 使 的 , 所 以 很 明 显 使 PHP 来 创 建 可 的 大 型 网 站 是 可 行 的 。 Hack Ha ( k 是 由 Fa ( eb 。 。 k 在 2014 年 开 发 的 编 程 语 言 它 EPHP 的 变 体 。 它 与 PHP 最 主 要 的 不 同 在 于 · 函 数 参 数 和 返 回 值 是 指 定 类 型 的 · Ha ( k 并 不 完 全 支 時 PHP 的 一 些 特 性 source , 匕 匕 女 囗 goto 、 可 变 变 量 字 符 串 堆 , 这 有 时 候 也 挺 好 的 。 参 考 · hacklang.org R u s t Rus t 是 很 安 全 的 语 言 但 是 对 于 它 在 生 产 环 境 的 使 , 仍 有 疑 虑 。 参 者 · Rust Web Frameworks 其 他 Ruby with Rails: 我 知 道 它 应 广 泛 , 但 是 我 对 Ruby 的 了 解 并 不 充 分 。 Ruby 的 语法 与 Python 类 似 。 Web Framework Benchmarks · 网 站 服 务 器 端 的 程 语 言 使 · todobackend com: 很 不 多 不 同 的 后 端 技 术 集 合 · bento.io: 不 少 教 程 · RedM 。 nk 的 编 程 语 言 排 行 : 20 巧 年 1 月 · 不 同 程 语 言 的 对 比 结 论 仔 细 想 来 , 对 我 来 说 以 下 的 语 言 更 适 合 我 做 后 端 · Go : 很 快 , 而 且 是 编 译 型 的 · nodeJs: 很 好 的 可 扩 展 性 · Python’ 这 是 我 最 了 解 的 语 言 除 此 之 外 , 它 有 非 常 蒲 晰 的 语 法 , 很 好 的 社 区 开 发 的 变 法 风 格 以 及 易 读 性 。 对 我 来 说 不 适 合 的 语 言 · P H P: 因 为 语 言 的 不 一 致 , 导 致 建 立 隐 定 的 后 端 没 那 么 简 单 · C#: 这 个 语 言 太 以 微 软 为 中 心 了 · Java 语 法 有 点 拖 沓 , 成 本 高 其 他 语 言 可 能 也 是 很 好 的 选 择 , 只 是 我 知 之 甚 少 。 我 对 rus t 在 后 端 使 的 可 行 性 非 常 好 奇 。 Ha ( k 语 言 非 常 年 轻 , 让 我 们 对 它 耒 来 的 发 展 拭 目 以 待 来 自 : http://t.cn/Ryt92SZ](https://cdn.nlark.com/yuque/0/2021/jpg/3018302/1639544470286-c5091ffa-ae66-4ae9-ad13-8853704103c5.jpg)
    查看源微博
    已使用 Microsoft OneNote 2016 创建。