# Conflicts: # .nvmrc # aio/content/cli/index.md # aio/content/guide/ajs-quick-reference.md # aio/content/guide/animations.md # aio/content/guide/aot-compiler.md # aio/content/guide/app-shell.md # aio/content/guide/architecture-components.md # aio/content/guide/architecture-modules.md # aio/content/guide/architecture-services.md # aio/content/guide/architecture.md # aio/content/guide/attribute-directives.md # aio/content/guide/bazel.md # aio/content/guide/bootstrapping.md # aio/content/guide/browser-support.md # aio/content/guide/build.md # aio/content/guide/cheatsheet.md # aio/content/guide/cli-builder.md # aio/content/guide/comparing-observables.md # aio/content/guide/complex-animation-sequences.md # aio/content/guide/component-interaction.md # aio/content/guide/component-styles.md # aio/content/guide/creating-libraries.md # aio/content/guide/dependency-injection-in-action.md # aio/content/guide/dependency-injection-navtree.md # aio/content/guide/dependency-injection-providers.md # aio/content/guide/dependency-injection.md # aio/content/guide/deployment.md # aio/content/guide/deprecations.md # aio/content/guide/displaying-data.md # aio/content/guide/dynamic-component-loader.md # aio/content/guide/dynamic-form.md # aio/content/guide/elements.md # aio/content/guide/entry-components.md # aio/content/guide/feature-modules.md # aio/content/guide/file-structure.md # aio/content/guide/form-validation.md # aio/content/guide/forms-overview.md # aio/content/guide/forms.md # aio/content/guide/frequent-ngmodules.md # aio/content/guide/glossary.md # aio/content/guide/hierarchical-dependency-injection.md # aio/content/guide/http.md # aio/content/guide/i18n.md # aio/content/guide/ivy.md # aio/content/guide/language-service.md # aio/content/guide/lazy-loading-ngmodules.md # aio/content/guide/lifecycle-hooks.md # aio/content/guide/module-types.md # aio/content/guide/ngmodule-api.md # aio/content/guide/ngmodule-faq.md # aio/content/guide/ngmodule-vs-jsmodule.md # aio/content/guide/ngmodules.md # aio/content/guide/npm-packages.md # aio/content/guide/observables-in-angular.md # aio/content/guide/observables.md # aio/content/guide/pipes.md # aio/content/guide/providers.md # aio/content/guide/reactive-forms.md # aio/content/guide/releases.md # aio/content/guide/reusable-animations.md # aio/content/guide/route-animations.md # aio/content/guide/router.md # aio/content/guide/rx-library.md # aio/content/guide/schematics-authoring.md # aio/content/guide/schematics-for-libraries.md # aio/content/guide/schematics.md # aio/content/guide/security.md # aio/content/guide/service-worker-communications.md # aio/content/guide/service-worker-config.md # aio/content/guide/service-worker-devops.md # aio/content/guide/service-worker-getting-started.md # aio/content/guide/service-worker-intro.md # aio/content/guide/set-document-title.md # aio/content/guide/setup-local.md # aio/content/guide/sharing-ngmodules.md # aio/content/guide/singleton-services.md # aio/content/guide/static-query-migration.md # aio/content/guide/structural-directives.md # aio/content/guide/styleguide.md # aio/content/guide/template-syntax.md # aio/content/guide/testing.md # aio/content/guide/transition-and-triggers.md # aio/content/guide/typescript-configuration.md # aio/content/guide/universal.md # aio/content/guide/updating.md # aio/content/guide/upgrade-setup.md # aio/content/guide/upgrade.md # aio/content/guide/user-input.md # aio/content/guide/using-libraries.md # aio/content/guide/visual-studio-2015.md # aio/content/guide/web-worker.md # aio/content/guide/workspace-config.md # aio/content/marketing/events.html # aio/content/marketing/resources.json # aio/content/navigation.json # aio/content/start/data.md # aio/content/start/deployment.md # aio/content/start/forms.md # aio/content/start/index.md # aio/content/start/routing.md # aio/content/tutorial/index.md # aio/content/tutorial/toh-pt0.md # aio/content/tutorial/toh-pt1.md # aio/content/tutorial/toh-pt2.md # aio/content/tutorial/toh-pt3.md # aio/content/tutorial/toh-pt4.md # aio/content/tutorial/toh-pt5.md # aio/content/tutorial/toh-pt6.md # aio/package.json # aio/src/app/app.component.spec.ts # aio/src/app/custom-elements/api/api-list.component.html # aio/src/app/layout/doc-viewer/doc-viewer.component.ts # aio/src/app/layout/mode-banner/mode-banner.component.ts # aio/src/app/layout/nav-item/nav-item.component.html # aio/src/app/shared/toc.service.ts # aio/src/styles/0-base/_typography.scss # aio/src/styles/2-modules/_api-pages.scss # aio/tools/transforms/templates/api/lib/memberHelpers.html # aio/yarn.lock # packages/common/http/src/headers.ts # packages/common/http/src/interceptor.ts # packages/common/http/src/params.ts # packages/common/http/src/response.ts # packages/common/src/common_module.ts # packages/common/src/directives/ng_for_of.ts # packages/common/src/location/location.ts # packages/common/src/pipes/date_pipe.ts # packages/core/src/change_detection/pipe_transform.ts # packages/core/src/di/injectable.ts # packages/core/src/metadata/di.ts # packages/core/src/metadata/directives.ts # packages/core/src/metadata/ng_module.ts # packages/core/src/render3/component_ref.ts # packages/forms/src/directives/reactive_directives/form_control_name.ts # packages/forms/src/form_builder.ts # packages/forms/src/model.ts # packages/forms/src/validators.ts # packages/router/src/config.ts # packages/router/src/directives/router_outlet.ts # packages/router/src/events.ts # packages/router/src/router.ts # packages/router/src/router_module.ts # packages/router/src/router_state.ts # packages/router/src/shared.ts
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Using web workers with Angular CLI
 | |
