Skip to content

Instantly share code, notes, and snippets.

@jogboms
Last active October 21, 2023 17:28
Show Gist options
  • Save jogboms/5134308c9fafebb59db42c86b39a47bb to your computer and use it in GitHub Desktop.
Save jogboms/5134308c9fafebb59db42c86b39a47bb to your computer and use it in GitHub Desktop.
Registry benchmarks
import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:get_it/get_it.dart';
import 'package:ioc_container/ioc_container.dart';
import 'package:registry/registry.dart';
class GetItBenchmark extends BenchmarkBase {
const GetItBenchmark() : super('GetIt');
@override
void run() {
final instance = GetIt.asNewInstance();
instance
..registerFactory(() => '${instance<int>()} != ${instance<double>()}')
..registerFactory(() => {instance<double>() * instance<double>()})
..registerFactory(() => instance<int>() * 1.0)
..registerLazySingleton(() => instance<String>().isEmpty)
..registerSingleton(1);
instance
..get<double>()
..get<bool>()
..get<String>()
..get<Set<double>>()
..get<int>();
}
}
class IocContainerBenchmark extends BenchmarkBase {
const IocContainerBenchmark() : super('IocContainer');
@override
void run() {
final builder = IocContainerBuilder()
..add((i) => '${i<int>()} != ${i<double>()}')
..add((i) => {i<double>() * i<double>()})
..add((i) => i<int>() * 1.0)
..addSingleton((i) => i<String>().isEmpty)
..addSingletonService(1);
builder.toContainer()
..get<double>()
..get<bool>()
..get<String>()
..get<Set<double>>()
..get<int>();
}
}
class RegistryBenchmark extends BenchmarkBase {
const RegistryBenchmark() : super('Registry');
@override
void run() {
final Registry registry = Registry()
..factory((i) => '${i<int>()} != ${i<double>()}')
..factory((i) => {i<double>() * i<double>()})
..factory((i) => i<int>() * 1.0)
..lazy((i) => i<String>().isEmpty)
..set(1);
registry
..get<double>()
..get<bool>()
..get<String>()
..get<Set<double>>()
..get<int>();
}
}
void main() {
GetItBenchmark().report();
IocContainerBenchmark().report();
RegistryBenchmark().report();
}

A simple benchmark of jogboms/registry.dart vs MelbourneDeveloper/ioc_container vs fluttercommunity/get_it for educational purposes

Results as at 18/06/2023

get_it -> 7.6.0
ioc_container -> 1.0.12
registry -> https://github.com/jogboms/registry.dart/commit/c93055554a589cc8e8b03b7ff35502438cfc235f
GetIt(RunTime): 76.52719923002887 us.
IocContainer(RunTime): 14.140090159459044 us.
Registry(RunTime): 7.8082927396340756 us.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment