最近因为有开发需求,两个框架都用了用,实际运用比较了一下,有点心得。虽然网络上很多文章分别介绍了Shiny和FastRWeb,但还没有文章比较过二者,很多初学者可能也有这样的疑问,故简单叙述一二,不对的地方请海涵并请教。
二者都可以响应TCP/IP请求,给R安上Server的翅膀,实现Browser to Server的需求。
Shiny是RStudio公司开发的一个包包,定位于交互式呈现数据,更加动态,Shiny包内建了Shiny-server,所以在本机运行没有问题,如果你想发布shiny Rscript(也叫Shiny App)到个人网站的话,需要安装shiny-server。
免费的shiny-server不支持用户认证和ssl,意味着你只能用来部署个人小型项目,如果是商业性的项目,必须且不得不购买shiny-server pro了,因为商业项目必然涉及到用户注册和分组策略。
以下截图是shiny-server免费版(也叫Open Source版),RStudio Connect和Shinyapp.io(RStudio公司推出的云服务)的功能比较:
(Shiny-server免费和商业版的比较)
实际使用上看来,有不少SCI文章所提到的数据库是用shiny展示的,实际效果不佳,反应缓慢,如果仅仅是展示数据或简单的R脚本,可以用FastRWeb。
FastRWeb也是一个框架,原理是调用R脚本生成图片后用base64回传,适合展示没有很强交互需求的图像,比较适合数据挖掘相关的图表。
当然,简单的交互通过传参也是可以实现的,但毕竟免费,缺少维护力量,颜值不如shiny那样高,如果要做到Shiny那样,那需要继续开发更多的控件,还有更灵活的交互和缓存机制,二次开发成本不小,对于有能力的开发团队还是建议直接把Shiny开源包拿过来二次开发比较划算。
刚才说了,FastRWeb也是一个框架,shiny也是框架,两个框架封装的类和函数都是不一样,所以没法通用。
如果你是个人应用,需要交互性比较强,比较炫酷,比较fashion,用shiny吧。如果是展示一些来源于固定数据的图形(比如数据挖掘),不需要交互特性,可选FastRWeb,再说了,人家FastRWeb本来名字就叫Fast Interactive Web Framework for Data Mining Using R,侧重的就是用R数据挖掘。
但颜值即正义,Shiny比FastRWeb火太多了,一个证据是,FastRWeb最近两次的小更新居然间隔了5年:
2020/03/10 FastRWeb 1.1-3 released. Mostly bugfixes and support for Windows, with a few small new features.
2015/07/27 FastRWeb 1.1-1 released. Graphics use dataURI instead of temporary files, small bugfixes.
最后一句话,FastRWeb能做的,shiny都能做,但二者对并发请求的处理能力,还有待进一步比较(shiny-server pro允许最多20个用户同时访问,FastRWeb这方面能力不详)。不管是FastRWeb还是shiny,处理静态html页面的能力都不如apache和nginx,如果能把这些软件结合起来运用,效果当然最佳。
还有很多免费的前端,比如bootstrap,vue.js,还有许多免费的javascript库(比如echarts)能画出shiny一般具有交互功能的美图,比如下面的图:
(这是echarts的demo-1)
(这是echarts的demo-1)
(这是我用echarts随便画的图)
或许go bigger的路上不一定需要shiny,可以考虑利用FastRWeb处理数据,然后再用开源的js库来画图。