Web流行框架一决高下:"快"不一定"好"

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

使用Web开发框架,可以帮助开发者提高Web应用程序、Web服务和网站等Web开发工作的质量和效率。本文主要是对当今流行的Web框架进行比较,通过对比,你将会看到我们经常使用的在F/OSS(开放源代码软件)下Web流行框架的测试结果。

  测试的结果有价值吗?

  或许没有价值,当涉及到代码,也许就能凸显出它的价值所在。我尽可能的试着将每一个测试做到公平、准确。或许考虑测试结果的科学性,这种想法是愚蠢的。本文的目的并非一定要弄清楚每个框架是如何进行快速的最佳优化配置(在默认允许的情况下,内置缓存和其他性能调整通常被启用),而是更加倾向于分享经验。

  此外,无非是想让Web开发发展的更好。但是,当使用适合的工具工作时,“快”并不一定意味着“更好”(极少数world项目单靠页面请求速度)。

  一、Full stack(ish):Pyramid, Django, TurboGears, and Rails

  注:Pyramid/TG程序使用SQLAlchemy测试类似ORM和Jinja2的模板测试系统。

 

 

  

 

 

 

 

  二、Microframeworks:Bottle, Flask, Sinatra, and web.go

  注:web.go测试运行在自身内置的服务器上,C语言对我而言较为生疏,我只熟悉GO语言。因此,如果某人能在web.go应用测试中添加SQLite,我会非常感激。

 

 

  

 

 

 

 

 

  三、PHP框架: CakePHP, Kohana, CodeIgniter, Symfony, and Yii

  注意:APC被启用(见“test setup”环节),很显然,大多数PHP框架使用SQLite3存在很多问题,在某种情况下,黑客需要数据库方面的测试运行结果。

 

 

  

 

 

 

  四、所有框架单独对比情况:

  把所有的框架测试单独进行对比并不是真正的“公平”,因为,他们各自都有不同点。编译语言(比如GO)要比脚本语言快;使用ORM(比如Rails, Django, Pyramid等)测试要比纯数据库(比如Bottle, Flask, Sinatra等)要慢。

 

 

  

 

 

  测试配置:

  采用亚马逊的EC2云平台,安装Ubuntu Server步骤:

  The EC2 instance used was: ami-fbbf7892 m1.large ubuntu-images-us/ubuntu-lucid-10.04-amd64-server-20110719.manifest.xml

  As a “Large” instance, Amazon describes the resources as: 7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of local instance storage, 64-bit platform.

  Apache 2.2.14 was used. (Yes, I know there are other options, but with Apache’s market share I figured it would be a good baseline.)

  Python 2.6.5 and mod_wsgi 2.8 (embedded mode) were used for the Python based tests.

  Ruby 1.9.2p290 and Phusion Passenger 3.0.9 were used for the Ruby based tests (Ruby 1.8.x is slow).

  PHP 5.3.2 (with APC enabled) was used for the PHP based tests.

  ApacheBench was run locally with -n 10000 and -c 10 about 5-10 times each, and the “best guess average” was chosen.

  设定每个框架可运行的三个基本测试结果:

  “Hello World”测试:该测试只输出一个字符串响应。没有模板或数据库调用,因此进程水平最少。