| 
 | |
| # 通过 Angular CLI 使用 Web Worker
 | |
| 
 | |
| 
 | |
| [Web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) allow you to run CPU intensive computations in a background thread, freeing the main thread to update the user interface.
 | |
| 
 | |
| [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) 允许你在后台线程中运行 CPU 密集型计算,解放主线程,以便更新用户界面。
 | |
| 
 | |
| 
 | |
| If you find your application becomes unresponsive while processing data, using web workers can help.
 | |
| 
 | |
| 如果你发现你的应用在处理数据时停止了响应,那么使用 Web Workers 可以为你提供帮助。
 | |
| 
 | |
| 
 | |
| ## Adding a web worker
 | |
| 
 | |
| ## 添加一个 Web Worker
 | |
| 
 | |
| 
 | |
| You can add a web worker anywhere in your application. If the file that contains your expensive computation is `src/app/app.component.ts`, you can add a web worker using `ng generate web-worker app`.
 | |
| 
 | |
| 你可以在应用中的任何地方添加一个 Web Worker。假设包含沉重计算工作的文件是 `src/app/app.component.ts`,你可以使用 `ng generate web-worker app` 新增一个 Web Worker。
 | |
| 
 | |
| 
 | |
| Running this command will:
 | |
| 
 | |
| 运行这个命令会:
 | |
| 
 | |
| 
 | |
| - configure your project to use web workers, if it isn't already.
 | |
| 
 | |
|   把你的项目配置成使用 Web Workers 的(如果尚未配置过)。
 | |
| 
 | |
| - add `src/app/app.worker.ts` with scaffolded code to receive messages:
 | |
| 
 | |
|   添加 `src/app/app.worker.ts` 文件,并添加用于接收消息的脚手架代码:
 | |
| 
 | |
|   <code-example language="typescript" header="src/app/app.worker.ts">
 | |
|   addEventListener('message', ({ data }) => {
 | |
|     const response = `worker response to ${data}`;
 | |
|     postMessage(response);
 | |
|   });
 | |
|  </code-example>
 | |
| 
 | |
| - add scaffolded code to `src/app/app.component.ts` to use the worker:
 | |
| 
 | |
|   往 `src/app/app.component.ts` 中添加使用该 worker 的脚手架代码:
 | |
| 
 | |
|   <code-example language="typescript" header="src/app/app.component.ts">
 | |
|   if (typeof Worker !== 'undefined') {
 | |
|     // Create a new
 | |
|     const worker = new Worker('./app.worker', { type: 'module' });
 | |
|     worker.onmessage = ({ data }) => {
 | |
|       console.log(`page got message: ${data}`);
 | |
|     };
 | |
|     worker.postMessage('hello');
 | |
|   } else {
 | |
|     // Web workers are not supported in this environment.
 | |
|     // You should add a fallback so that your program still executes correctly.
 | |
|   }
 | |
|   </code-example>
 | |
| 
 | |
| After the initial scaffolding, you will need to refactor your code to use the web worker by sending messages to and from.
 | |
| 
 | |
| 在完成了最初的脚手架之后,你需要重构代码,通过来回发送消息来使用 Web Worker。
 | |
| 
 | |
| ## Caveats
 | |
| 
 | |
| ## 警告
 | |
| 
 | |
| 
 | |
| There are two important things to keep in mind when using web workers in Angular projects:
 | |
| 
 | |
| 在 Angular 项目中使用 Web Workers 时,要记住两个重要事项:
 | |
| 
 | |
| 
 | |
| - Some environments or platforms, like `@angular/platform-server` used in [Server-side Rendering](guide/universal), don't support web workers. You have to provide a fallback mechanism to perform the computations that the worker would perform to ensure your application will work in these environments.
 | |
| 
 | |
|   某些环境或平台(比如[服务端渲染](guide/universal)中使用的 `@angular/platform-server` 不支持 Web Workers。你必须提供一个后备机制来执行 Worker 要执行的计算,以确保你的应用能在那些环境中运行。
 | |
| 
 | |
| - Running Angular itself in a web worker via [**@angular/platform-webworker**](api/platform-webworker) is not yet supported in Angular CLI.
 | |
| 
 | |
|   Angular CLI 尚不支持通过 [**@angular/platform-webworker**](api/platform-webworker)在 Web Worker 中运行 Angular 自身。
 | |
| 
 |