web开发中哪个后端语言开发效率最高

Python041

web开发中哪个后端语言开发效率最高,第1张

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 原生是为博客系统而创建的开源框架,由于博客系统和内容管理系统在功能上很多是相似的,因此它成了最具知名度的内容管理系统(contentmanagement systemCMS)。

在这里并不基于 WordPress 来开发内容管理系统,因为它已经是一个相当成熟的框架了。如果你需要一个博客系统或者内容管理系统,首选 WordPress,然后才是自己编写。

PHP 在框架方面有比较多的选择,遗憾的是,笔者只对Laravel 比较了解。它是在PHP 5.3 之后开发的新框架,其类似于Ruby on Rails—为PHP 程序员提供快速开发的机制—提供快速开发的工具集,如生成代码、数据迁移、ORM 等。

Ruby

Ruby 是一门优美而巧妙的语言,它可以使编写出来的代码看上去更自然、简洁,更具有表达力,因此深受程序员欢迎。早期 Ruby 语言的应用场景特别少,直至Ruby OnRails 的出现。它是严格按照MVC 结构开发的Web 开源框架,其致力于提升程序员的快乐感和生产效率—快速创建页面、模板和查询功能等。不过如今由于可维性和性能的问题,它正在逐渐被替换。只是对初创公司来说,它的开发效率仍使得它是一个不错的选择,随后在业务稳定后使用其他框架来替换。

同样,由于Ruby On Rails 是一个重量级的选择,Ruby 程序员也推出了自己的轻量级框架 Sinatra。它是一个基于Ruby 语言的DSL(领域专属语言),由于其代码行数少,且简单、简洁,可以很容易深入理解框架并对其做出定制

然后就是看项目需要以及团队优势进行选择

Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速、安全地开发现代应用提供了必要的功能。

2011年,Taylor Otwell首次将Laravel带给这个世界,彼时,Laravel就是一个全新且现代的框架。Laravel基于MVC架构,可以满足诸如事件处理、用户身份验证等各种需求,同时通过包管理实现模块化和可扩展的代码,并且对数据库管理有着健壮的支持。

不管是专家还是新手,一旦接触到Laravel,都会有相见恨晚之感——这正是你在为PHP项目寻找的框架。本文我们将讨论为什么Laravel会成为最成功最流行的PHP框架。

模块化&可扩展性

Laravel是模块化和可扩展的,你可以在包含超过5500个程序包的Packalyst中找到你想要添加的任何代码。

微服务&API

Lumen是一个由Laravel衍生的专注于性能的微框架。使用Lumen提供的高性能API你可以更加简单快速地开发微型项目。Lumen使用最小的配置集成了Laravel的所有重要特性,你可以通过将代码复制到Laravel项目来实现框架的完整迁移。

<?php

$app->get('/', function() {

return view('lumen')

})

$app->post('framework/{id}', function($framework) {

$this->dispatch(new Energy($framework))

})

HTTP路由

Laravel拥有类似于Ruby on Rails的快速高效的路由系统。它可以让用户通过在浏览器上输入路径的方式让应用程序的各部分相关联。

Route::get('/', function () {

return 'Hello World'

})

HTTP中间件

Route::get('/', function () {

return 'Hello World'

})

Laravel可以通过中间件对应用进行保护——中间件会处理分析和过滤到达服务器的HTTP请求。你可以使用中间件来验证注册用户、避免跨站脚本攻击(XSS)以及其它安全问题。

<?php

namespace App\Http\Middleware

use Closure

class OldMiddleware {

public function handle($request, Closure $next) {

if ($request->input('age') <= 200) {

return redirect('home')

}

return $next($request)

}

}

缓存

Laravel提供了健壮的缓存系统,使用缓存可以让应用加载地更加快速,从而带来更好的用户体验。

Cache::extend('mongo', function($app) {

return Cache::repository(new MongoStore)

})

身份验证

安全是至关重要的。Laravel自带对本地用户的身份验证,并可以使用“remember” 选项来记住用户。此外你还可以引入一些额外参数,例如是否是活跃用户。

if (Auth::attempt(['email' =>$email, 'password' =>$password, 'active' =>1 ], $remember)) {

// The user is being remembered...

}

集成Stripe

Laravel Cashier可以满足你开发支付系统过程中所需要的任何需求。除此之外,它还同步并集成了用户身份验证系统。所以,你不再需要担心如何将计费系统集成到开发中了。

$user = User::find(1)

$user->subscription('monthly')->create($creditCardToken)

任务自动化

Elixir是一个让我们可以使用Gulp定义任务的Laravel API,我们可以使用Elixir定义预处理器来压缩CSS 和JavaScript。

elixir(function(mix) {

mix.browserify('main.js')

})

加密

一个安全的应用应该做到可以对数据进行加密。在Laravel中,可以使用OpenSSL和AES-256-CBC加密算法来满足你所有的加密需求。此外,所有的加密值都通过认证码进行签名以避免加密信息被篡改。

use Illuminate\Contracts\Encryption\DecryptException

try {

$decrypted = Crypt::decrypt($encryptedValue)

} catch (DecryptException $e) {

//

}

事件处理

Laravel应用中对事件的定义、记录和监听都非常便捷。服务提供者EventServiceProvider中的listen属性包含了应用中的所有事件列表。

protected $listen = [

'App\Events\PodcastWasPurchased' =>[

'App\Listeners\EmailPurchaseConfirmation',

],

]

分页

在Laravel中分页非常简单,因为它能够根据用户在浏览器中的当前页生成一系列分页链接。

<?php

namespace App\Http\Controllers

use DB

use App\Http\Controllers\Controller

class UserController extends Controller {

public function index() {

$users = DB::table('users')->paginate(15)

return view('user.index', ['users' =>$users])

}

}

对象关系映射(ORM)

Laravel包含了一个数据库处理层,其中的对象关系映射被称作Eloquent。另外这个对象关系映射也适用于PostgreSQL。

$users = User::where('votes', '>', 100)->take(10)->get()

foreach ($users as $user) {

var_dump($user->name)

}

单元测试

单元测试的开发是一个耗费大量时间的任务,但是它却保证了我们的应用能够正常工作,不出问题。Laravel使用PHPUnit进行单元测试。

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware

use Illuminate\Foundation\Testing\DatabaseTransactions

class ExampleTest extends TestCase {

public function testBasicExample() {

$this->visit('/')->see('Laravel 5')->dontSee('Rails')

}

}

待办事项清单(Queue)

Laravel提供了在后台使用待办事项清单(to do list)处理复杂、漫长流程的选择,好吧,其实就是队列,队列可以让我们异步处理某些流程而不需要用户在加载页面时长时间的等待。

Queue::push ( new SendEmail ( $ message ))