自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Tauri:跨平臺探索之旅

開發(fā) 架構(gòu)
Tauri 是一種非常有潛力的框架,它可以幫助開發(fā)者快速構(gòu)建高性能、跨平臺的桌面應(yīng)用。但是,它也存在一些學(xué)習(xí)成本和可維護(hù)性等方面的問題,需要開發(fā)者在選型的時候有更多的思考。

一、簡介

Tauri 是一個跨平臺 GUI 框架,與 Electron 的思想基本類似。都是屬于跨平臺技術(shù)的解決方案

圖片圖片

優(yōu)缺點(diǎn)快速分析

我們一般會把tauri作為 Electron 的替代方案,electron優(yōu)點(diǎn)咱們不看,這里就提兩個electron比較明顯的問題:

  1. 安裝包大小。Electron 應(yīng)用程序需要內(nèi)置 Chromium 渲染引擎和 Node.js 環(huán)境,導(dǎo)致項(xiàng)目安裝包很大。
  2. 資源占用。Electron 占用較高的 CPU 和內(nèi)存資源,作為小型的工具類項(xiàng)目應(yīng)用,用戶體驗(yàn)會不太友好。
  3. 啟動時間稍顯長。

Tauri 作為一種使用 Rust 和 Web 技術(shù)棧構(gòu)建跨平臺桌面應(yīng)用的框架。這里也分析一下它的幾個優(yōu)點(diǎn)和缺點(diǎn):

  • 優(yōu)點(diǎn)
  1. 高性能:Tauri 使用 Rust 語言編寫底層代碼,具有內(nèi)存安全、高性能和并發(fā)性等優(yōu)點(diǎn)。
  2. 跨平臺支持:Tauri 支持多個平臺,如 Windows、macOS 和 Linux,可以幫助開發(fā)者輕松地構(gòu)建跨平臺的應(yīng)用。
  3. 小安裝包:由于 Tauri 應(yīng)用程序使用原生控件和 Web 技術(shù)結(jié)合的方式,因此安裝包相對較小。
  4. 啟用時間較短。
  5. 安全性:使用操作系統(tǒng)的原生 GUI 控件來創(chuàng)建應(yīng)用程序界面,從而提高了應(yīng)用程序的可訪問性和安全性。
  • 缺點(diǎn)
  1. 學(xué)習(xí)成本:由于 Tauri 使用 Rust 和 Web 技術(shù)進(jìn)行開發(fā),因此需要具備一定的 Rust 和 Web 開發(fā)經(jīng)驗(yàn),對于新手開發(fā)者來說可能需要一定的學(xué)習(xí)成本。
  2. 社區(qū)規(guī)模:相比于其他框架,Tauri 的社區(qū)規(guī)模還相對較小,可能需要開發(fā)者自行解決一些問題。
  3. 可維護(hù)性:Tauri 尚處于快速發(fā)展階段,可能存在 API 變動和不穩(wěn)定的情況。以及webview也會有一些本身自帶的兼容性問題等等。

圖片圖片

對比Tauri和Electron

總的來說,Tauri 是一種非常有潛力的框架,它可以幫助開發(fā)者快速構(gòu)建高性能、跨平臺的桌面應(yīng)用。但是,它也存在一些學(xué)習(xí)成本和可維護(hù)性等方面的問題,需要開發(fā)者在選型的時候有更多的思考。

二、使用教程

2.1 環(huán)境準(zhǔn)備(以mac環(huán)境為例)

??其他環(huán)境的可以參考官方教學(xué)文檔,在此不做贅述

  1. 安裝 CLang 和 macOS 開發(fā)依賴項(xiàng)
xcode-select --install
  1. 安裝Rust
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

2.2 構(gòu)建項(xiàng)目

使用 pnpm 創(chuàng)建項(xiàng)目

pnpm create tauri-app

圖片圖片

選擇完你熟悉的項(xiàng)目配置后,執(zhí)行提示的內(nèi)容,運(yùn)行項(xiàng)目,會自動在桌面彈出初始化的窗口

圖片圖片

2.3 項(xiàng)目構(gòu)成

圖片圖片

  • dist:web項(xiàng)目打包編譯目錄
  • src:vue前端頁面代碼(渲染進(jìn)程)
  • src-tauri:rust相關(guān)(主進(jìn)程)

2.4 完善項(xiàng)目配置

完成項(xiàng)目內(nèi)容后,我們可以在 tauri.conf.json 文件中配置 Webview 的選項(xiàng),包括 Webview 庫的版本、窗口大小、窗口樣式、窗口標(biāo)題、用戶代理字符串等。

圖片圖片

2.5 打包

pnpm tauri build

直接執(zhí)行打包會直接報(bào)個錯

圖片圖片

將tauri.conf.js的默認(rèn)配置修改為build

圖片圖片

再次執(zhí)行打包就好了,然后直接安裝使用

圖片圖片

到此為止,我們體驗(yàn)了一把使用 Tauri 開發(fā)桌面端應(yīng)用的流程??梢愿兄?,它對前端開發(fā)者是比較友好的,但是如果想深入掌握它,需要學(xué)習(xí) Rust。

