桌面端框架Electron使用问题整理和总结

electron打包的exe程序,点击安装却执行了卸载的问题 electron打包的exe安装后,在没卸载的情况下,重新点击exe安装,会执行卸载,再点一次才是安装;针对这个问题,我注释了打包里的一个配置,就好了,如下。在window平台下。 阅读详情

在这里插入图片描述
文章主要记录了使用electron日常开发中所遇到的一些坑以及怎样填坑,帮助其他开发的小伙伴少踩一些坑。建议关注收藏,以便遇到时候方便查阅!

electron这个框架我就不过多介绍了,是使用node和Chromium架构的一个桌面端框架,如果有了解使用web技术开发桌面端,这个框架多少会听说过或者正在使用。

下面就记录一下自己在阅读文档的一些疑问以及开发过程中踩过的坑!

electron?

  1. Spectron 和 Devtron 的作用?

    • Spectron可以和其他的mocha等测试框架进行结合,测试electron
    • Devtron是Electron DevTools的扩展,可以帮助你检查,监控和调试应用程序。默认是关闭状态
  2. <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />的作用?

    • 设置 HTTP 的 Content-Security-Policy 头部字段
    • 为了防止XSS攻击,安全考虑可以在content中设置允许加载的脚本的源
  3. electron-forge的作用?

    • 是一个快速构建electron的构建工具,里面包含打包、自动更新等
    • 内部书写html和js为原生写法,未集成第三方框架
  4. 在electron中使用iframe和webview的的区别?

    • 官方建议使用iframe代替webview,webview标签可以加载一个访客模式的URL页面,由于这个标签是基于Chromium webview,目前架构变化较快,不够稳定。但是webview所提供的功能较多,比如控制访客能否前进后退等
  5. window.open()使用native和chrome的区别是什么?

    • 在electron中使用window.open()打开一个URL使用,会创建一个BrowserWindow实例,使用的是native的窗口,可以通过设置nativeWindowOpen: true来使用chrome内置的window.open(),同步打开窗口
  6. electron-packager 和 electron-builder 的打包区别?为什么推荐使用 electron-builder?

    • electron-packager 和 electron-builder 都是用于electron应用打包的模块, 相比较electron-builder有更丰富的功能,支持更多的平台,打包的文件更加轻量,支持非electron内置的自动更新(内置的自动更新需上传到git等支持平台)
  7. 在electron中使用node原生模块的时候,electron-rebuild能够简化原生的重编译?

    • 由于electron内置的node版本和你电脑本机的版本不一致,则在使用node原生模块的时候可能会报错,Error: The module '/path/to/native/module.node'
    • 有3中方式可以解决该问题(下面会详细介绍两种使用方法,其他方式参考官方文档)

electron进程之间通讯

  1. 主进程向渲染进程通讯

    • 主进程使用 win.webContents.send 发送消息
    • 渲染进程使用 ipcRenderer.on 接收消息
  2. 渲染进程向主进程通信

    • 渲染进程使用 ipcRenderer.send 或者 ipcRenderer.invoke 发送消息
    • 主进程使用 ipcMain.on或者ipcMain.handle 接收消息
  3. 渲染进程向渲染进程通信

  • 通知事件
    • 通过主进程转发(Electron 5之前)
    • ipcRenderer.sendTo(Electron 5之后)
  • 数据共享
    • web技术(localStorage、sessionStorage、indexedDB、可嵌入型数据库等)
    • 使用remote(尽量少用,容易影响性能)

由于公司使用的技术栈是vue,所以需要将electron和vue结合起来,当然结合的方式也不麻烦,这里我们选用了electron-vue这个开源框架。它已经将两者结合起来,并且能够独立打包成web,但在使用过程中还是有些疑问和坑的,记录一下

