研究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. Sequence query 好题啊

    Sequence query Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Subm ...

  2. 687. Repeats spoj (后缀数组 重复次数最多的连续重复子串)

    687. Repeats Problem code: REPEATS A string s is called an (k,l)-repeat if s is obtained by concaten ...

  3. spring 内部工作机制(一)

    Spring内部机制的内容较多,所以打算多分几个阶段来写. 本章仅探索Spring容器启动做了哪些事: 前言: 都说Spring容器就像一台构造精妙的机器,此话一点不假,我们通过配置文件向机器传达控制 ...

  4. vue2组件之select2调用

    目前,项目中使用了纯前端的静态项目+RESTFul接口的模式.为了更好的对数据进行操作,前端使用了vue2的mvvm功能,但是由于不是单页面应用,所以,并没有涉及到其它的如vue-route等功能,也 ...

  5. 文件上传之--内存溢出(System.OutOfMemoryException)

    两周前就想把这点经验记录下来了,由于拖延症上身,直到刚才突然想起这件未完成的任务,今天是1024,在这个特别的日子里,祝所有程序猿兄弟姐妹们节日快乐! 上传功能一直很正常,直到上传了个500多兆的文件 ...

  6. 关于width与padding

    http://blog.csdn.net/yaoyuan_difang/article/details/24735529

  7. 如何用IDEA一步一步开发WebService服务器端

    工具:IntelliJ IDEA 15.0.4 IDEA这款IDE还是非常强大的,对WebService也有很好的支持.下面我们来一步一步的实现WebService服务器端: 第一步,新建一个工程:F ...

  8. Babylon.GUI官方文档翻译

    Babylon.GUI是一个基于Babylon.js的WebGL库,可以用来在WebGL3D场景中生成交互性UI与动态纹理.相比于html ui,Babylon.GUI的功能较为简化,但使用起来也更加 ...

  9. Ajax笔记 XHR XMLHttpRequest

    XMLHttpRequest    xhr    XmlHttpRequest var request ;    if(Windows.XMLHttpRequest)    {    request ...

  10. 正六边形网格化(Hexagonal Grids)原理与实现

    在路径规划.游戏设计栅格法应用中,正六边形网格不如矩形网格直接和常见,但是正六边形具有自身的应用特点,更适用于一些特殊场景中,比如旷阔的海洋.区域或者太空.本文主要讲述如何对正六边形进行几何学分析.网 ...