你应该知道的9款流行 Web 框架及其优缺点

对于 Web 开发人员来讲,找到一些合适的工具,能让工做轻松许多。这其中,Web 框架更是提高工做效率的“利器”。但由于可选的 Web 框架很是多,如何选择也是一件使人头疼的事情。python

本文列出了9款目前比较流行的 Web 框架,并对优缺点进行分析,但愿能对你们有所帮助。(内容主要编译自Ken Mazaika的The 9 Most In-Demand Web Frameworks And What You Need To Know About Themlaravel

首先,web

什么是 Web 框架?

当 Web 浏览器使用 HTTP 和在其余地方运行的服务器(计算机)通信时,这些服务器会收到一些通知:数据库

  • 所选的 URL
  • 如何输入网址(经过表单提交或只是在浏览器栏中输入网址)

服务器要干不少事情,好比:express

  • 读取数据库里的数据和添加数据
  • 找到正确的结果(用户是否被容许查看试图访问的页面?是否要发送到不一样的URL?等等)
  • 构建用户将看到的网页

若是要提供更复杂的功能,就须要执行更多的步骤。做为开发人员,则须要对想要的功能列出一系列解决方案。Web 框架就是其中可选的解决方案之一。django

进入正题:编程

一、Ruby on Rails

编程语言:Rubyjson

简介:浏览器

Ruby on Rails 是一个已经被许多公司采用的 Web 框架,是 Ruby 编程语言中 Web 框架的鼻祖,得到了大量开发者的采用。DHH(Rails 的创始人)曾用它15分钟左右建立一个博客ruby

Rails 的一大特色是约定优于配置(convention over configuration)。这意味着,它比较模式化、标准化和“约定化”,开发者一般作的是相同的事情,可让代码写到最少。 

Rails 还使用了 MVC(Model-View-Controller),让架构更有组织性,更周密。

优势:

  • Rails 具备强大的命令行界面,经过几个简单的命令就能在新的应用上启动和运行。
  • Rails 已经存在很长时间了,而且普遍被使用,网络上有不少关于它的教程。
  • Rails 简单易用,即使是复杂的问题,也能相对快速解决。

缺点:

  • Rails 自动挂钩了不少东西。启动器里就包含不少文件,而且有至关多的配置代码是自动编写的,有些人可能会对此担忧。

总体来看,鉴于其灵活性及便捷性,Rails 是一个很是理想的 Web 框架,值得初学者优先学习。

二、Sinatra

编程语言:Ruby

简介:

上面的5行代码就是作一个最低限度配置的空 Web 应用所须要的所有代码, 若是拿它和 Ruby on Rails 进行比较,会发现它须要的代码更少(并且只有一个文件,而不是几十个)。

然而,Sinatra 的简单性是一把双刃剑。 它用的是和 Ruby on Rails 相反的方法,须要开发者手动配置全部的东西。

优势:

  • Sinatra 是轻量级框架的领头羊。
  • Sinatra 高度可配置,注重开发的自由度。

缺点:

  • 因为不侧重“惯例”,没有相同的文件夹结构,因此会比较难去理解现有的 Sinatra 应用。 
  • Sinatra 不经常使用于实际生产项目当中。
  • 手动配置不少东西每每须要更多的时间,效率会受影响。

三、ExpressJS

编程语言:JavaScript

简介

ExpressJS 是一个 JavaScript Web 框架,基于 Node.js。看起来有没有熟悉,它的代码很是相似 Sinatra 的代码,也有和 Sinatra 类似的简单性。 在一个准 Express 应用中只有两个代码文件:

  • package.json,这是 NPM 自动生成的文件。
  • app.js,这里包含着应用程序的完整代码。

优势

  • 高灵活性。
  • 能够只使用一种编程语言。
  • 轻量。

缺点

  • 更多选项=更多选择。 选择意味着须要研究不一样的选项,找出将它们应用到本身的项目当中的方法,这每每须要更多时间。

四、SailsJS

编程语言:Javascript

简介

SailsJS 能够当作是 JavaScript 版的 Rails,有一个命令行工具去生成一个完整的默认应用程序,自带许多合理的默认配置和数值。

一样,Sails 也有 MVC 架构,启动一个完整的应用也会有数十个默认的文件。

优势

  • 有许多默认已配置好的方法完成构建 Web 应用所涉及的大部分工做。 
  • 命令行程序使得构建新应用和功能更为轻松。

缺点

  • 尽管是一个看起来很强大的框架,人气也不低,可是并无多少公司采用。

五、MEAN 堆栈

编程语言:JavaScript

简介

MEAN 是 ExpressJS 的扩展,堆栈了如 MongoDB、AngularJS 和 WebPack 等技术。MEAN 用JavaScript 一种语言来驱动整个应用。

MongoDB 是一个在概念上与其余大多数据库有较大区别的数据库,它容许 JSON 数据在其中自由随意,这意味着数据库条目是灵活的,但同时也致使无效的记录成了一个很是容易遇到的问题。它不是经过 SQL 与数据库交互,而是使用其独有的 JavaScript。

优势

  • 与 SailsJS 同样,MEAN 堆栈包含构建复杂 Web 应用所需的全部组件。

缺点

  • 页面加载要两个阶段,并且第一阶段看起来有点搞笑。发生这种状况是由于视图不是在服务器端呈现,而只在浏览器中呈现。这意味着用户最初看到的是不完整的页面,页面的完整内容要过一会才能加载。
  • MEAN 堆栈包含许多技术,如 MongoDB,在其余框架中构建 Web 应用时一般不使用这些技术。

补充几句我的观点

这个包含 MongoDB 的框架对我来讲毫无心义,几乎全部其余 Web 框架都使用标准数据库 SQL。在我看来,MEAN 堆栈可能只在那些 MongoDB 真正“发光发热”的场景中有价值,但 Mongo 又是一个在高负载的时候才须要的东西,好比广告网络和 API 负载高的时候。

不能否认 MEAN 在某些状况下是有意义的,但对于典型的 Web 应用,我不太建议使用。由于 MEAN 在应用的每个部分只使用 JavaScript 编程语言,这听起来会很容易掌握,可是像 MongoDB 和 WebPack 这样的东西使得 MEAN 实际上比那些解决问题的“标准”技术更困难。 

六、Django

编程语言:Python

简介

Django 是一个运行在 Python 上的 MVC Web 框架。 它也有一些打开即用的配置,它与 Ruby on Rails 框架有许多类似之处,也有很多区别。 这个 Web 框架改变了控制器和视图的职责,但毫无疑问它是一个优秀的 Web 框架。

优势

  • 轻量、少配置。
  • 提供完整的开发堆栈,同时仍然遵循 Python 的“清晰”语言的设计理念,容许在快速开发和长期维护之间实现平衡。

注意

  • Python 是一种相似于 Ruby 的语言,但它们的使用者会有不一样的领域倾向, 一般使用 Python 的开发人员每每是在数据科学、统计或分析领域工做。

七、Tornado

编程语言:Python

简介

Tornado 是一个没有怎么宣传的 Python Web 框架,它快速、高效,并容许开发人员访问 python 的大数据库。

优势

  • 在须要短期内发生许多请求的状况下是优秀的。

缺点

  • 结构的缺少致使应用相互不一样。
  • 对于初学者来讲,拥有太多的自由可能会致使乱码。在其余的框架中有过经验的开发人员更愿意以深思熟虑的方式去构建应用。

八、Play

编程语言:Java 或 Scala

简介

Play 一样是一个轻量级的、无状态的 Web 框架,学到了 rails 的优势,使用构建在 Akka 之上的彻底异步模型,提供可预测的和最小的资源消耗(CPU,内存,线程)。

优势

  • 在 Java 虚拟机上运行,Play 是最高效的编程环境之一。

缺点

  • 大多数 Web 应用都是用所谓的“脚本语言”构建的,容许快速更改页面的视觉效果。 Java 增长了一个称为“编译”的步骤,须要在应用的更改之间进行。

九、Laravel

编程语言:PHP

简介

Laravel 是一个用 PHP 编写的框架。 10年前,PHP 是几乎全部 Web 应用构建的标准编程语言,不过现在,受 Ruby、JavaScript 和 Python 影响,PHP 失去了很大的市场份额。

尽管如此,Laravel 还是一个很是成熟的框架,容许使用 PHP 构建漂亮的代码。

优势

  • Laravel 是一个很完美的 MVC 框架,借鉴了 Ruby on Rails 框架中使用的许多架构决策。

缺点

  • 使用 PHP 的开发人员和产品在减小(原文是这么写的^_^)

 

最后再说点

看完上面列出的这些不一样的框架,很容易发现它们有互相在寻找灵感,许多功能、特性其实还蛮类似的。因此,说哪一个好哪一个很差,并无什么意义,找到合适本身的才是关键。上面的框架能够简单分为两种类型:

1、简约框架

ExpressJS、Tornado 和 Sinatra 都是简约框架,他们提供启动须要的最低配置。

这些框架须要开发人员手动添加每一个单独的组件,给予足够的自由度去完成项目。此外,经过强制本身配置应用的各方各面,能够掌控更多主动权,并在每种状况下都使用理想的工具。

固然,也有一些缺点。会常常发现本身处于须要分析不一样选项并作出不少选择的状况下。

2、Omakase 框架

Rails、SailsJS、MEAN.io、Laravel 和 Play 都是 Omakase 框架,它们建议开发者以某种“正确”的方式编写代码,而且给出社区标准。

这些框架提供开发所须要的一切,打开便可编程。若是想使用其余的东西,它们还容许选择停用。构建这些框架的开发人员已经为后来者作出了一些关键决策,所以能够遵循他们建议使用的模式。

这对初学者来讲有很大的优点,初学者每每在学习 Web 框架的时候,你还须要学习数据库、HTTP 请求、设置应用在 Internet 上运行等等知识。因为有一个被普遍接受的社区标准,学习一个像 Rails 这样的 Web 框架能够:

  • 了解社区如何赞成以正确的方式作某事。
  • 有时间思考其余编程概念,学习其余知识。
  • 一旦学习了某个框架社区的建议,将有经验来更好地评估其余框架。
相关文章
相关标签/搜索