electron-vue 的坑与填坑?

  1. 这个框架使用vue-electron模块,它的作用是什么?

    • 将 electron API 附加到 Vue 对象,不需要显式的在vue中引入electron(require('electron'))
    • vue-electron源码很简单,将 $electron 挂载到vue的原型上
    const electron = require('electron')
    
    module.exports = {
      install: function (Vue) {
        Object.defineProperties(Vue.prototype, {
          $electron: {
            get () {
              return electron
            },
          },
        })
      },
    }
    
    
  2. 这个框架使用vuex-electron模块,它的作用是什么?

    • 可以在多个进程中间可以共享状态,比如在electron的主进程和渲染进程中公用一个状态,并将数据存放在磁盘中
  3. 在主进程中使用__dirname 与 __filename 打包后,并不能得到我们预期的路径?

    • 在调用native的dll的时候也遇到这个问题了,打包之前能够获得正确路径,打包后文件会被放在app.asar这个虚拟文件中,路径就会错误
    • 解决方法:electron-vue 中提供了__static全局变量解决了这个问题,只需要将静态文件放入到__static文件夹即可(path.join(__static, '/xxx.dll'))
    • 如果只使用electron本身这个框架,你需要自己设置开发时路径和打包后的访问路径
  4. 初始化完成项目后会报一个错误:ReferenceError: process is not defined

    • 可以在index.ejs中将<% if (!process.browser) { %>修改成<% if (!require('process').browser) { %>(如果需要打包成web,请不要使用该方法)
    • 或者在webpack.renderer.config.js修改以下代码(实际上是配置页面中使用的process参数,如果需要打包成web,可以使用该方法,但不要在webpack.web.config.js中添加该代码)
    new HtmlWebpackPlugin({
          filename: 'index.html',
          template: path.resolve(__dirname, '../src/index.ejs'),
    +      templateParameters(compilation, assets, options) {
    +        return {
    +         compilation: compilation,
    +         webpack: compilation.getStats().toJson(),
    +          webpackConfig: compilation.options,
    +          htmlWebpackPlugin: {
    +            files: assets,
    +            options: options
    +          },
    +          process,
    +        };
    +      },
          minify: {
            collapseWhitespace: true,
            removeAttributeQuotes: true,
            removeComments: true
          },
          nodeModules: process.env.NODE_ENV !== 'production'
            ? path.resolve(__dirname, '../node_modules')
            : false
        }),
    
  5. 构建完项目后electron版本默认是2.x, 升级版本后会报错module is not defined

    • 原因新版本electron默认不开启node集成,在main/index.js创建窗口的时候加上以下代码
    mainWindow = new BrowserWindow({
      height: 563,
      useContentSize: true,
      width: 1000,
    +  webPreferences: {
    +    nodeIntegration: true
    +  }
    })
    
  6. 报错 Unable to install vue-devtools

    • 原因是vue-devtools需要外网下载,科学上网即可
  7. 在该项目中调用vuex的mutations时,会报错Please, don't use direct commit's, use dispatch instead of this.

    • 这里提示不能使用同步的方法修改,应该通过调用actions去触发mutations
    • 原因是vuex-electron里面加载了多进程之间共享mutations插件
    • 解决方法:1.在store/index.js中将createSharedMutations 插件注释即可
    • 2.通过调用actions去触发mutations,并且在主进程main/index.js加入该代码import '../renderer/store'
    • 3.查询vuex-electrongithub,按照文档设置whitelist,这里不赘述
  8. 在vuex中存储的数据,即使刷新和重启项目,该数据依然存在(这里功能可以设置用户长期存储的数据)

    • vuex-electron是将数据存储在磁盘中,默认路径可以通过app.getPath('userData')找到存储路径下面的一个vuex.json的文件,安装不同的electron应用,文件目录下面都会生成一个vuex.json文件
    • vuex-electron内部使用了electron-store这个模块,这个模块可以set数据,但是vuex-electron并没有将暴露出来
    • 解决办法: 如果你想和在web中一样,刷新或者关闭后,数据重置,直接在下面第9个问题这,将plugins加载的模块删除即可
  9. 使用npm run build:web打包时候,报错Error: Can't resolve 'fs' in xxxx

    • 修改renderer/store/index.js,在web中去除vuex-electron并删除显示引入vuex-electron
    import Vue from 'vue'
    import Vuex from 'vuex'
    - import { createPersistedState, createSharedMutations } from 'vuex-electron'
    import modules from './modules'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      modules,
    +  plugins: process.env.IS_WEB ? [] : [
    +    require('vuex-electron').createPersistedState(),
    +    require('vuex-electron').createSharedMutations()
      ],
      strict: process.env.NODE_ENV !== 'production'
    })
    
  10. 打包报错

    • 这里最容易报错的就是downloading parts=8 size=63 MB url=https://github.com/electron/electron/releases/download/vx.x/electron-vx.x-win32-x64.zip失败
    • 解决办法:手动去https://npm.taobao.org/mirrors/electron找到对应electron版本下载
    • 将下载好文件手动放在C:\Users\用户名\AppData\Local\electron\Cache文件夹中即可(AppData是隐藏文件夹)

