研究Web桌面应用开发有一段时间了,总结了Web桌面应用开发的一些主流方式。

一、前端Style

这种方式的就是直接实现一个Web程序,再封装一个浏览器展示,相当粗暴和有效。著名的框架就是Electron和NW.js了。

代表应用程序是atom。

一般是基于node.js。也有其它语言的。

各种前端框架的拥趸是这种Style的狂热粉丝。这里就不放Demo了。贴段代码就可以感受到它的霸气侧漏。

app.on('ready', function() {
// 创建浏览器窗口。
mainWindow = new BrowserWindow({width: 800, height: 600}); // 加载应用的 index.html
mainWindow.loadURL('file://' + __dirname + '/index.html');
// 当 window 被关闭,这个事件会被发出
mainWindow.on('closed', function() {
mainWindow = null;
});
});

二、炫酷Style

这种方式就是在应用界面上嵌入多个Web页面,一般都是效果炫酷的Flash或动画。

代表应用程序就是QQ了。

各种DirectUI或换肤框架的用户都是这种模式的真爱粉。

所谓尺有所短,寸有所长。把脏活累活甩锅给Web页面真是英明。各种不明觉厉的玩意儿能上的都给上了。

这里我用WxPython和tornado实现了一个小小的代码编辑器的Demo。颜值担当:zTree.js和codemirror.js。

class MyHtmlFrame(wx.Frame): 

    def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size = (800,600))
self.create_menu()
self.Bind(wx.EVT_CLOSE, self.OnClose) self.statusbar = self.CreateStatusBar(2)
self.statusbar.SetStatusText(u"status", 0)
self.statusbar.SetStatusText(u"hello", 1) self.splitter = wx.SplitterWindow(self, style=wx.SP_LIVE_UPDATE)
self.tree = wx.html2.WebView.New(self.splitter) self.html = wx.html2.WebView.New(self.splitter) self.splitter.SetMinimumPaneSize(200)
self.splitter.SplitVertically(self.tree, self.html, 300) self.tree.LoadURL('http://localhost:8888/tree?v=%d'%time.time())
self.html.LoadURL('http://localhost:8888?v=%d'%time.time())

三、嵌入Style

有人说所有Web项目都是开源的:(。Web的特性决定了,它的安全性(对于程序本身)很差。同时体验上也有一些限制性。

所以,嵌入Style放弃了纯粹的Web程序,采取了宿主语言与JavaScript双向绑定的方式,直接操作Web页面,来换取安全性和体验上的提升。

这种Style带来的开发难度的提升,使得它的狂热爱好者不多,暂时没有发现纯粹的代表应用程序 。大多是框架在做的事情。

下面是我用cef-python实现的一个Demo。颜值担当:GooFlow.js。

def main():
check_versions()
sys.excepthook = cef.ExceptHook # To shutdown all CEF processes on error settings = {
"product_version": "MyProduct/10.00",
"user_agent": "MyAgent/20.00 MyProduct/10.00",
}
cef.Initialize(settings=settings) browser = cef.CreateBrowserSync(url="file:///html/flow.html",
window_title="Tutorial")
set_javascript_bindings(browser) cef.MessageLoop()
cef.Shutdown()

四、组件Style

WEB组件,是一种由来已久的技术。最出名的就是.net平台WebForm技术,还有Java平台JSF、Tapestry等。

组件式开发的优点是简单直观,开发迅速。缺点是封装严重,界面呆板。一个字:丑。相对来说,是一种被认为相当落后和有缺陷的技术。

但是有意思的地方来了,

如果使用Web组件开发Web桌面应用,先忽略中间过程,只看组件…桌面应用,这却是一个相当正常和悠久的技术体系了。

负负得正,螺旋式上升,组件Style一下子变得高大上起来。

相对于传统组件式应用,新的组件style的优势在于跨平台GUI开发成本大大降低。相当于把浏览器当成GUI Render。

而且相比其它Style,安全性,炫酷度,体验度都大大增强。开发难度也不太大。

但这种Style还没有发现有人公开使用。

不过我发现了一款相当有潜力的Golang框架:github.com/zserge/webview

可以做一些组件Style的尝试。。。

五、终极Style

终极Style并非一种开发方式,而是评分标准,每项五颗星,总分共十五颗星。

终极的Web应用框架必须完美解决界面、成本、限制这三个方面的问题。大家可以自己来评评看。

界面 成本 限制

标准 高级 定制 皮肤 动画

学习 流行 开发 继承 前途

平台 体积 流畅 安全 开源

图例

满意 符合 不符

源码:cool style

(完)

