再谈谈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 "

相关文章
|
6月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
|
6月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
|
3月前
|
设计模式 JavaScript 开发者
Flutter笔记:聊一聊Flutter中委托的设计方法
Flutter笔记:聊一聊Flutter中委托的设计方法
81 0
|
6月前
|
Dart API Android开发
带你读《深入浅出Dart》二十二、Flutter简介
带你读《深入浅出Dart》二十二、Flutter简介
|
6月前
|
Dart
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
|
vr&ar 图形学
【Unity3D 灵巧小知识点】 | Unity中 OnEnable 和 Awake、Start 的区别
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、r美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
|
JSON JavaScript 前端开发
Day 30: Play Framework —— Java开发者的梦想框架
今天是最后一天,我决定学习一下 Play 框架。原本是想写关于Scala的,学习了几个小时之后发现在一天之内是不可能完成Scala的,所以今天会介绍一下Play框架的基本知识,然后学习如何用它开发应用。
559 0
Day 30: Play Framework —— Java开发者的梦想框架
|
图形学
带你读《Unity游戏开发(原书第3版)》之二:游戏对象
本书主要介绍Unity2018的使用和游戏开发流程中涉及的各种知识。每一章的结构特别清晰,先综述该章要介绍的内容,然后一步步深入讲解,中间穿插着很多动手做的实践操作,可以让读者加深对某个概念、方法的理解,每章的最后还有一个小测验和一个稍微大一点的实践练习,用于巩固该章的学习内容。
|
Dart Java JavaScript
带你读《Flutter技术入门与实战》之三:Dart语言简述
本书的定位适合小白程序员,入门加实战,既有基础知识,又有丰富示例,包括详细的操作步骤,实操性强。由于Flutter大量使用组件,所以对组件的讲解很详细,包括基本概念、属性及代码示例。每个组件都配有小例子,力求精简,还提供了配套网站提供完整代码,复制完整代码就可以立即看到效果。在轻松掌握基础知识的同时快速进入实战。
带你读《Flutter技术入门与实战》之二:Flutter基础知识
本书的定位适合小白程序员,入门加实战,既有基础知识,又有丰富示例,包括详细的操作步骤,实操性强。由于Flutter大量使用组件,所以对组件的讲解很详细,包括基本概念、属性及代码示例。每个组件都配有小例子,力求精简,还提供了配套网站提供完整代码,复制完整代码就可以立即看到效果。在轻松掌握基础知识的同时快速进入实战。