Template测试:该测试输出Lorem Ipsum和一个template(框架模板系统)
Template/DB测试:Lorem Ipsum从SQLite DB(ORM或sqlite3驱动程序)中加载5行,通过template输出(ORM/DB驱动程序和template系统)。
你可以通过GitHub下载测试应用程序。

  你想为测试结果添加XYZ吗?

  只需在GitHub提交测试程序代码即可。当然,我会不断更新新的框架版本,你可以随时关注Google+或者GitHub。(夏梦竹/编译)

  精彩评论:

  enneff :

  Go的成绩很好是有一些原因的。

  首先测试用的版本很老(r59),现在最新版本是r60。最近大部分Go用户比较关注Go 1。

  其次,更重要的是他们示范了web.go和mustache.go库。在GO(2009年年底或2010年初)发布不久后,第三方库被编译,从那时起,GO标准的http和template得到了大力发展。

  第三,这里有一个新的"database/sql"包提供单一的SQL数据库接口,还有几个驱动程序,包括sqlite,因此,在Go语言基准测试中很容易执行部分数据库。

  鉴于框架的基准测试任务,我想这就是作者进行框架对比的原因。幸运的是对于Go程序员来说,Go项目中的http、templates和databases在标准库中被称为代码的核心功能。

  powertower :

  “Hello World”测试将被并发工作所取代,比如用户访问、编译达到100s的请求数,

  我记得有个测试是将MySQL与SQL Server(Microsoft's SQL Server)进行对比,还是几年的事情了。一个用户用MySQL击败了SQL Server 。所有人都为之惊叹,究竟MySQL如何优于SQL Server。

  j45 :

  有趣的对比,很喜欢这个特别的测试,我们可以在这里发表自己的看法并进行讨论。

  比如:是否真的有一个框架适合所有应用?

  我们都知道过早的优化不适合开发,重要的是有人使用过吗?








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/785808,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
11天前
|
开发框架 JavaScript 前端开发
如何选择合适的Web开发框架?
【9月更文挑战第1天】如何选择合适的Web开发框架?
30 1
|
5天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
37 3
|
12天前
|
API 开发者 Python
"FastAPI路由大揭秘!轻松玩转URL映射,让你的Web应用路由设计既RESTful又灵活多变,秒杀传统框架的秘籍在这里!"
【8月更文挑战第31天】在Web开发中,路由是连接用户请求与后端逻辑的关键。FastAPI作为现代Python Web框架的佼佼者,以其简洁的API设计和高性能,提供了高度灵活的路由系统。本文通过开发一个博客系统的案例,详细介绍了FastAPI中路由的实现方法,包括基础路由定义、参数类型验证及路由分组与嵌套等,展示了如何轻松构建RESTful风格的URL映射,提升应用的可维护性和扩展性。
24 2
|
12天前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
26 1
|
12天前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
24 0
|
12天前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
19 0
|
12天前
|
数据库 开发者 Java
数据战争:Hibernate的乐观与悲观锁之争,谁将主宰并发控制的王座?
【8月更文挑战第31天】在软件开发中,数据一致性至关重要,尤其是在多用户并发访问环境下。Hibernate 作为 Java 社区常用的 ORM 框架,提供了乐观锁和悲观锁机制来处理并发问题。乐观锁假设数据不易冲突,通过版本号字段 (`@Version`) 实现;悲观锁则假定数据易冲突,在读取时即加锁。选择哪种锁取决于具体场景:乐观锁适合读多写少的情况,减少锁开销;悲观锁适合写操作频繁的场景,避免数据冲突。正确应用这些机制可提升应用程序的健壮性和效率。
22 0
|
12天前
|
Java Maven Android开发
解锁Web开发新技能:从零开始的Struts 2之旅——让你的Java编程之路更加宽广,首个应用实例带你飞!
【8月更文挑战第31天】对于初学者,掌握 Struts 2 框架不仅能提升 Web 开发能力,还能深入了解 MVC 架构。Struts 2 是一个基于 Servlet 的 Java 框架,提供表单验证、文件上传、国际化等功能,便于快速构建易维护的 Web 应用。本文通过示例演示如何从零开始搭建环境并创建一个简单的 Struts 2 项目,包括配置 `struts.xml`、编写 Action 类及视图文件,并配置 web.xml。通过这些步骤,你将学会基本的开发流程,为进一步学习高级功能打下基础。
23 0
|
12天前
|
Java 开发者 数据安全/隐私保护
Struts 2 拦截器机制震撼登场!紧跟技术热点,解锁高效开发密码,引发开发者情感共鸣
【8月更文挑战第31天】在 Java Web 开发中,Struts 2 框架凭借其强大功能和灵活性深受开发者喜爱。其中,拦截器机制是 Struts 2 的重要特性之一,它允许我们在请求处理过程中执行自定义操作,如日志记录、权限验证和数据转换等。拦截器通过实现 `com.opensymphony.xwork2.interceptor.Interceptor` 接口并在 `struts.xml` 中配置即可使用。合理利用拦截器可实现代码解耦与复用,提升开发效率和系统可维护性。框架还提供了如 `params` 和 `servletConfig` 等内置拦截器供开发者按需选用。
21 0
|
12天前
|
开发者 Java UED
大文件传输不再头疼:揭秘Struts 2如何轻松应对文件上传与下载难题!
【8月更文挑战第31天】在Web应用开发中,文件上传与下载至关重要。Struts 2作为主流Java EE框架,凭借Commons FileUpload及文件上传拦截器简化了相关操作。本文探讨Struts 2在文件传输上的优势,通过具体配置与代码示例,展示如何设置最大文件大小、使用`fileUpload`拦截器以及实现文件上传与下载功能。对于大文件传输,Struts 2不仅能够轻松应对,还支持上传进度显示,有效提升了用户体验。总体而言,Struts 2为文件传输提供了高效便捷的解决方案,助力开发者构建稳定可靠的Web应用。然而,在处理大文件时需兼顾网络带宽与服务器性能,确保传输顺畅。
32 0