三、整體構(gòu)成

??Tauri主要基于以下幾個關(guān)鍵技術(shù):

  1. Rust
  2. Web技術(shù)
  3. Webview

??整體結(jié)構(gòu)大致長這樣????

圖片圖片

  • 在 Tauri 架構(gòu)中,Rust 應(yīng)用程序是整個系統(tǒng)的核心,它提供了 Tauri API 的實(shí)現(xiàn)。通過tauri api讓 Rust 應(yīng)用程序與 WebView 和 Web 內(nèi)容進(jìn)行交互。
  • WebView 是一個通用的 Web 容器,通常基于底層平臺的內(nèi)置 Web 技術(shù)實(shí)現(xiàn),例如:macOS 上的 WKWebView 和 Windows 上的 Edge WebView。WebView 用于加載 Web 內(nèi)容,使其可以顯示在原生桌面應(yīng)用程序中。
  • Web 內(nèi)容是在 WebView 中加載的 HTML、CSS 和 JavaScript 代碼。Tauri 可以加載遠(yuǎn)程 Web 內(nèi)容,也可以加載本地 Web 內(nèi)容,例如打包在原生應(yīng)用程序中的 Web 資源。

??通過這個架構(gòu),Tauri 提供了一種快速創(chuàng)建跨平臺原生桌面應(yīng)用程序的方法,充分利用了 Rust 的性能和 Web 技術(shù)的靈活性。那么,接下來簡單講一下這三塊都有哪些內(nèi)容。

3.1  Rust

  • 語言

Tauri的核心是使用 Rust 語言編寫的。在 Tauri 中,Rust 代碼用于調(diào)用本地操作系統(tǒng)的 API,實(shí)現(xiàn)應(yīng)用的后端邏輯,并與前端 Web 技術(shù)進(jìn)行交互。Rust的一些主要特性包括:

  • 內(nèi)存安全:Rust 的所有權(quán)系統(tǒng)可以有效避免內(nèi)存泄漏和空指針等問題,確保程序在運(yùn)行時不會發(fā)生崩潰。
  • 線程安全:Rust 的并發(fā)模型允許開發(fā)者編寫線程安全的代碼,可以在多核處理器上并行執(zhí)行,提高應(yīng)用的性能。
  • 高性能:Rust 的編譯器會在編譯時進(jìn)行優(yōu)化,生成的二進(jìn)制文件具有很好的性能表現(xiàn)。
  • 易于與其他語言交互:Rust 支持與其他語言進(jìn)行交互,例如與 JavaScript 進(jìn)行交互,這在 Tauri 中非常重要。
  • 除了上述特性,Rust 還有其他很多特性和優(yōu)點(diǎn),如代碼可讀性、錯誤處理、模式匹配等,這些特性在 Tauri 中也會得到充分的發(fā)揮。

總之,Tauri 的 Rust 代碼是實(shí)現(xiàn)其核心功能的關(guān)鍵,使用 Rust 可以有效避免一些常見的安全漏洞,并且可以保證應(yīng)用具有高性能、可靠性和擴(kuò)展性。

  • 庫的使用

Tauri 使用了多個 Rust 庫,主要包括以下幾個方面:

  • 底層平臺庫:Tauri 使用了多個底層平臺庫,包括 winapi(Windows 平臺)、cocoa(macOS 平臺)、gtk(Linux 平臺)等,這些庫提供了與操作系統(tǒng)交互的接口,使得 Tauri 可以在不同的平臺上實(shí)現(xiàn)一致的行為,達(dá)到抹平差異的目的。
  • Webview 庫:Tauri 使用了多個 Webview 庫,包括 webview, wry, cef, tao, nwjs 等,不同的平臺使用不同的 Webview 庫。這些庫提供了在 Rust 代碼中嵌入 Webview 的能力,使得 Tauri 可以在桌面應(yīng)用中集成 Web 技術(shù)。
  • 異步編程庫:Tauri 使用了 async-std 庫來實(shí)現(xiàn)異步編程。這個庫提供了基于 async/await 的異步編程模型,使得 Tauri 可以使用 Rust 的強(qiáng)類型和安全性,同時又能夠處理異步操作。
  • 序列化和反序列化庫:Tauri 使用了 serde 庫來進(jìn)行數(shù)據(jù)的序列化和反序列化。這個庫提供了基于屬性宏的序列化和反序列化方式,使得 Tauri 可以方便地在 JavaScript 和 Rust 之間傳遞數(shù)據(jù)。
  • 日志庫:Tauri 使用了 env_logger 庫來進(jìn)行日志記錄。這個庫提供了一種靈活的日志記錄方式,使得 Tauri 可以在開發(fā)和調(diào)試時方便地記錄日志。
  • 其他庫:除了上述庫之外,Tauri 還使用了其他一些 Rust 庫,包括 lazy_static(懶加載靜態(tài)變量庫)、serde_json(JSON 序列化和反序列化庫)、walkdir(遍歷目錄和文件庫)等,這些庫提供了豐富的功能,使得 Tauri 可以實(shí)現(xiàn)更加復(fù)雜的功能。

3.2  Web