electron调用native方法

安装环境(mac环境无需安装第1步)

  1. 管理员权限执行npm install --global windows-build-tools 安装python和C++环境
    如果无法安装可以单独安装
  • python(v2.7 ,3.x不支持)
  • visual C++ Build Tools,或者vs2015及以上
  1. npm install -g node-gyp 编译原生node模块(electron使用node原生模块需要编译)
  2. node-gyp list 查看是否缺少node.lib 库,并按照提示安装 node-gyp install
  3. 在src/main/index.js中启用渲染层node集成

通过 node-ffi 模块调用C/C++ dll

  1. npm install ffi-napi --save 安装调用C/C++ dll的模块

    • 如果找不到python路径,设置python环境变量或者npm config set python你的python路径
    • 如果还不行尝试使用yarn安装
  2. npm install electron-rebuild ---save-dev 安装自动编译原生node模块

    • 如果不安装的话可以进行手动编译,方法如下
    • 进入node_module/ffi-napi文件夹执行node-gyp rebuild --target='当前electron的版本' --arch=x64 --dist-url=https://atom.io/download/atom-shell编译node原生模块
    • arch : 计算机的架构(x64或者ia32),如果node环境是32位,那么这里就是ia32,如果是node环境是64位,那么这里就是x64。
    • 如果路径错误,换成国内镜像路径 --dist-url=https://npm.taobao.org/mirrors/atom-shell
    • 再进入node_module/ref-napi文件夹执行node-gyp rebuild --target='当前electron的版本' --arch=x64 --dist-url=https://atom.io/download/atom-shell编译node原生模块
  3. 如果自动编译的话执行npx electron-rebuild,上步手动编译则不需要这一步了

  4. 剩下的就是在主进程里面调用native方法即可,渲染进程调用通过ipcRenderer和ipcMain通信调用即可,举个小例子

    // 主进程
    // 调用示例
    const ffi = require('ffi-napi')
    const CTEST =  ffi.Library('dll文件路径', {
      // 文件内的方法和参数类型
      'Add': ['float', ['float', 'float']],
      'Hello': ['string', []],
      'StrLength': ['int', ['string']]
    })
    // 同步调用
    CTEST.Hello()
    
    // 异步调用
    CTEST.StrLength.async('1234', (error, res) => {
      console.log(error, res)
    })
    

这里有两点需要注意一下

  • 如果没有使用electron-vue这个框架(electron-vue已经处理好静态文件路径),需要注意打包后的静态文件路径会有些问题,可以在在package.json文件中配置build后dll的文件存放
    "extraFiles": [
        {
        "from": "",
        "to": ""
        }
    ]
    
  • 64位的dll不能再32位机器上调用,会报错

