探讨后端选型中不同语言及对应的Web框架
在进行后端选型的时候,实际上我们要选择的是一个框架。后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架。当存在多个框架适合时,我们再选择适合的语言。不得不指出的是,当我们喜爱一个语言的时候,我们可能会偏爱于在这门语言里寻找可用的方案。这自然是有好有坏,好的一点是:我们可以成为这门语言的专家,不好的一点是:我们可能选择的不是最合适的方案。
让我们先来探索一下可用的语言,以及它们对应的 Web 框架(以下内容均为个人观点):
JavaScript
按照当前的流行趋势来看,JavaScript是一门性价比非常高的语言。因为只要是 Web 就会有前端,只要有前端就需要有 javascript。与此同时 Node.js 在后台中的地位已经愈发重要了。对于一般的项目而言,我们可以使用它来完成前端和后台,除此还有移动应用。
在那些可以使用浏览器来运行的设备上,我们都可以使用 JavaScript 来开发使用,如
- 使用Node.js作为后台语言,Express、Koa等作为后台MVC框架,再选择一个前端框架来实现前台。
- 使用基于浏览器内核的桌面应用Electron,加上Node.js生态系统里的模块来实现桌面应用。
- 使用混合应用移动框架Cordova,混合应用框架Ionic来实现跨平台的移动应用。
- 除此,还可以使用 Tessel 和 Ruff 等硬件来开发移动应用。
人们使用 WebView 和 JavaScript 来开发应用的很大一部分原因是,成本比较低。除了可以高效的开发 UI,还能支持跨平台运行——即只需要编写一次代码就可以在不同的操作系统 上运行。并且当应用对于性能要求不高时,只要适当地优化,它就可以表现得相当不错。
在这门语言里,有两个后台 MVC 框架比较流行:
- Express,是在Node.js上最早的 MVC 框架,它由 Ruby 上的轻量级框架 Sinatra 启发而来的。其框架本身封装了大量实用的功能,核心特性是使用中间件来处理 HTTP 请求。
- Koa,是由 Express 的核心开发者基于 ES6 新特性打造的新框架。与Express相比去除了一些框架自带的功能,更加轻量级,可以让开发者有更多的选择——当然,这也意味着你需要自己去搭建这些环境。
简单的对比一个两者,Express发展得比较早,其生态系统比较丰富——很容易找到所需要的插件。Koa 则基于 ES6 语言带来一些新的特性,实时解决旧语言的一些问题,如回调等等。
Python
Python 诞生得比较早,其语言特性——做事情只有一件方法,也决定了这门语言很简单。与 JavaScript 相比,它仍是一门性价比非常高的语言——除了它不能在前端运行,带来了一点劣势。
python 是一门简洁的语言,而且有大量的数学、科学工具、人工智能的库,这意味着在不远的将来它会发挥更大的作用。同时在 Web 开发领域,他也有广泛的应用,除了正常的 Web 开发,他还在网络爬虫中饱受欢迎。
同样的,在 Python 语言里,也有两个不错的框架可以选择,其中的 Django 是重量级框架,Flask 则是轻量级框架。
- Django,最早是被应用于内容管理系统而开发的,其框架里自带了相当多的组件:ORM、表单序列化及验证系统、后台系统、缓存框架、中间件支持等等。在其官网上宣称是:The Web framework for perfectionists with deadlines,它即可以满足完美主义者,又可以在截止期限前交付软件。
- Flask,则是一个轻量级的框架,它只有简单的核心部分。换句话来说,你可以按自己的需要添加ORM、用户认证、文件上传等等的功能。在今天来看,它的生态系统也相当的丰富,可以完成绝大部分的功能。
选择 Flask 而不是选择 Django 的原因是:Django本身规定好了一系列的规范和习惯。因而在编程时,我们只需要按步骤一步步往下走即可。
本书里采用 Django 作为 Web 开发框架的主要原因是,它适合作为 CMS 框架,并且提供了丰富的组件功能,如我们所需要的用户权限管理、自带后台管理系统、ORM等等。
Java
Java 在今天看来仍然相当的受企业欢迎,除了在企业级 Web 系统开发上,它还在 Android 应用的开发上绽放光彩。
在学校的时候,一点儿也不喜欢 Java。后来才发现,我从 Java 上学到的东西比其他语言上学得还多。如果 Oracle 不毁坏 Java,那么他会继续存活很久。我可以用 JavaScript 造出各种我想要的东西,但是通常我无法保证他们是优雅的实现。过去人们在 Java 上花费了很多的时间,或在架构上,或在语言上,或在模式上。由于这些投入,都给了人们很多的启发。这些都可以用于新的语言,新的设计,毕竟没有什么技术是独立于旧的技术产生出来的。
由于在 Java 语言里,我主要接触的是 spring 框架,因此让我们来讨论一下 Spring:
- Spring MVC,是由 Spring 框架提供的构建 Web 应用程序的全功能 MVC 模块。由于框架本身高度可配置,即可以直接使用编写 XML 而不是 Java 来实现功能。它是一个典型的 MVC 框架,并且也是一个纯正的servlet系统。
- Spring Boot,其作用在于创建和启动新的基于 Spring 框架的项目。系统本身做好了对不同框架的配置与集成,我们只需要对其配置,并编写少量的代码即可。
如果你正在考虑使用 Spring 框架,那么请使用 Spring Boot。
PHP
PHP是一门很容易上手的语言,由于其容易上手,并且发展得比较成熟。有相多当的个人网站使用它作为开发语言,除此还有诸如 Facebook 这样大流量的网站也在使用它。除此不得不提及的是 WordPress 已经占领了 CMS 市场超过一半的份额,并且它也占领了全球网站的四分之一。WordPress原生是为博客系统而创建的开源框架,由于博客系统和内容管理系统在功能上很多是相似的,也因此它成为了最具知名度的内容管理系统(CMS,content management system)。
在这里我们并不基于 WordPress 来开发我们的内容管理系统,因为它已经是一个相当成熟的框架了。如果你需要一个博客系统或者内容管理系统,首先先写 WordPress,然后再自己编写一下吧。
php在框架方面有比较多的选择,遗憾的是笔者只对Laravel比较了解。它是在PHP 5.3之后开发的新框架,其类似于Ruby on Rails——为PHP程序员提供快速开发的机制——提供快速开发的工具集,如生成代码、数据迁移、ORM等等。
Ruby
Ruby是一门优美而巧妙的语言,它可以使编写出来的代码看上去更自然、简洁,更具有表达力,因此而受程序员欢迎。早期 Ruby 语言的应用场景特别少,直至Ruby On Rails的出现。它是严格按照MVC结构开发的Web开源框架,其致力于提升程序员的快乐感和生产效率——快速创建页面、模板和查询功能等等。不过在今天由于可维性和性能的问题,它正在逐渐被替换。只是对于初创公司来说,它的开发效率仍使得它是一个不错的选择,随后在业务稳定后使用其他框架来替换。
同样的,由于 Ruby On Rails是一个重量级的选择,Ruby程序员也推出了自己的轻量级框架 Sinatra。它是一个基于Ruby语言的DSL( 领域专属语言),由于其代码行数少,简单简洁,可以很容易深入理解框架并对其做出定制。
其他
除了上面我们提到的语言,还有一些语言也很不错,如Go、Scala等等。限于作者能力有限以及篇幅的原因就不展开详细的讨论。
节选自:《全栈应用开发:精益实践》
亚马逊:https://www.amazon.cn/dp/B0722YJR89
京东:http://item.jd.com/12195442.html
当当:http://product.dangdang.com/25077858.html
探讨后端选型中不同语言及对应的Web框架的更多相关文章
- Go语言笔记[实现一个Web框架实战]——EzWeb框架(一)
Go语言笔记[实现一个Web框架实战]--EzWeb框架(一) 一.Golang中的net/http标准库如何处理一个请求 func main() { http.HandleFunc("/& ...
- dotweb——go语言的一个微型web框架(一)
dotweb是16年正式托管到github的一个开源项目,go语言的web框架目前也有很多,出名的有bee和echo.它们都是很优秀的框架,但是我们喜欢更轻.更小的东西,经历一些之后我们更青睐微服务这 ...
- dotweb——go语言的一个微型web框架(二)启动dotweb
以上的代码截图表示启动一个dotweb服务,在浏览器里输入127.0.0.1:8080,将会得到一个"index"的页面. app := dotweb.New() dotweb.N ...
- dotweb——go语言的一个微型web框架(三)路由注册
上一章我们讲了如何启动一个dotweb程序,本篇文章将介绍如何注册路由. router是dotweb用来管理路由的结构体,它提供了一些关于路由操作函数. app := dotweb.New() rou ...
- 最好的6个Go语言Web框架
原文:Top 6 web frameworks for Go as of 2017 作者:Edward Marinescu 译者:roy 译者注:本文介绍截至目前(2017年)最好的6个Go语言Web ...
- 03--(二)编程实践中C语言的一些常见细节
编程实践中C语言的一些常见细节(转载) 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所 ...
- Windows Store App 全球化:应用中设置语言选项
当开发者将开发的应用上传到Windows应用商店以后,使用Windows 8系统的用户可能会看到并下载这些应用,而这些用户所在的区域或者所使用的语言可能都不相同,如果他们在使用应用程序时希望改变应用显 ...
- OJ提交题目中的语言选项里G++与C++的区别(转)
G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已. 那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C++都代表编译的方式. ...
- android 在应用中切换语言
场景: 在设置中切换中英文,然后跳转MainActivity....步骤: 1.在MyApplication 中初始化语言 public class MyApplication extends App ...
随机推荐
- 转载:2.2.1 块配置项《深入理解Nginx》(陶辉)
原文:https://book.2cto.com/201304/19626.html 块配置项由一个块配置项名和一对大括号组成.具体示例如下:events {-} http { upstream ba ...
- Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业
利用并查集进行处理,定义一个维护数组components,components[i]表示变量序号为i的变量所处的集合,首先处理相等的变量,把它们放入同一个集合中,最后再处理不相等变量,若两个不相等的变 ...
- Oracle系统表外键的更名
正在看的ORACLE教程是:Oracle系统表外键的更名. Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系.外键涉及到两个表,其中一 ...
- 前端开发必须知道的JS(一) 原型和继承
原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会讲下闭包,希望对大家有所帮助.若有疑问或不正之处,欢迎提出指正和讨论. 一. 原型与构造函数 Js所有的函数都有一个protot ...
- TP5.1:request请求对象(使用四种方式获取)
准备: 在index/controller下创建一个名为requests.php的文件(注意:不要起名为request,因为它是关键字,不被允许起名) 动态方法和静态方法的区别: 静态方法:publi ...
- Ext.js项目(一)
这个项目整体采用代码生成器生成,具体看下图:
- 【APUE | 08】进程控制
函数fork 博文链接: 1. 代码示例: #include "apue.h" ; char buf[] = "a write to stdout\n"; in ...
- Xshell不能使用退格、删除键进行删除的解决方法
xshell在输入命令时,如果敲错字母了的时候,想通过按退格键删除敲错的字母,却在屏幕显示出了“^H”,退格不行,再按删除键,却显示出“^[[3~”,怎么着就是删除不了输错的字母. 修改办法:文件-- ...
- PHP PC端微信扫码支付【模式二】详细教程-附带源码(转)
博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们! 首先还是 ...
- .NET正则平衡组
1 概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...