{"ScriptPreparationCode":"var fields = [];\r\n\r\nfor (var i = 0; i \u003C 1000; i\u002B\u002B) {\r\n fields[i] = \u0027vwdId-\u0027 \u002B i \u002B \u0027.vwdField\u0027;\r\n}\r\n\r\n// create duplications\r\nfields = fields.concat(fields, fields);","TestCases":[{"Name":"originBenchmark","Code":"var _streamerInstance = {\r\n _subscribe: function () {},\r\n _unsubscribe: function () {},\r\n _getCachedValue: function () {},\r\n _update: function () {}\r\n };\r\n\r\n var _subscribedFields = {};\r\n var subscribe = function (fields) {\r\n if (!fields) {\r\n return\r\n } else if (typeof fields === \u0022string\u0022) {\r\n fields = [fields]\r\n }\r\n var duplicateSubscriptions = [];\r\n for (var fieldIndex = 0; fieldIndex \u003C fields.length; fieldIndex\u002B\u002B) {\r\n var fieldName = fields[fieldIndex];\r\n if (_subscribedFields[fieldName]) {\r\n duplicateSubscriptions.push(fieldIndex)\r\n } else {\r\n _subscribedFields[fieldName] = true\r\n }\r\n var cachedValue = _streamerInstance._getCachedValue(fieldName);\r\n if (cachedValue != null) {\r\n _streamerInstance._update(cachedValue.dataName, cachedValue.value, cachedValue.dataType, this)\r\n }\r\n }\r\n if (duplicateSubscriptions.length \u003E 0) {\r\n fields = fields.slice(0);\r\n for (var i = duplicateSubscriptions.length - 1; i \u003E= 0; i--) {\r\n fields.splice(duplicateSubscriptions[i], 1)\r\n }\r\n }\r\n _streamerInstance._subscribe(fields);\r\n }\r\n\r\n var unsubscribe = function (fields) {\r\n if (!fields) {\r\n return\r\n } else if (typeof fields === \u0022string\u0022) {\r\n fields = [fields]\r\n }\r\n var invalidFields = [];\r\n for (var fieldIndex = 0; fieldIndex \u003C fields.length; fieldIndex\u002B\u002B) {\r\n var fieldName = fields[fieldIndex];\r\n if (_subscribedFields[fieldName]) {\r\n delete _subscribedFields[fieldName]\r\n } else {\r\n invalidFields.push(fieldIndex)\r\n }\r\n }\r\n if (invalidFields.length \u003E 0) {\r\n fields = fields.slice(0);\r\n for (var i = invalidFields.length - 1; i \u003E= 0; i--) {\r\n fields.splice(invalidFields[i], 1)\r\n }\r\n }\r\n _streamerInstance._unsubscribe(fields);\r\n };\r\n\r\n subscribe(fields);\r\n unsubscribe(fields);","IsDeferred":false},{"Name":"optimizedBenchmark","Code":"var _streamerInstance = {\r\n _subscribe: function () {},\r\n _unsubscribe: function () {},\r\n _getCachedValue: function () {},\r\n _update: function () {}\r\n };\r\n\r\n var _subscribedFields = {};\r\n var subscribe = function (fields) {\r\n if (!fields) {\r\n return\r\n } else if (typeof fields === \u0022string\u0022) {\r\n fields = [fields]\r\n }\r\n var fieldsToSubscribe = [];\r\n var fieldsToSubscribeCount = 0;\r\n var length = fields.length;\r\n\r\n for (var fieldIndex = 0; fieldIndex \u003C length; fieldIndex\u002B\u002B) {\r\n var fieldName = fields[fieldIndex];\r\n if (!_subscribedFields[fieldName]) {\r\n fieldsToSubscribe[fieldsToSubscribeCount] = fieldIndex;\r\n fieldsToSubscribeCount\u002B\u002B;\r\n _subscribedFields[fieldName] = true\r\n }\r\n var cachedValue = _streamerInstance._getCachedValue(fieldName);\r\n if (cachedValue != null) {\r\n _streamerInstance._update(cachedValue.dataName, cachedValue.value, cachedValue.dataType, this)\r\n }\r\n }\r\n\r\n _streamerInstance._subscribe(fieldsToSubscribe);\r\n }\r\n\r\n var unsubscribe = function (fields) {\r\n if (!fields) {\r\n return\r\n } else if (typeof fields === \u0022string\u0022) {\r\n fields = [fields]\r\n }\r\n var fieldsToUnsubscribe = [];\r\n var fieldsToUnsubscribeCount = 0;\r\n var length = fields.length;\r\n\r\n for (var fieldIndex = 0; fieldIndex \u003C length; fieldIndex\u002B\u002B) {\r\n var fieldName = fields[fieldIndex];\r\n if (_subscribedFields[fieldName]) {\r\n fieldsToUnsubscribe[fieldsToUnsubscribeCount] = fieldName;\r\n fieldsToUnsubscribeCount\u002B\u002B;\r\n delete _subscribedFields[fieldName]\r\n }\r\n }\r\n\r\n _streamerInstance._unsubscribe(fieldsToUnsubscribe);\r\n };\r\n\r\n subscribe(fields);\r\n unsubscribe(fields);\r\n","IsDeferred":false}]}