通过 electron-edge-js 模块调用C# dll

  1. npm install electron-edge-js --save 安装调用C# dll的模块
  2. 这里electron的版本不能为8.x,版本7.x的页面刷新有bug,目前这个模块支持情况
    * Electron 1.6.x - Node.js v7.4.0.
    * Electron 1.7.x - Node.js v7.9.0.
    * Electron 1.8.x - Node.js v8.2.1.
    * Electron 2.x - Node.js v8.9.3.
    * Electron 3.x - Node.js v10.2.0.
    * Electron 4.0.4+ - Node.js v10.11.0.
    * Electron 5.x - Node.js v12.0.0.
    * Electron 6.x - Node.js v12.4.0.
    * Electron 7.x - Node.js v12.8.1
    
// 主进程
// 调用示例

const edge = require('electron-edge-js')
const edgeDll = edge.func({
  assemblyFile: 'dll文件路径',
  typeName: "Edge_test.Class1",
  methodName: "Concat"
})

edgeDll({ first: 'aaa', second: 'bb' }, function (error, result) {
  if (error) throw error
  console.log('C# DLL:',result)
})

通过robotjs控制鼠标键盘、node-serialport进行串口通讯等

  1. 使用方法这里不再赘述,文档查询即可。这些模块也是node原生模块,因此需要编译
  2. 自动编译同上npx electron-build,有时候自动编译不好使,就需要手动编译
  3. 手动编译 npm rebuild --runtime=electron --disturl=https://atom.io/download/atom-shell --target=<electron版本> --abi=<对应node版本的abi>或者直接进入模块文件夹中通过node-gyp编译:node-gyp rebuild
  4. abi查询网址:https://github.com/mapbox/node-pre-gyp/blob/master/lib/util/abi_crosswalk.json

自动更新

由于项目代码是放在自己服务并且不会进行签名,所以放弃electron内置的自动更新。项目使用的打包方式是electron-builder,最终决定使用electron-updater模块进行自动更新,它不依赖任何服务器并且可以从S3, GitHub或者任何其它静态文件存储更新,避开了 Electron 内置的更新机制

mac上代码必须要进行签名

这里给个简版示例

  1. npm install electron-updater --save 安装自动更新模块
  2. 主进程中写入更新代码
    // 每次开启应用时候会去自动到文件服务器检查是否有更新,并自动更新重启
    import { autoUpdater } from 'electron-updater'
    
    autoUpdater.on('update-downloaded', () => {
      autoUpdater.quitAndInstall()
    })
    
    app.on('ready', () => {
      if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
    })
    
  3. 配置打包更新服务器地址(这里配置从自己文件服务器获取更新)
    "build": {
      "publish": {
        "provider": "generic",
        "url": "http://127.0.0.1:8080" // 服务器地址
      }
    }
    
  4. 打包后安装,如果需要更新修改package.json的版本,重新打包,将.exe latest.yml .exe.blockmap 3个文件直接扔在文件服务器地址即可。下次用户打开应用便会自动更新

在electron中起个node服务

  • 这里代码比较简单,提供个思路:在主进程中创建个子进程执行node服务(child_process.fork),子进程和主进程通过进程之间进行通信,在主进程拿到数据之后通过ipcMain和ipcRenderer进行主进程和渲染层通信即可。

以上就是个人在阅读文档以及项目中遇到的部分问题和坑,记录分享一下,帮助其他小伙伴少走一些坑,感谢阅读!

如果文章让你有收获,欢迎关注公众号,不定时推送优质文章!!!

Electron自定义软件卸载流程 @此文章为问题解决方案记录@我碰到一个问题,我的单机程序集成了一个本地数据库,存放本地数据库文件的文件夹存放在用户的也就 这个文件夹中。😂😂所以,问题就来了,我发现,我卸载了这个程序,重新安装之后,程序竟然还能读取到我之前存储的数据,有点不符合逻辑。可是,我在的配置中已经配置了: 注:我这里说的指的是的打包配置,不同框架之间配置的地方不同,比如: 和 的配置地方就不一样。所以,为什么呢?我去看了一下人家electron-build官网的解释,并结合卸载流程来看,原来本身卸载时只管删除程序安装数据文件夹,.. 阅读详情

