再谈谈Play!框架

简介:

Play!也一直在关注,包括最新的1.0.1和1.1 branch。

在View层、缓存、测试这三方面Douyu跟Play!要实现的东西和采用的套路都差不多,

比如Play!内置的模板引擎也是先把模板文本转化成Groovy代码然后再运行,
Douyu现在也是先转化成Java代码然后编译再运行(跟JSP一样)。

在开发阶段,这种先编译后运行的方式通常比Velocity或FreeMarker这种动态解析的方式要慢。
但是在部署阶段因为模板文本已经编译过了就比动态解析的方式要快一点。

Play!新加入了“Japid template engine ”,无非也是要提高view层模板的渲染速度,
具体实现技术我还没去研究。

Douyu现在也正尝试Velocity或FreeMarker动态解析的方式,
这在开发阶段很有用,如果熟悉JSP的话,只要JSP页面代码量稍大一点,
每次改JSP代码然后刷新浏览器一般需要1.5到2秒的响应时间,
1.5到2秒在开发阶段还是不能承受的,只有响应时间不超过1秒才不会感觉到有延迟。

缓存方面Douyu跟Play!现在也是直接整合一些流行的缓存框架
Douyu目前整合了Ehcache和OSCache,
Play!目前整合了Ehcache和Memcached

测试方面Play!现在要比Douyu强一些
Douyu只是整合了JUnit,可以进行单元测试和功能测试。

Play!除了能进行单元测试和功能测试外,还集成了selenium,
可以进行Selenium测试,这是Douyu目前未实现的。

老实说也曾想过看看能否把Douyu跟Play!整合一下,
但是除了上面说的三点相似外,内部的核心架构完全不同,
比如最简单的一个例子在Play!中每个控制器类要继承play.mvc.Controller,
而Douyu的控制器类不采用继承方式,
Play!的render是采用抛异常的方式来结束Action的执行的,
一个Action只能render一个模板,而且每个Action方法都是静态的,
而Douyu不抛异常,一个Action能render任意多的模板。

动态编译方面更加不同,Play!是从编译后的字节码下手,
而Douyu是先从Java源代码下手。

Play!目前在Modules开发方面比较活跃,
这些并不属于核心架构的东西,
在Play!上能运行的Modules,只要那个Module的开发者愿意,
其实很容易就能移植到Douyu。

Play!在1.1 branch中要加入对Scala语言的支持,
Douyu并不打算支持Scala语言,Scala语言学习门槛太高,
近期内要普及还是件难事,所以我想Douyu应该先把时间放在其他更实际的问题上。

另外,Play!还加入了Grizzly、Netty的支持,
我觉得这些都不是很大的亮点,中小规模的应用Tomcat足够了,
大点的应用Apache加Tomcat集群也能应付,

Grizzly、Netty这类http服务器处在一个不上不下的位置,
普及性也很低,所以Douyu目前也不打算支持Grizzly、Netty。

Play!在Model层还没看到什么大点的变化,跟Douyu的实现方案也很不同。

当然还有很多的不同,这里就不再细说了,
所以我想以后Douyu跟Play!应该不会走merb跟rails合并的路,
谁好谁坏就留给开发者去选择吧。

本文来源于"阿里中间件团队播客",原文发表时间" 2011-07-06 "

相关文章
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
113 0
|
3月前
|
存储 Dart 前端开发
flutter鸿蒙版本mvvm架构思想原理
在Flutter中实现MVVM架构,旨在将UI与业务逻辑分离,提升代码可维护性和可读性。本文介绍了MVVM的整体架构,包括Model、View和ViewModel的职责,以及各文件的详细实现。通过`main.dart`、`CounterViewModel.dart`、`MyHomePage.dart`和`Model.dart`的具体代码,展示了如何使用Provider进行状态管理,实现数据绑定和响应式设计。MVVM架构的分离关注点、数据绑定和可维护性特点,使得开发更加高效和整洁。
191 3
|
4月前
|
开发者
flutter:总结所有需要用到的方法与实战 (十六)
本文介绍了Flutter中路由和顶部导航的使用方法,包括简单路由、命名路由、返回及返回根路由的实现。同时,详细讲解了顶部导航的定义与属性设置,并通过实战案例展示了复杂布局、新闻列表和页面制作的思路。最后,还提供了父类向子类传递参数的方法以及如何添加依赖库。
|
6月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
100 0
|
6月前
|
存储 缓存 异构计算
PixiJS源码分析系列:第二章 渲染在哪里开始?
PixiJS源码分析系列:第二章 渲染在哪里开始?
|
9月前
|
设计模式 JavaScript 开发者
Flutter笔记:聊一聊Flutter中委托的设计方法
Flutter笔记:聊一聊Flutter中委托的设计方法
198 0
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
|
Dart API Android开发
带你读《深入浅出Dart》二十二、Flutter简介
带你读《深入浅出Dart》二十二、Flutter简介
|
异构计算 索引 容器
creator源码阅读系列第二篇之渲染
creator源码阅读系列第二篇之渲染
173 0