50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @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
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								const events = require('events');
							 | 
						||
| 
								 | 
							
								const EventEmitter = events.EventEmitter;
							 | 
						||
| 
								 | 
							
								require('../../dist/zone-node');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const emitters = [];
							 | 
						||
| 
								 | 
							
								const callbacks = [];
							 | 
						||
| 
								 | 
							
								const size = 100000;
							 | 
						||
| 
								 | 
							
								for (let i = 0; i < size; i++) {
							 | 
						||
| 
								 | 
							
								  const emitter = new EventEmitter();
							 | 
						||
| 
								 | 
							
								  const callback = (function(i) { return function() { console.log(i); }; })(i);
							 | 
						||
| 
								 | 
							
								  emitters[i] = emitter;
							 | 
						||
| 
								 | 
							
								  callbacks[i] = callback;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function addRemoveCallback(reuse, useZone) {
							 | 
						||
| 
								 | 
							
								  const start = new Date();
							 | 
						||
| 
								 | 
							
								  let callback = callbacks[0];
							 | 
						||
| 
								 | 
							
								  for (let i = 0; i < size; i++) {
							 | 
						||
| 
								 | 
							
								    const emitter = emitters[i];
							 | 
						||
| 
								 | 
							
								    if (!reuse) callback = callbacks[i];
							 | 
						||
| 
								 | 
							
								    if (useZone)
							 | 
						||
| 
								 | 
							
								      emitter.on('msg', callback);
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      emitter.__zone_symbol__addListener('msg', callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  for (let i = 0; i < size; i++) {
							 | 
						||
| 
								 | 
							
								    const emitter = emitters[i];
							 | 
						||
| 
								 | 
							
								    if (!reuse) callback = callbacks[i];
							 | 
						||
| 
								 | 
							
								    if (useZone)
							 | 
						||
| 
								 | 
							
								      emitter.removeListener('msg', callback);
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      emitter.__zone_symbol__removeListener('msg', callback);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  const end = new Date();
							 | 
						||
| 
								 | 
							
								  console.log(useZone ? 'use zone' : 'native', reuse ? 'reuse' : 'new');
							 | 
						||
| 
								 | 
							
								  console.log('Execution time: %dms', end - start);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								addRemoveCallback(false, false);
							 | 
						||
| 
								 | 
							
								addRemoveCallback(false, true);
							 | 
						||
| 
								 | 
							
								addRemoveCallback(true, false);
							 | 
						||
| 
								 | 
							
								addRemoveCallback(true, true);
							 |