相关推荐

Electron使用问题整理和总结

Electron是一个流行的桌面应用程序开发框架,它基于Web技术栈构建,可以使用HTML、CSS和JavaScript创建跨平台的桌面应用程序。本文将整理和总结一些常见的Electron使用问题,并提供相应的源代码示例。Electron提供了一些打包工具,例如Electron Builder和Electron Packager,可以将应用程序打包为可执行文件。Electron应用程序由主进程和渲染进程组成,主进程负责创建窗口和处理系统级别的操作,而渲染进程负责呈现Web内容。目录中找到生成的安装文件。

OhFramework的博客 281

Debian系统桌面默认不启动的实现方式

使用rcconfg,使GDM默认不启动。 命令如下: #安装rcconf $sudo apt-get rcconf #启动rcconf,将gdm前的*去掉 $sudo rcconf

jet.han 1811

Webpack 与 Electron:桌面应用开发

本文旨在为前端开发者提供一个全面的指南,介绍如何使用Webpack和Electron构建现代化的桌面应用程序。我们将覆盖从基础概念到高级配置的所有内容,包括性能优化和调试技巧。核心概念介绍:Webpack和Electron的基本原理集成方案:如何将两者结合使用实战项目:从零开始构建一个Electron应用高级主题:性能优化和调试技巧未来发展趋势Webpack:一个现代JavaScript应用程序的静态模块打包工具Electron。

AI架构全栈开发实战笔记 1016

Debian8.3如何设置默认不启动Gnome

最近又光荣的回归了debian的怀抱,其实我就是跟风,现在做传媒平时也用不到多么高深的计算机知识,纯粹自己瞎鼓捣……嘿嘿,我相信有很多像我一样的人,刚刚装上了debian可以在同事面前华丽丽的装了一逼。。。。。为了让这个逼装得不漏痕迹,开机就要唬住他们,于是我想到了如何才能让debian默认进入字符界面呢? 从网上找了很多方法,都不奏效,至于都有哪些方法为什么不管用在此我就不一一列举了,因...

ieeso的博客 788

Electron常见问题 42 - 客户端提交到Mac App Store应用市场的基本步骤

目录 前言 正文 一、导出苹果证书 二、获取Team ID 三、打包签名 四、提交应用 限制内容 前言 Electron客户端做出来后,经常会面临提交到各个系统平台的应用市场,如果想要提交到Mac App Store应用市场,都有哪些注意事项呢,就是今天的讨论内容。 正文 Electron从 v0.34.0 开始就允许封装的应用提交到Mac App Store (MAS),但是有一些相应到限制要求。熟悉苹果套路的同学都知道,想要在苹果平台上开发和发布应用,不论是mac OS电脑端.

liuzhen007的专栏 1747

electron-localStorage:在eletron主线程也能使用的localStorage

electron-localStorage 在eletron主线程也能使用的localStorage electron主进程中是不能获取到浏览器的window对象的,所以我们不能像在渲染进程中一样使用浏览器为我们提供的localstorage对象。 但是主进程中有可能也需要这样的需求,比如我们在本地存储了当前的环境(dev/beta/prod),主进程需要根据不同的开发环境来load不同的url。 于是手动封装了一个可以在主进程中调用的localstorage。 1.安装 npm install electron-localstorage 2.引用: const storage = require('electron-localstorage'); 3.使用 3.1完美支持所有localStorage的所有api: 存储数据 storage.setItem(`myCat`, `Tom`);

electron 打包_桌面端框架Electron使用问题整理和总结

如果觉得文章不错,可以扫码关注文章结尾公众号:前端Jsoning ,每日推送技术文章,期待与你一起交流成长!!!文章主要记录了使用electron日常开发中所遇到的一些坑以及怎样填坑,帮助其他开发的小伙伴少踩一些坑。建议关注收藏,以便遇到时候方便查阅! electron这个框架我就不过多介绍了,是使用node和Chromium架构的一个桌面端框架,如果有了解使用web技术开发桌面端,这个框架多少会...

weixin_39607450的博客 1744

算法面试八股文『 基础知识篇 』

个人整理的算法面试基础知识八股文,内容较详细。

SG_teresa's blog 4338

桌面软件开发框架大赏

本文基于海康威视桌面端技术专家刘晓伦在「**RTC Dev Meetup • 杭州站丨大前端时代的业务架构和跨端实践**」活动中分享内容二次整理。

声网的博客 9125

半导体设备上位机开发:我的经验与新人指导

半导体设备上位机开发是一项复杂而富有挑战性的工作,需要扎实的技术基础和丰富的经验。如果你对半导体设备上位机开发感兴趣,欢迎随时与我交流,我会尽力帮助你!

qq_43518667的博客 2727

速腾聚创激光雷达复现FAST-LIO

记录复现FAST-LIO算法的过程和,代码梳理和理解。FAST-LIO的简化版、注释版。速腾激光雷达

abanchao的博客 2929

Electron桌面端所见即所得-electron特性快速学习与上手

突然让你开发Electron应用,你能hold住吗? 如果领导突然说需要开发一款前端桌面端应用,那么对于我们前端er来说选择Electron是一件顺理成章的事情。但事实上很多同学对于Electron都不太了解和熟悉。 如果突然让我们去开发Electron应用,很多人都会陷入迷茫和懵逼的状态。然后在依靠网上相对较少的资料,慢慢摸索、一路踩坑的完成Electronn的需求。 为了解决上述问题,我们完成了一个项目,并把它开源了出来, 希望能够对大家学习Electron有点帮助。 快速学习和上手Electron:.

OBKoro1前端分享 852

现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位

mengshenglo的博客 4万+

Electron桌面端所见即所得-Electron练习生

突然让你开发Electron应用,你能hold住吗? 如果领导突然说需要开发一款前端桌面端应用,那么对于我们前端er来说选择Electron是一件顺理成章的事情。但事实上很多同学对于Electron都不太了解和熟悉。 如果突然让我们去开发Electron应用,很多人都会陷入迷茫和懵逼的状态。然后在依靠网上相对较少的资料,慢慢摸索、一路踩坑的完成Electronn的需求。 为了解决上述问题,我们完成了一个项目,并把它开源了出来, 希望能够对大家学习Electron有点帮助。 快速学习和上手Electron:

xiaoheibanfe的博客 420

关于获取CISP-PTE一些避坑经历

考场内是不允许携带外设键盘的,现场会至少有一个360安全专业人员监考.所有人电脑都会提前装一个奇安信的一个考试exe,刚开始的时候会让你连接一个WIFI,我们将会通过WIFI进行做题,做题期间你的电脑将被全程监控并且一些退出快捷键也是全部锁死(有点像勒索病毒那种界面),想要重启必须直接拔电源。中途可以上厕所,需要监考官陪同

6322

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1555

electron的基本使用和遇到的坑整理

(1)electron的使用 (2)electron使用中发现的问题 electron Uncaught ReferenceError: jQuery is not defined;

qq_28013889的博客 2559

YOLO26改进策略【损失函数篇】| AAAI 2025 SD Loss,基于目标尺度动态调整尺度损失和位置损失的影响系数,减少 IoU 标签波动

在红外小目标检测任务里,基于交并比的损失存在波动问题,像边界框(BBox)标签的IoU损失波动最高可达86%,较小目标的IoU损失稳定性更差,严重影响模型稳定性和回归效果。同时,现有损失函数没有充分考虑不同目标尺度下对尺度和位置的敏感度差异,,并且掩码标签的位置损失在处理漏检物体时难以收敛,容易产生误报。这些问题限制了模型在不同尺度目标上的检测性能,为解决这些问题,提出了损失函数。

