Tauri 入门新一代跨系统桌面应用框架

前端技术
2025-04-03 09:36:19
分享


Tauri客户端开发框架介绍Tauri是一个现代化的跨平台桌面应用程序开发框架,它允许开发者使用 Web技术(HTML、CSS和 JavaScript)构建轻量级、安全且高性能的桌面应用。

TARUI核心特点

  1. 跨平台支持:可构建 Windows、macOS和 Linux应用程序

  2.  轻量高效:生成的应用程序体积小,内存占用低

  3. 安全性强:内置安全最佳实践,包括沙箱隔离和权限控制

  4. 现代技术栈:支持主流前端框架如 React、Vue、Svelte等

  5. 原生集成:可通过 Rust轻松调用系统原生功能##技术架构Tauri采用前后端分离架构:


  • 前端:使用任何 Web技术构建用户界面-

  • 后端:基于 Rust提供系统级功能和安全性-

  • 通信桥梁:前后端通过安全的 IPC机制通信


优势对比相比 

Electron:-更小的应用体积(Electron的1/10左右)
-更低的内存占用-更快的启动速度-更安全的默认配置

典型应用场景-需要原生系统集成的桌面应用

-资源受限环境下的应用-对安全要求较高的应用

-希望复用现有 Web代码的项目Tauri正迅速成为传统 Electron应用的有力替代方案,特别适合注重性能和安全性的桌面应用开发。

 

框架冷启动时间内存占用安装包大小
Electron2.1s210MB85MB
Tauri0.8s40MB3.2MB
Flutter1.2s90MB22MB



Tauri默认初始化的项目 界面效果。一句代码没写,生成客户端应用,而且还有安装流程的exe。





tarui 打包exe的大小确实惊艳,1.9MB, 我集成heroui 做了一个简单的登录界面,最后1.9 MB。相比我们现在公司使用Election方案达到了百兆级别,真的是非常适合joggle的客户端开发。我决定了就使用tarui进行joggle客户端开发。

1743686476069.png


为什么选择heroui,因为heroui的界面效果是我看到过的最好的,各个组件都有动效果,体验是非常棒的。

1743686632610.png









The End
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表本站观点和立场。
最新文章
    FreeMarker template error (HTML_DEBUG mode; use RETHROW in production!)
    
    The following has evaluated to null or missing:
    ==> mrcms_407038f353f6418fa13309619eab1bfd  [in template "article.html" at line 274, column 64]
    
    ----
    Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
    ----
    
    ----
    FTL stack trace ("~" means nesting-related):
    	- Failed at: #list mrcms_407038f353f6418fa13309619...  [in template "article.html" at line 274, column 57]
    ----
    
    Java stack trace (for programmers):
    ----
    freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
    	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
    	at freemarker.core.Expression.assertNonNull(Expression.java:233)
    	at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:103)
    	at freemarker.core.IteratorBlock.accept(IteratorBlock.java:93)
    	at freemarker.core.Environment.visit(Environment.java:330)
    	at freemarker.core.Environment.visit(Environment.java:336)
    	at freemarker.core.Environment.process(Environment.java:309)
    	at freemarker.template.Template.process(Template.java:384)
    	at org.marker.mushroom.template.SendDataToView.process(SendDataToView.java:144)
    	at org.marker.mushroom.core.WebAPP.start(WebAPP.java:187)
    	at org.marker.mushroom.servlet.DispatcherServlet.progress(DispatcherServlet.java:48)
    	at org.marker.mushroom.servlet.DispatcherServlet.doGet(DispatcherServlet.java:75)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:489)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:583)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:212)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:662)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:428)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:360)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:297)
    	at org.marker.mushroom.filter.SystemCoreFilter.doFilter(SystemCoreFilter.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:679)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:617)
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:934)
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1690)
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
    	at java.base/java.lang.Thread.run(Thread.java:840)