在Tauri中,Web技術(shù)主要用于兩個方面:一是創(chuàng)建應(yīng)用程序的UI界面,二是通過Webview與Rust代碼通信。

先看看創(chuàng)建界面:我們可以使用HTML、CSS和JavaScript來創(chuàng)建應(yīng)用程序的UI界面,也能夠集成當(dāng)前所有Web項(xiàng)目里頭(包括React、Vue、Angular等等)。

圖片圖片

接下來看看如何讓W(xué)ebview與Rust代碼通信。

定義Tauri事件

??可以寫在main.rs里

#[tauri::command]
fn hello(name: String) -> String {
  format!("Hello, {}!", name)
}

fn main() {
  tauri::Builder::default()
    .invoke_handler(tauri::generate_handler![hello])
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
}

在上面的代碼中,我們定義了一個hello函數(shù),并使用tauri::command宏將其注冊為一個Tauri事件。該函數(shù)接受一個名為name的字符串參數(shù),并返回一個格式化的問候語

在JavaScript代碼中發(fā)送事件

在JavaScript代碼中,我們可以使用window.tauri.invoke方法來發(fā)送一個Tauri事件。例如,我們可以編寫以下代碼來調(diào)用Rust中的hello事件:

window.tauri.invoke('hello', { name: 'Alice' })
  .then(response => {
    console.log(response); // 輸出 "Hello, Alice!"
  });

3.3  Webview

在Tauri中,Webview是負(fù)責(zé)渲染應(yīng)用程序UI的核心組件。具體來說,Webview是一個用于顯示網(wǎng)頁內(nèi)容的窗口,類似于瀏覽器中的標(biāo)簽頁。Tauri使用Webview作為應(yīng)用程序的UI引擎,并使用Rust和JavaScript代碼來控制UI的行為。

Tauri使用了一些第三方的Webview引擎,例如:webview、wry 和 cocoa webview。這些Webview引擎為Tauri提供了不同的支持平臺和不同的性能特征。

另外,Tauri提供了一組Rust API,可以用于與Webview進(jìn)行交互,例如:

  • tauri::window: 用于與當(dāng)前窗口進(jìn)行交互。
  • tauri::event: 用于發(fā)送事件到Webview。
  • tauri::menu: 用于在Webview中創(chuàng)建菜單。

除了使用Rust API之外,我們還可以使用JavaScript代碼與Webview進(jìn)行交互。例如,我們可以使用以下代碼在JavaScript代碼中獲取Webview的引用:

const webview = window.tauri.promisified({
  cmd: 'getWebview'
});

??當(dāng)我們獲取了Webview的引用之后,我們可以使用JavaScript API來控制Webview的行為,例如:

  • webview.addEventListener: 監(jiān)聽Webview事件。
  • webview.postMessage: 向Webview發(fā)送消息。
  • webview.executeJavaScript: 在Webview中執(zhí)行JavaScript代碼。

通過使用這些API,我們可以實(shí)現(xiàn)高度自定義的UI界面,同時也可以方便地與Rust代碼進(jìn)行通信和交互。

四、資源 & 文檔

  • Tauri官方文檔 - https://tauri.app/
  • Awesome Tauri(精選的 Tauri 生態(tài)系統(tǒng)和社區(qū)中最好的東西,包含插件和應(yīng)用,可以借鑒和學(xué)習(xí)) -  http://github.com/tauri-apps/awesome-tauri。
  • Tauri issues(Tauri問答)- http://github.com/tauri-apps/tauri/issues
  • Tauri discussions(Tauri討論社區(qū)) - http://github.com/tauri-apps/tauri/discussions
  • Rust 編程語言基本語法學(xué)習(xí)- http://doc.rust-lang.org/book/
  • crates.io(Rust生態(tài)的包管理網(wǎng)站) - http://doc.rust-lang.org/book/
責(zé)任編輯:武曉燕 來源: 大轉(zhuǎn)轉(zhuǎn)FE
相關(guān)推薦

2022-10-14 16:30:17

2010-05-06 17:56:15

Visual Stud

2010-02-24 15:04:54

Visual Stud

2023-07-26 11:22:44

騰訊趙裕

2017-03-07 12:28:27

Android應(yīng)用角標(biāo)

2015-11-05 17:38:32

東方通蘇州工業(yè)園大數(shù)據(jù)應(yīng)用

2017-04-18 13:55:24

運(yùn)維云計(jì)算WOT

2019-09-25 11:27:07

區(qū)塊鏈比特幣加密貨幣

2023-12-13 13:15:13

平臺開發(fā)實(shí)踐

2020-10-10 14:36:10

Python

2020-10-12 00:41:52

Python變量

2015-03-05 11:28:51

Linux桌面環(huán)境終極指南

2025-03-20 14:50:24

2020-10-11 23:45:55

Python解釋器

2013-10-15 15:17:47

程序員數(shù)據(jù)挖掘

2020-06-12 09:20:33

前端Blob字符串

2021-03-08 16:12:35

AIOpsIT人工智能

2024-01-08 16:14:40

美圖AIGC運(yùn)維

2020-10-10 14:48:18

Python安裝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號