Limiiiing的博客 396

鸿蒙electron跨端框架PC青简笔记实战:从笔记列表、编辑器到桌面导出,一次做完整

本文介绍了青简笔记桌面端开发的核心设计思路。文章围绕笔记应用的真实使用场景,重点阐述了功能边界划定、项目结构分工、界面布局优化等关键环节。作者强调桌面工具开发应聚焦核心功能闭环,避免功能泛化,并通过合理的组件拆分确保代码可维护性。文中详细展示了字段设计、状态管理、数据持久化等具体实现方案,为开发者提供了从项目架构到细节实现的完整参考。该设计注重用户体验与开发效率的平衡,适合需要快速构建实用型桌面工具的开发者参考。

小淼淼的博客 541

移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理

在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 295

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

鸿蒙electron跨端框架PC浮签实战:做一面轻巧但能回找的桌面便签墙

本文介绍了青屿便签的设计思路与实现要点。作为一款轻量级桌面便签工具,它聚焦于快速记录与查找功能,避免功能过度复杂化。文章从便签的核心定位出发,详细阐述了字段设计、页面布局、状态管理等关键环节,强调保持工具轻量化的重要性。通过清晰的组件分工与合理的默认数据设置,确保用户体验流畅自然。同时介绍了本地存储、筛选排序等实现细节,以及如何通过Vue组件化开发保持代码结构清晰。整体设计围绕"桌面便签墙"概念展开,力求为用户提供简单高效的碎片信息管理工具。

小淼淼的博客 381

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

环信 demo_环信IM electron桌面端SDK 3.0正式发布

亲爱的25万环信开发者们,我们郑重的向您宣布环信在桌面端有了新的electron版本啦,环信即时通讯云基于electron框架开发的桌面端sdk 3.0今日正式对外发布,支持windows、mac和linux,同时将不再对之前的桌面端旧版本进行维护。ELECTRON发布环信即时通讯云作为国内最早以及全球最大的即时通讯云PaaS平台,一直致力于让开发者小伙伴们摆脱繁重的移动IM通讯底层开发,将精力专...

weixin_39727105的博客 311

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

electron内容整理

1、Electron: 从零开始写一个记事本app - 简书Electron介绍 简单来说,Electron就是可以让你用Javascript、HTML、CSS来编写运行于Windows、macOS、Linux系统之上的桌面应用的库。...https://www.jianshu.com/p/57d910008612 2、 Introduction | Electronhttps://www.electronjs.org/docs/latest3、Electron 中文文档_w3cschoolElect.

爱的叹息的专栏 613

还在用Electron开发桌面端?快试试这些框架

在这个桌面端跨端应用开发群魔乱舞的时代,比特鹰给大家整理了四大主流跨端框架的优缺点。帮助大家快速选择合适自己团队的框架进行开发。

2501_93887045的博客 200

IM跨平台技术学习(八):新QQ桌面版为何选择Electron作为跨端框架

本文内容整理自 QQ 技术团队的采访,我们一起来看看QQ团队选择Electron作为桌面版跨端框架背后的决策与思考。

hellojackjiang2011的博客 621

DeepSeek Harness 桌面端

DeepSeek Harness 是一个基于 Cordis 的插件式 Agent 框架,具备网页 GUI、会话管理、文件编辑、Shell 执行、子代理、工作流和技能系统等能力。对开发者来说,安装 Node.js、pnpm,再打开终端执行启动命令并不困难。安装符合版本要求的 Node.js(^22.19或>=24安装并配置 pnpm;在终端进入项目目录;执行命令并保持终端窗口运行;打开浏览器访问本地服务。

QQ3503814312的博客 471
上一篇: 尤雨溪这样评价svelte
下一篇: css动画是可以暂停的
前端秀儿
博客等级 码龄10年 20粉丝 26原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值