Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Testasdasdasdasd
(version: 1)
asdasdasdasd
Comparing performance of:
Switch statement vs Map statement
Created:
4 months ago
by:
Guest
Jump to the latest result
HTML Preparation code:
<!--your preparation HTML code goes here-->
Script Preparation code:
// --- ENUMS & CONSTANTS --- var ClrPopoverType = { SIGNPOST: 0, TOOLTIP: 1, DROPDOWN: 2, DEFAULT: 3 }; var ClrPopoverPosition = { TOP_LEFT: 'top-left', TOP_RIGHT: 'top-right', BOTTOM_LEFT: 'bottom-left', BOTTOM_RIGHT: 'bottom-right', LEFT_TOP: 'left-top', RIGHT_TOP: 'right-top' }; var POPOVER_OFFSETS = { 0: 16, // Signpost 1: 21, // Tooltip 2: 2, // Dropdown 3: 0 // Default }; // A list of 12 positions to simulate the loop in the original code var SIGNPOST_POSITIONS = [ ClrPopoverPosition.TOP_LEFT, ClrPopoverPosition.TOP_RIGHT, ClrPopoverPosition.BOTTOM_LEFT, ClrPopoverPosition.BOTTOM_RIGHT, ClrPopoverPosition.LEFT_TOP, ClrPopoverPosition.RIGHT_TOP, 'right-middle', 'left-middle', 'top-middle', 'bottom-middle', 'right-bottom', 'left-bottom' ]; // --- 1. THE SWITCH IMPLEMENTATION (LEGACY) --- function getPositions_Switch(type) { var positionsToCheck; // Simulate the switch to select array switch (type) { case ClrPopoverType.TOOLTIP: positionsToCheck = SIGNPOST_POSITIONS; break; // simplified case ClrPopoverType.DROPDOWN: positionsToCheck = SIGNPOST_POSITIONS; break; // simplified default: positionsToCheck = SIGNPOST_POSITIONS; break; } // Map to new objects (Allocation happens here) return positionsToCheck.map(function(pos) { return createPositionObject_Switch(pos, type); }); } function createPositionObject_Switch(key, type) { var offset = POPOVER_OFFSETS[type] || 0; // Simulate the massive Switch-Case for creating the object switch (key) { case ClrPopoverPosition.TOP_LEFT: return { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset }; case ClrPopoverPosition.TOP_RIGHT: return { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset }; case ClrPopoverPosition.BOTTOM_LEFT: return { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset }; default: return { originX: 'center', originY: 'center', overlayX: 'center', overlayY: 'center', offsetY: 0 }; } } // --- 2. THE MAP/CACHE IMPLEMENTATION (OPTIMIZED) --- var POSITION_CACHE = new Map(); // Static Config Map var CONFIG_MAP = {}; CONFIG_MAP[ClrPopoverPosition.TOP_LEFT] = { origin: {originX: 'start', originY: 'top'}, overlay: {overlayX: 'start', overlayY: 'bottom'} }; CONFIG_MAP[ClrPopoverPosition.TOP_RIGHT] = { origin: {originX: 'end', originY: 'top'}, overlay: {overlayX: 'end', overlayY: 'bottom'} }; CONFIG_MAP[ClrPopoverPosition.BOTTOM_LEFT] = { origin: {originX: 'start', originY: 'bottom'}, overlay: {overlayX: 'start', overlayY: 'top'} }; function getPositions_Cached(type) { // 1. Check Cache if (POSITION_CACHE.has(type)) { return POSITION_CACHE.get(type); } // 2. Generate (Only once) var result = SIGNPOST_POSITIONS.map(function(pos) { return createPositionObject_Map(pos, type); }); // 3. Freeze & Save Object.freeze(result); POSITION_CACHE.set(type, result); return result; } function createPositionObject_Map(key, type) { var offset = POPOVER_OFFSETS[type] || 0; var config = CONFIG_MAP[key] || { origin: {originX: 'center'}, overlay: {overlayX: 'center'} }; var result = { originX: config.origin.originX, originY: config.origin.originY, overlayX: config.overlay.overlayX, overlayY: config.overlay.overlayY, offsetY: key.indexOf('top') > -1 ? -offset : offset }; Object.freeze(result); return result; }
Tests:
Switch statement
// Simulate 100 components requesting positions for (var i = 0; i < 100; i++) { var result = getPositions_Switch(ClrPopoverType.SIGNPOST); // Access a value to ensure engine doesn't optimize away var check = result[0].originX; }
Map statement
// Simulate 100 components requesting positions for (var i = 0; i < 100; i++) { var result = getPositions_Cached(ClrPopoverType.SIGNPOST); // Access a value to ensure engine doesn't optimize away var check = result[0].originX; }
Rendered benchmark preparation results:
Suite status:
<idle, ready to run>
Run tests (2)
Previous results
Fork
Test case name
Result
Switch statement
Map statement
Fastest:
N/A
Slowest:
N/A
Latest run results:
No previous run results
This benchmark does not have any results yet. Be the first one
to run it!
Comments
Confirm delete:
Do you really want to delete benchmark?