Flutter/Dart 中的 TDD。如何减少启动时间
Posted
技术标签:
【中文标题】Flutter/Dart 中的 TDD。如何减少启动时间【英文标题】:TDD in Flutter/Dart. How to reduce start up time 【发布时间】:2018-11-29 13:58:21 【问题描述】:我尝试在 Dart 中使用 Flutter 为应用程序的业务逻辑进行测试驱动开发 (TDD)。对于快速 TDD 周期,运行测试的启动时间感觉有点慢。在我的机器上大约需要 4-5 秒。
我使用的是package:test/test.dart
,因此无需将应用程序部署到设备上,并且可以在 Dart VM 上本地运行测试。测试本身运行得很快。
在使用 Java 的 JUnit 和本地 Java VM 开发 android 原生应用时,启动时间要快得多
有没有办法让 Dart 中的单元测试启动时间也这么快? (无需购买速度更快的物理机)。
编辑: 我的 Dart 版本:
Flutter 医生 -v: 2.0.0-dev.54.0.flutter-46ab040e58 Dart 插件使用: 2.0.0-edge.c080951d45e79cd25df98036c4be835b284a269c 并且在我的颤振安装中:C:\flutter\bin\cache\dart-sdkDart 测试位于 Flutter 项目中。我通过右键单击带有测试的文件在 Android Studio 中启动 Dart 测试,或者仅使用 IDE 中的“>”运行测试按钮。然后 Android Studio 会生成一个运行配置,因此我可以使用键盘快捷键快速启动它。
【问题讨论】:
你是如何运行测试的?您描述的似乎与 Flutter 无关。也许你正在编写存储在 Flutter 项目中的 Dart 测试。我假设你使用的是pub run test
,对吧?
你使用的是什么 Dart 版本?
如果你使用上下文菜单,这取决于你使用pub run test
或flutter test
时IntelliJ Dart插件设置中的Dart SDK path
指向什么Dart SDK。
很高兴知道。但这意味着它使用flutter test
。我不知道如何让它更快,但我很确定 Dart 团队会在这方面努力工作。从 Dart 1 到 Dart 2,编译器工具链发生了很大变化,在 Dart 2 功能稳定后,他们将花更多时间在性能优化上。 Dart 成员在 GitHub 问题 cmets 上多次提到还有很大的改进空间。
我确信他们正在努力,并且会在 Dart 2 发布后继续改进。为 Dart 2 重建了整个解析器-编译器工具链。首先他们关注功能完整性,然后关注性能。
【参考方案1】:
这个方法非常适合我:
1. flutter run --profile --cache-sksl
2. Press M at the command line of flutter run to write the captured SkSL shaders into a file named something like flutter_01.sksl.json.
3. Build the app with SkSL warm-up using the following, as appropriate:
Android:
flutter build apk --bundle-sksl-path flutter_01.sksl.json
or
flutter build appbundle --bundle-sksl-path flutter_01.sksl.json
ios:
flutter build ios --bundle-sksl-path flutter_01.sksl.json
For more information, visit: https://flutter.dev/docs/perf/rendering/shader
【讨论】:
【参考方案2】:我最近尝试运行一个示例测试(使用 Flutter 演示应用程序),通过终端运行 flutter test
会立即初始化测试。
但是,当通过 UI 运行测试时,我得到了类似的启动时间(大约 4 秒)。
我尝试深入研究设置,似乎没有任何配置可以修改以使测试的初始化速度比我们目前拥有的更快。
这是我的颤振医生供参考。
[✓] Flutter (Channel master, 1.26.0-2.0.pre.281, on macOS 11.1 20C69 darwin-x64)
• Flutter version 1.26.0-2.0.pre.281
• Framework revision 4d5db88998 (2 weeks ago), 2021-01-11 10:29:26 -0800
• Engine revision d5cacaa3a6
• Dart version 2.12.0 (build 2.12.0-211.0.dev)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
• Platform android-30, build-tools 29.0.2
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.0.1, Build version 12A7300
• CocoaPods version 1.10.0
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
? https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
? https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
[✓] VS Code (version 1.52.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.18.1
[✓] Connected device (1 available)
• Chrome (web) • chrome • web-javascript • Google Chrome 88.0.4324.96
• No issues found!
【讨论】:
到目前为止有什么成功吗?我面临同样的问题...以上是关于Flutter/Dart 中的 TDD。如何减少启动时间的主要内容,如果未能解决你的问题,请参考以下文章
(Flutter/Dart) 如何修复使用 [ ] 显示列表中的数字
如何有条件地将参数传递给 Flutter/Dart 中的 Widget?
如何将 TextButton 背景颜色输入到 Flutter/dart 中的函数