diff --git a/modules/benchmarks/src/views/BUILD.bazel b/modules/benchmarks/src/views/BUILD.bazel new file mode 100644 index 0000000000..0cd2fd3b82 --- /dev/null +++ b/modules/benchmarks/src/views/BUILD.bazel @@ -0,0 +1,52 @@ +package(default_visibility = ["//modules/benchmarks:__subpackages__"]) + +load("//tools:defaults.bzl", "ng_module", "ng_rollup_bundle") +load("@npm_bazel_typescript//:index.bzl", "ts_devserver") + +ng_module( + name = "application_lib", + srcs = glob( + ["**/*.ts"], + exclude = ["**/*.spec.ts"], + ), + deps = [ + "//packages:types", + "//packages/common", + "//packages/core", + "//packages/platform-browser", + ], +) + +ng_rollup_bundle( + name = "bundle", + entry_point = ":index.ts", + deps = [ + ":application_lib", + ], +) + +ts_devserver( + name = "prodserver", + static_files = [ + ":bundle.min_debug.es2015.js", + ":bundle.min.es2015.js", + "@npm//:node_modules/zone.js/dist/zone.js", + "index.html", + ], +) + +ts_devserver( + name = "devserver", + entry_module = "angular/modules/benchmarks/src/views/index", + index_html = "index.html", + scripts = [ + "@npm//:node_modules/tslib/tslib.js", + "//tools/rxjs:rxjs_umd_modules", + ], + serving_path = "/index.js", + static_files = [ + "@npm//:node_modules/zone.js/dist/zone.js", + "index.html", + ], + deps = [":application_lib"], +) diff --git a/modules/benchmarks/src/views/index.html b/modules/benchmarks/src/views/index.html new file mode 100644 index 0000000000..d9fba79e1d --- /dev/null +++ b/modules/benchmarks/src/views/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + +

Views traversal benchmark

+ + loading... + + + + + \ No newline at end of file diff --git a/modules/benchmarks/src/views/index.ts b/modules/benchmarks/src/views/index.ts new file mode 100644 index 0000000000..a969a01263 --- /dev/null +++ b/modules/benchmarks/src/views/index.ts @@ -0,0 +1,14 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import {enableProdMode} from '@angular/core'; +import {platformBrowser} from '@angular/platform-browser'; + +import {ViewsBenchmarkModuleNgFactory} from './views-benchmark.ngfactory'; + +enableProdMode(); +platformBrowser().bootstrapModuleFactory(ViewsBenchmarkModuleNgFactory); \ No newline at end of file diff --git a/modules/benchmarks/src/views/views-benchmark.ts b/modules/benchmarks/src/views/views-benchmark.ts new file mode 100644 index 0000000000..5984d34480 --- /dev/null +++ b/modules/benchmarks/src/views/views-benchmark.ts @@ -0,0 +1,67 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {CommonModule} from '@angular/common'; +import {ChangeDetectorRef, Component, Directive, NgModule, TemplateRef, ViewContainerRef} from '@angular/core'; +import {BrowserModule} from '@angular/platform-browser'; + +@Directive({selector: '[viewManipulationDirective]', exportAs: 'vm'}) +export class ViewManipulationDirective { + constructor(private _vcRef: ViewContainerRef, private _tplRef: TemplateRef) {} + + create(no: number) { + for (let i = 0; i < no; i++) { + this._vcRef.createEmbeddedView(this._tplRef); + } + } + + clear() { this._vcRef.clear(); } +} + +@Component({ + selector: 'benchmark-root', + template: ` + +
+ + + +
+ + +
text
+
+ + ` +}) +export class ViewsBenchmark { + items: number[]|undefined = undefined; + + constructor(private _cdRef: ChangeDetectorRef) {} + + create(vm: ViewManipulationDirective) { vm.create(1000); } + + destroy(vm: ViewManipulationDirective) { vm.clear(); } + + check() { + for (let i = 0; i < 10000; i++) { + this._cdRef.detectChanges(); + } + } +} + +@NgModule({ + declarations: [ViewsBenchmark, ViewManipulationDirective], + imports: [ + CommonModule, + BrowserModule, + ], + bootstrap: [ViewsBenchmark] +}) +export class ViewsBenchmarkModule { +} \ No newline at end of file