Flutter 启动优化
Dart VM在Flutter中的作用是什么?它负责执行Dart代码,无论是JIT还是AOT模式都需要它。在JIT模式下,VM随应用一起运行,而在AOT模式下,代码已经被编译成机器码,VM可能不需要运行时存在?不过实际上,即使在AOT模式下,某些功能可能仍需要VM的支持,比如动态加载或某些平台特定的操作。
用户提到的“预初始化”可能是指在应用启动前预先准备好VM环境,以减少冷启动时间。这在JIT模式下尤其重要,因为每次启动都需要加载VM并编译代码。预初始化可能涉及提前加载VM、共享VM实例或者复用之前的VM状态。
Dart VM 的作用
- 代码执行:负责解析、编译和执行 Dart 代码。
- 内存管理:自动处理垃圾回收(GC)。
- 运行时服务:提供反射、类型检查、异步调度等功能。
- 插件交互:通过 Platform Channel 与原生代码通信。
Dart虚拟机的创建过程
Dart虚拟机是一个解释器,它可以将Dart代码编译成字节码,并通过解释器将其转换成机器码并执行。在Flutter应用程序中,Dart虚拟机是通过Flutter引擎来创建和运行的。
下面是Dart虚拟机的创建过程:
- 首先,Flutter引擎会创建一个新的Isolate(独立的Dart执行环境),并将Dart代码加载到该Isolate中。
- 接着,Flutter引擎会启动Dart虚拟机,并为该Isolate创建一个Dart虚拟机实例。
- Dart虚拟机实例会初始化一个Dart运行时环境,并在该环境中创建一个Isolate对象,该对象用于管理和控制当前的执行环境。
- Dart虚拟机实例会为该Isolate分配一些资源,包括栈空间、堆内存和文件描述符等。
- Dart虚拟机实例会将Dart代码编译成字节码,并将其加载到该Isolate中。
- 然后,Dart虚拟机实例会创建一个Dart解释器,该解释器会解释和执行该Isolate中的Dart代码。
- 最后,Dart虚拟机实例会启动该Isolate,从而开始执行Dart代码。
1. 启动速度优化
Flutter启动流程:
1). 一个Native进程只有一个DartVM
2). 第一个FlutterEngine初始化时,会创建并初始化DartVM
3). 一个DartVM可以有多个FlutterEngine,每个FlutterEngine都运行在自己的Isolate中,他们的内存数据不共享,需要通过Isolate事先设置的port(顶级函数)通讯。
作者:淘淘养乐多
链接:https://juejin.cn/post/7350868887322263552
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一、启动阶段的核心问题
1. 冷启动(Cold Start)
- 定义:应用首次启动时,需要完成从 Dart VM 初始化、加载核心框架代码、解析资产文件 到 渲染首屏界面 的完整流程。
- 关键瓶颈:
- Dart VM 启动:初始化虚拟机、加载基础库。
- AOT 编译产物加载:解析编译后的二进制代码(如
app.so
)。 - 路由与初始化逻辑:执行
main()
函数中的业务代码。 - 资源解析:加载字体、图片、本地化文件等。
2. 热启动(Hot Restart)
- 定义:在已运行的 VM 上重启应用(如通过
flutter run
时的热重载)。 - 优化重点:复用 VM 和大部分已加载的代码/资源。
二、底层优化原理
1. AOT 编译(Ahead-Of-Time)
原理:
- 将 Dart 源码 静态编译 为 目标平台的机器码(如 x86_64、ARM64),生成
app.so
(Linux/macOS)或嵌入到二进制包中(Android/iOS)。 - 对比 JIT(Just-In-Time):
- JIT 启动时动态编译代码,但会引入编译开销;AOT 启动时直接执行机器码,无编译延迟。
优化效果:
- 冷启动时间减少 30%~50%(尤其是复杂应用)。
- 内存占用降低:无需维护 JIT 编译器堆栈。
实现细节:
- Dart VM 启动流程:
- 加载 AOT 编译后的
vm isolate
(包含基础 VM 运行时)。 - 加载
root isolate
(包含应用代码的字节码或 AOT 机器码)。 - 执行
main()
函数。
- 加载 AOT 编译后的
2. Tree Shaking
原理:
- 通过 静态分析,移除未使用的代码(函数、类、变量)。
- 实现方式:
- Dart 编译器:在
aot
模式下自动标记未引用代码。 - 构建工具:Gradle(Android)和 CocoaPods(iOS)集成 Tree Shaking。
- Dart 编译器:在
优化效果:
- 包体积减少 10%~30%(例如移除未使用的第三方库功能)。
- 启动时间间接优化:减少需加载的代码量。
3. Dart VM 初始化优化
关键机制:
- VM 预初始化:
- 在某些嵌入引擎(如 Flutter Engine)中,VM 可能在应用启动前预先初始化。
- Android 示例:通过
flutter.startInitialization
提前加载 VM。
- ** isolates**:
main isolate
负责业务逻辑,vm isolate
负责运行时服务(如垃圾回收)。- 优化方向:减少
main isolate
启动时的初始化开销。
三、具体优化措施
1. 代码优化
(1) 精简 main()
函数
- 问题:复杂的
main()
函数会触发大量初始化逻辑。 - 优化方案:
void main() async {// 延迟初始化非核心服务(如 Firebase)await Firebase.initializeApp();runApp(const MyApp()); }
- 原理:将耗时操作(如网络请求、第三方库初始化)延迟到首屏渲染之后。
(2) 按需加载路由
- 问题:传统路由模式会在启动时注册所有页面。
- 优化方案:
// 使用动态路由注册 final router = FlutterNativeRouter(); router.defineRoute('/login', LoginScreen()); // 在需要时注册路由 await router.registerRoutes(); runApp(MyApp());
- 原理:按需加载路由,避免一次性注册所有页面。
(3) 移除未使用的代码
- 工具:
flutter analyze
:检测未使用的变量、函数。pub deps
:查看依赖树,移除冗余库。
2. 配置优化
(1) 启用 AOT 并关闭调试模式
- Android (
build.gradle
):flutter {target: lib/main.dartaot: truedebugEnabled: false }
- iOS (
ios/Runner/Info.plist
):<key>FLUTTER_ENABLE_AOT</key> <true/> <key>FLUTTER_DEBUG_MODE</key> <false/>
- 原理:AOT 编译减少启动时的 JIT 开销,关闭调试模式禁用断言和日志。
(2) 调整 Dart VM 参数
- Android (
build.gradle
):flutter {dartOptions {vmArguments: --no-sound-null-safety} }
- 原理:关闭
sound null safety
可加速非空安全模式的检查。
3. 构建优化
(1) 启用持久化构建缓存
- 命令行:
flutter clean flutter build --cache
- 原理:复用构建缓存,避免重复编译相同的依赖。
(2) 使用 Split APKs(Android)
- 配置:
android {splits {abi {enable truereset()include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'}} }
- 原理:为不同 CPU 架构生成独立的 APK,减少包体积。
4. 资源优化
(1) 压缩与子集化资源
- 图片压缩:
- 使用 WebP 格式(透明度支持更好)或 PNG8(无透明度)。
- 工具:TinyPNG、ImageOptim。
- 字体子集化:
fonts:- family: Robotosubsets: latin
- 原理:减少资源文件体积,加快加载速度。
(2) 按需加载 Assets
- 动态加载:
Future<void> loadAssets() async {await rootBundle.load('assets/large_image.png'); }
- 原理:首屏加载完成后按需加载非关键资源。
5. 平台特定优化
(1) Android 优化
- 移除冗余主题:
<!-- AndroidManifest.xml 中移除默认主题 --> <applicationandroid:theme="@style/Theme.AppCompat.Light.NoActionBar"> </application>
- 启用代码混淆与 ProGuard:
buildTypes {release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'} }
- 原理:混淆代码可减少逆向工程风险,同时 Tree Shaking 依赖 ProGuard 规则。
(2) iOS 优化
- 移除调试符号:
post_install do |installer|installer.pods_project.targets.each do |target|target.build_configurations.each do |config|if config.name == 'Debug'config.build_settings['ENABLE_BITCODE'] = 'NO'endendend end
- 使用
strip_unused_code
:flutter build ios --release --strip-unused-code
- 原理:移除未使用的符号和代码,减小可执行文件体积。
四、性能分析工具
1. Flutter DevTools
- Timeline 视图:
- 分析启动阶段的各个阶段耗时(如 VM 初始化、Dart 初始代码加载、渲染首屏)。
- CPU Profiler:
- 检测启动时热点函数(如
main()
中的初始化逻辑)。
- 检测启动时热点函数(如
2. 命令行工具
flutter run --trace-skia
:- 输出 Skia 绘制指令,分析渲染性能。
flutter dump-tree
:- 查看渲染树结构,识别不必要的视图层级。
五、高级优化技巧
1. 冷启动预加载
- 方案:在应用安装后立即启动一个后台进程,预加载核心数据。
- 限制:可能违反平台政策(如 iOS 的后台执行限制)。
2. 使用 flet
或 flutter_native_router
- 路由优化:通过声明式路由减少初始化开销。
- 示例:
final router = FlutterNativeRouter(); router.defineRoute('/home', (context) => const HomeScreen());
3. Dart VM 预初始化
- Android:通过
flutter.startInitialization()
提前加载 VM。 - iOS:在
AppDelegate
中手动初始化 Dart VM。
六、总结
优化分层:
层级 | 优化手段 | 原理 |
---|---|---|
编译层 | AOT、Tree Shaking | 减少代码量和编译开销 |
运行时层 | VM 初始化优化、按需加载资源 | 减少启动时的初始化负担 |
构建层 | 缓存、Split APKs | 减少构建产物体积 |
平台层 | ProGuard、代码混淆 | 进一步压缩代码和资源 |
关键指标:
- 启动时间:从
main()
开始到首屏渲染完成的时间。 - 包体积:通过
flutter build
生成的可执行文件大小。 - CPU 占用:分析工具检测的启动阶段峰值 CPU 使用率。
通过上述优化,可将复杂应用的冷启动时间从 2~3 秒 缩短至 0.5~1 秒,显著提升用户体验。
相关文章:
Flutter 启动优化
Dart VM在Flutter中的作用是什么?它负责执行Dart代码,无论是JIT还是AOT模式都需要它。在JIT模式下,VM随应用一起运行,而在AOT模式下,代码已经被编译成机器码,VM可能不需要运行时存在?不过实际上…...
Java Idea配置问题
在 cmd 里手动切换: set JAVA_HOMEC:\Program Files\Java\jdk1.8.0_192 set PATH%JAVA_HOME%\bin;%PATH%在Idea的终端查看: java -versionClass com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tre JDK 版本不匹配 …...
百度搜索,能否将DeepSeek变成“内功”?
最近,所有的云平台和主流APP都在努力接入DeepSeek。其中,搜索类APP与搜索引擎更是“战况激烈”。那么问题来了,接入DeepSeek已经变成了标准配置,到底应该如何做出差异化?接入DeepSeek这件事能不能实现11大于2的效果&am…...
【C++委托与事件】函数指针,回调机制,事件式编程与松耦合的设计模式(上)
前言 上一次发文章已经是在两个月前了hhh,期间也是忙忙碌碌做了不少事情也鸽了不少东西… 本文我们来讲讲博主最近在项目中频繁使用的,也就是广泛运用于C#或者Java的一个常用编程机制(思路)-----委托和事件。由于C在语言特性上没…...
【Java学习】抽象类与接口
面向对象系列四 一、抽象方法 二、抽象类 三、意义检查 1.抽象方法的意义 2.意义检查 体现 四、接口 1.级别层次 2.接口变量 3.意义 4.成员 成员变量: 成员方法: 一、抽象方法 没有方法体即没有任何实现的方法是抽象方法,只有在…...
体育电竞比分网开发流程
开发一个体育电竞比分网的流程可以分为以下几个主要步骤: 1. 需求分析 目标用户:确定网站的主要用户群体,如体育迷、电竞爱好者等。 功能需求:列出网站需要实现的功能,如实时比分更新、赛事日程、新闻资讯、用户评论…...
vue2和vue3的主要区别
Vue 2 和 Vue 3 之间有几个主要区别,涉及到性能、功能和架构上的改进。以下是一些核心的区别: Composition API(组合式 API): Vue 2 使用的是选项式 API(Options API),即通过 data, …...
粘贴到Word里的图片显示不全
粘贴到Word里的图片显示不全,可从Word设置、图片本身、软件与系统等方面着手解决,具体方法如下: Word软件设置 经实践发现,图片在word行距的行距出现问题,可以按照如下调整行距进行处理 修改段落行距: 选…...
直角三角堰计算公式
直角三角堰的计算公式通常用于确定流经直角三角形形状的堰的流量。河北瑾航科技遥测终端机 通过采集液位数据(模拟量、串口485/232),计算得到瞬时流量,然后通过积分进行累计算出累积量;直角三角堰的流量计算公式为: 直角三角堰 计…...
细说Java 引用(强、软、弱、虚)和 GC 流程(一)
一、引用概览 1.1 引用简介 JDK1.2中引入了 Reference 抽象类及其子类,来满足不同场景的 JVM 垃圾回收工作: SoftReference 内存不足,GC发生时,引用的对象(没有强引用时)会被清理;高速缓存使用…...
C++,设计模式,【工厂方法模式】
文章目录 如何用汽车生产线理解工厂方法模式?一、传统生产方式的困境二、工厂方法模式解决方案三、模式应用场景四、模式优势分析五、现实应用启示✅C++,设计模式,【目录篇】 如何用汽车生产线理解工厂方法模式? 某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉…...
分布式之分布式ID
目录 需求 1. 全局唯一性 2. 高性能 3. 高可用性 4. 可扩展性 5. 有序性 6. 时间相关 7. 长度适中 8. 安全性 9. 分布式一致性 10. 易于集成 常见解决方案 选择依据 数据库号段模式 核心概念 工作流程 优点 缺点 实现示例 优化策略 适用场景 Snowflake雪…...
Innovus中快速获取timing path逻辑深度的golden脚本
在实际项目中我们经常会遇到一条timing path级数特别多,可能是一两页都翻不完。此时,我们大都需要手工去数这条path上到底有哪些是设计本身的逻辑,哪些是PR工具插入的buffer和inverter。 数字IC后端手把手培训教程 | Clock Gating相关clock …...
tortoiseGit的使用和上传拉取
tortoiseGit的使用和上传拉取 下载TortoiseGit 通过网盘分享的文件:tortoiseGit.zip 链接: https://pan.baidu.com/s/1EOT_UsM9_OysRqXa8gES4A?pwd1234 提取码: 1234 在电脑桌面新建文件夹并进入 右击鼠标 将网址复制上去 用户名和密码是在git注册的用户名和…...
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
简单工厂模式(Simple Factory Pattern)虽然不属于 GoF 23 种经典设计模式,但在实际开发中非常常用,尤其是在 Spring Boot 项目中。它提供了一种简单的方式来创建对象,将对象的创建逻辑集中到一个工厂类中。 一、简单工…...
前端排序算法完全指南:从理论到实践
<!DOCTYPE html> <html> <head><title>前端排序算法终极指南</title><style>.container { max-width: 1000px; margin: 0 auto; padding: 20px; }.demo-container { margin: 30px 0; border: 1px solid #eee; padding: 20px; }.bars-wrapp…...
【LeetCode Hot100 矩阵】矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵II
矩阵 1. 矩阵置零(Set Matrix Zeroes)解题思路步骤: 代码实现 2. 螺旋矩阵(Spiral Matrix)解题思路具体步骤: 代码实现 3. 旋转矩阵 90 度解决思路代码实现 5. 搜索二维矩阵中的目标值解决思路代码实现 1. …...
最新版IDEA下载安装教程
一、下载IDEA 点击前往官网下载 或者去网盘下载 点击前往百度网盘下载 点击前往夸克网盘下载 进去后点击IDEA 然后点击Download 选择自己电脑对应的系统 点击下载 等待下载即可 二、安装IDEA 下载好后双击应用程序 点击下一步 选择好安装目录后点击下一步 勾选这两项后点击…...
Embedding模型
检索的方式有那些 关键字搜索:通过用户输入的关键字来查找文本数据。 语义搜索:它的目标是理解用户查询的真实意图,不仅考虑关键词的匹配,还考虑词汇之间的语义 (文字,语音,语调...࿰…...
WSL进阶使用指南
WSL2通过 Hyper-V 技术创建了一个轻量级的虚拟机(VM),在这个虚拟机之上可以运行一个真正的 Linux 内核,这给希望同时使用 Windows 和 Linux 的开发人员提供了无缝高效的体验。本文会介绍一些使用WSL的知识,帮助你更好地…...
JavaScript函数-函数的参数
在JavaScript编程语言中,函数是组织代码和实现复杂逻辑的基本单元。而函数参数则是这些功能的重要组成部分,它们允许我们将数据传递给函数,从而使得函数更加通用和灵活。本文将深入探讨JavaScript函数参数的各种特性及其最佳实践。 参数基础…...
【C语言】第五期——函数
目录 0 前言 1 定义函数 2 调用函数 3 函数的实参和形参 4 函数声明 5 作用域 5.1 局部变量和全局变量 5.2 static关键字 5.2.1 修饰局部变量 5.2.2 修饰全局变量 5.2.3 修饰函数 6 函数的返回值 6.1 return语句 6.2 函数返回值的类型 7 函数的其他形式 7.1 函…...
线结构光三维重建
利用线结构光和单目进行三维重构(测距)_线结构光三维重建-CSDN博客...
Spring Boot 应用(官网文档解读)
Spring Boot 启动方式 SpringApplication.run(MyApplication.class, args); Spring Boot 故障分析器 在Spring Boot 项目启动发生错误的时候,我们通常可以看到上面的内容,即 APPLICATION FAILED TO START,以及后面的错误描述。这个功能是通过…...
基于ffmpeg+openGL ES实现的视频编辑工具-添加转场(九)
在视频编辑的广阔领域中,转场效果无疑是提升视频流畅性与观赏性的关键要素。巧妙运用转场,能够让不同视频片段之间的衔接更为自然,同时赋予视频独特的创意魅力。本文将深入探讨如何借助 ffmpeg 和 openGL ES 技术,在视频编辑工具中实现丰富多样的转场效果。 一、转场技术原…...
库的制作与原理(一)
1.库的概念 库是写好的,现成的可以复用的代码。本质上库是一种可执行的二进制形式,可以被操作系统载入内存执行。库有俩种:静态库 .a[Linux] .lib[windows] 动态库 .so[Linux] .dll[windows] 就是把.c文件变成.o文件,把…...
Java List 自定义对象排序 Java 8 及以上版本使用 Stream API
从 Java 8 开始,你可以使用 Stream API 对 List 进行排序,这种方式更加简洁和灵活。 以下是一个示例代码: import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors;// 自定…...
单元测试的策略有哪些,主要包括什么?
单元测试的策略及主要内容 单元测试(Unit Testing)是指对软件系统中的最小可测试单元(通常是一个函数、方法或类)进行验证,以确保其行为符合预期。常见的单元测试策略可以分为基于代码的策略和基于数据的策略…...
《深度剖析:AI与姿态估计技术在元宇宙VR交互中的应用困境》
在元宇宙的宏大版图里,虚拟现实(VR)交互是构建沉浸式体验的关键支柱,而人工智能(AI)与姿态估计技术的融合,本应成为提升交互体验的强大引擎。但在实际应用中,它们面临着诸多复杂且棘…...
基于YOLO11深度学习的糖尿病视网膜病变检测与诊断系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
【QT 网络编程】HTTP协议(二)
文章目录 🌟1.概述🌟2.代码结构概览🌟3.代码解析🌸Http_Api_Manager - API管理类🌸Http_Request_Manager- HTTP请求管理类🌸ThreadPool - 线程池🌸TestWindow- 测试类 🌟4.运行效果&…...
mysql之规则优化器RBO
文章目录 MySQL 基于规则的优化 (RBO):RBO 的核心思想:模式匹配与规则应用RBO 的主要优化规则查询重写 (Query Rewrite) / 查询转换 (Query Transformation)子查询优化 (Subquery Optimization) - RBO 的重中之重非相关子查询 (Non-Correlated Subquery)…...
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
007-念数字 输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu输入格式: 输入在一行中给出一个整数,如&…...
如何进行文档类图像的校正?
可以使用OpenCV实现的图像校正算法,包含透视校正和旋转校正的步骤,并附有详细注释。 具体如下: import cv2 import numpy as npdef order_points(pts):"""将四个点按左上、右上、右下、左下顺序排列"""rect …...
GPIO外设
一、GPIO简介 GPIO,general-purpos IO port,通用输入输出引脚,所有的GPIO引脚都有基本的输入输出功能。 最基本的输出功能:STM32控制引脚输出高、低电平,实现开关控制;最基本的输入功能:检测外部输入电平&…...
DeepSeek-R1之二_基于Open-WebUI的AI托管平台之Pyenv-win安装与配置搭建本地AI知识库
DeepSeek-R1之二_基于Open-WebUI的AI托管平台之Pyenv-win安装与配置搭建本地AI知识库 文章目录 DeepSeek-R1之二_基于Open-WebUI的AI托管平台之Pyenv-win安装与配置搭建本地AI知识库1. 官网及前提条件1. 官网2. 前提条件1. 安装了Ollama2. 通过Ollama下载与管理了DeepSeek-R1模…...
My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片
应用介绍 My Metronome 是一款适用于 macOS 的专业节拍器应用程序,旨在帮助音乐家、作曲家、学生和任何需要精确节奏控制的人进行练习。无论是进行乐器练习、音乐创作还是演出排练,My Metronome 都能为用户提供精准的节拍支持和灵活的功能,确…...
Windows系统本地部署DeepSeek-R1+本地知识库+联网搜索+Agent功能
本文记录了Windows11 Ollama AnythingLLM,3步快速本地部署DeepSeek-R1模型,支持联网搜索、应用本地知识库和创建Agent功能。 前言 DeepSeek-R1 知识库相关 更新时间:截至 2025年2月,当前版本的 R1 基于 2024年7月之前的数据训…...
RT-Thread+STM32L475VET6——TF 卡文件系统
文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行USB配置1.1 使用外部高速时钟,并修改时钟树1.2 打开SPI1,参数默认即可(SPI根据自己需求调整)1.3 打开串口,参数默认1.4 生成工程 2.配置SPI2.1 打开SPI驱动2.2 声明使用SPI…...
Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?
问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…...
Javascript使用Sodium库实现 aead_xchacha20poly1305_ietf加密解密,以及与后端的密文交互
Node.js环境安装 sodium-native (其他库可能会出现加密解密失败,如果要使用不一样的库,请自行验证) npm install sodium-native 示例代码,使用的是 sodium-native v4.3.2 (其他版本可能会有变化,如果要使用,请自行验…...
机器学习实战(8):降维技术——主成分分析(PCA)
第8集:降维技术——主成分分析(PCA) 在机器学习中,降维(Dimensionality Reduction) 是一种重要的数据处理技术,用于减少特征维度、去除噪声并提高模型效率。主成分分析(Principal C…...
0099__Visual Studio 引入外部静态库与动态库
Visual Studio 引入外部静态库与动态库_visual studio 添加库-CSDN博客...
eclips 快捷键
eclips 快捷键 类别快捷键功能描述通用Ctrl S保存当前文件Ctrl Shift S保存所有文件Ctrl Z撤销操作Ctrl Y重做操作Ctrl X剪切Ctrl C复制Ctrl V粘贴Ctrl A全选Ctrl F查找Ctrl H打开搜索对话框Ctrl /注释/取消注释当前行或选中的代码块Ctrl Shift /添加块注释Ctrl …...
VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器)的终极解决方案
VSCode ssh远程连接内网服务器(不能上网的内网环境的Linux服务器) 离线下载vscode-server并安装: 如果远程端不能联网可以下载包离线安装,下载 vscode-server 的 url 需要和 vscode 客户端版本的 commit-id 对应.通过 vscode 面板的帮助->关于可以获…...
【Gin-Web】Bluebell社区项目梳理3:社区相关接口开发
本文目录 一、接口详情1. 获取分类社区列表接口2. 根据id查询社区 二、值类型与引用类型 一、接口详情 跟社区有关的接口详情如下。 1. 获取分类社区列表接口 首先是Controller层,然后跳转到Logic层业务逻辑的开发。 这是Logic层,再做一次跳转&#…...
鸟语林-论坛系统自动化测试
文章目录 一、自动化实施步骤1.1编写Web测试用例1.2 编写自动化代码1.2.1 LoginPageTest1) 能否正确打开登录页面2) 点击去注册能否跳转注册页面3) 模拟用户登录,输入多组登录测试用例 1.2.2 RegisterPageTest1) 能否成功打开注册页面2) 注册测试用例3) 点击去登录按…...
图解循环神经网络(RNN)
目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同,…...
c语言左值和右值的区别
在C语言中,左值(lvalue)和右值(rvalue)是互斥的概念,左值不能是右值。以下是详细的解释和总结: 1. 左值(lvalue) 定义:左值是一个表达式,表示一个…...
Scrapy:Downloader下载器设计详解
Scrapy下载器设计详解 1. 整体架构 Scrapy的下载器(Downloader)是整个爬虫框架的核心组件之一,负责处理所有网络请求的下载工作。它的主要职责是: 管理并发请求实现请求调度处理下载延迟维护下载槽(Slot) 官方文档:Settings中的Downloader配…...