Web桌面應用框架3:Web桌面應用開發的N種Style

来源:http://www.cnblogs.com/windfic/archive/2017/11/10/7811464.html
-Advertisement-
Play Games

研究Web桌面應用開發有一段時間了,總結了Web桌面應用開發的一些主流方式。 一、前端Style 這種方式的就是直接實現一個Web程式,再封裝一個瀏覽器展示,相當粗暴和有效。著名的框架就是Electron和NW.js了。 代表應用程式是atom。 一般是基於node.js。也有其它語言的。 各種前端 ...


研究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

(完)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 遞歸概念:(按我自己的話說)如果一個函數function在內部調用自己,就可以看成遞歸。如果按書上的定義就是:如果一個新的調用能在相同過程中較早的調用結束之前開始,那麼個該過程就是遞歸。 舉個慄子: 1 def func(n): 2 if n ==0 or n ==1:return 1 3 else ...
  • DTOJ 2703:兩個數的餘數和商 解題報告 ——翱翔的逗比w ...
  • Pandas數據特征分析 數據的排序 將一組數據通過摘要(有損地提取數據特征的過程)的方式,可以獲得基本統計(含排序)、分佈/累計統計、數據特征(相關性、周期性等)、數據挖掘(形成知識)。 .sort_index()方法在指定軸上根據索引進行排序,預設升序 .sort_index(axis=0, a ...
  • 說到現在程式員的工資,大家想到的都是一個字:高! 然後有人就說,如今人人轉IT,未來程式員供過於求,肯定會成為白菜價。 現在的程式員平均起薪工資約5K、6K,工作幾年後動輒3W、5W,相比其他行業的技術崗位來說,似乎充滿了泡沫。 而且不瞭解IT行業,或對行業認知太淺的大部分人都認為這是普遍的經濟規律 ...
  • 一、認識標簽 1,說明:傳統標簽編程在開發中基本用不到,學習標簽編程主要還是為了完善知識體系。 2,標簽的主要作用:移除或減少jsp中的java代碼 3,標簽的主要組成部分及運行原理 4,簡單標簽示例:繼承javax.servlet.jsp.tagext.TagSupport 標簽開發步驟 4.1編 ...
  • 在C++類中,由static定義的(靜態)數據成員 和 (靜態)函數成員屬於類;相反沒有被static定義的成員和函數稱為實例數據成員和實例函數成員,他們屬於某一個實例(對象)。 在記憶體中,類的靜態數據成員占有一塊特定的記憶體空間,被該類的所有實例(對象)共用。而同一個類的不同對象的實例數據成員相互獨 ...
  • 解決辦法:https://github.com/alibaba/fastjson/wiki/enable_autotype 文摘如下: 一、添加autotype白名單 添加白名單有三種方式,三選一,如下: 1. 在代碼中配置ParserConfig.getGlobalInstance().addAc... ...
  • 前面已經對BeautifulSoup有了瞭解了,相信你基本已經學會怎麼獲取網頁數據了,那麼BeautifulSoup這麼弔,還有沒有其他的功能呢?當然是有的 前面說的Tag對象都還記得吧?像這樣BeautifulSoup.title,得到的就是Tag對象,它其實還有一些屬性: 1.contents: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...