Web桌面应用框架3:Web桌面应用开发的N种Style的更多相关文章

  1. web服务器和应用服务器以及web应用框架介绍

    ### web服务器:负责处理http请求,响应静态文件,常见的有Apache,Nginx以及微软的IIS. ### 应用服务器:负责处理逻辑的服务器.比如php.python的代码,是不能直接通过n ...

  2. Web桌面应用框架2:著名的WEB桌面应用分析

    前一篇文章里,分析了包括NW.js和electron这种纯JS框架在内的几种Web桌面应用开发方式,实际上还有一种最古老的方式,那就是嵌入WebView的方式. 嵌入WebView的方式和整个程序都是 ...

  3. 而桌面app向来是web前端开发开发人员下意识的避开方

    web前端语言的发展有目共睹, 从原来的pc web, 到后来的mobile SAP, 再到 nodejs,全站工程师应运而生. js快速而且稳健的发展让人不得不重视, 相应的前端开发人员的地位也越来 ...

  4. WEB移动应用框架构想(转载)

    iUI.jQTouch.WPTouch.PhoneGap.XUI.iWebkit.Rhodes.gwt-mobile…当我们已经开始惊 叹 web移动应用充斥着各种各样框架与类库的时候,其实各大web ...

  5. [转] 国内外最全面和主流的JS框架与WEB UI库(强烈推荐)

    国内外最全面和主流的JS框架与WEB UI库...   当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同 ...

  6. 桌面应用框架 OneRing

    框架目标 OneRing是一个跨平台的桌面应用框架.和Adobe AIR类似,它支持用html/js/css制作用户界面,与之不同的是,它的应用为本地程序,可以直接访问操作系统的数据. 架构 一个On ...

  7. 国内外最全面和主流的JS框架与WEB UI库

    当下对于网站前段开发人员来说,很少有人不使用一些JS框架或者WEB UI库,因此这些可以有效提高网站前段开发速度,并且能够统一开发环境,对于不同浏览器的兼容性也不需要程序员操心,有了这些优点,当然大家 ...

  8. 10个优秀的 Web UI库/框架

    UI(User Interface)即用户界面,也称人机界面.是指用户和某些系统进行交互方法的集合,实现信息的内部形式与人类可以接受形式之间的转换.本文为WUI用户整理了10个优秀的 Web UI 库 ...

  9. Web前端MVC框架的意义分析

    前言: Web前端开发是Web技术发展中的一个重要组成部分,在传统的前端开发中由于外界因素的影响导致其开发形式呈现出简单化的特点,即以页面为主体来展示界面中的信息.然而随着科学技术的不断进步,Web前 ...

随机推荐

  1. P1034

    问题 E: P1034 时间限制: 1 Sec  内存限制: 128 MB提交: 29  解决: 22[提交][状态][讨论版] 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些 ...

  2. 跨平台移动端APP开发---简单高效的MUI框架

    MUI是dcloud(数字天堂)公司旗下的一款跨平台开发移动APP的框架产品,在学习MUI框架之前,最先接触了Hbuilder代码编辑器,它带给我的第一感觉是快,这是HBuilder的最大优势,通过完 ...

  3. 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED

    感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...

  4. 醒醒吧!互联网的真正未来不是AI,更不是VR,AR,而是区块链

    这些力量并非命运,而是轨迹.他们提供的并不是我们将去向何方的预测,而是告诉我们,在不远的将来,我们会向那个方向前行,必然而然. ---凯文•凯利 文字与货币 人类在演化过程中,凭借智慧创造了无数事物, ...

  5. Python自学笔记-字符串编码(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看.   1.理解变 ...

  6. ZOJ 2042 Divisibility (DP)

    Divisibility Time Limit: 2 Seconds      Memory Limit:65536 KB Consider an arbitrary sequence of inte ...

  7. mac 环境下 Quantlib 使用Swig 转换到java

    一.Mac安装boost方法:http://blog.csdn.net/xujiezhige/article/details/8230493 二.Swig,这里使用sudo install swig ...

  8. iOS 将视频流(h264)和音频流封装成PS流

    调用方法: static  CPSPackager * testObjc = NULL; static char *pszBuffer; testObjc = new CPSPackager(); p ...

  9. nodejs里的module.exports和exports

    引 在node.js中我们可以使用module.exports和exports导出模块,设置导出函数.数组.变量等等 为什么可以用这两个模块? 或者直接问,node.js的模块功能是怎么实现的. 这样 ...

  10. ios 返回不会自动刷新页面问题

    在实际开发过程中,移动端的兼容性问题有很大的坑,安卓可以了ios不行,ios可以了安卓又失效了这样,其中ios的回退操作就是不会自动刷新页面,很烦! 常见的history.back() history ...