Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: hide component to vm mapping from user #860

Merged
merged 7 commits into from
Dec 4, 2018
Merged

fix: hide component to vm mapping from user #860

merged 7 commits into from
Dec 4, 2018

Conversation

ravijayaramappa
Copy link
Contributor

@ravijayaramappa ravijayaramappa commented Nov 26, 2018

Storing the relationship directly on the component exposes it to end user
@W-5628184

Details

Hide component to vm mapping from user. Accessing the VM allows user to internal state of the component and other vulnerabilities. W-5628184

Does this PR introduce a breaking change?

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:
Please check if your PR fulfills the following requirements:

@ravijayaramappa ravijayaramappa changed the title fix: hide component to vm mapping from user fix: [DO NOT MERGE]hide component to vm mapping from user Nov 26, 2018
@salesforce-best-lwc-internal

This comment has been minimized.

Copy link
Contributor

@caridy caridy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will like this to be a more generic mechanism. It seems that today, we use setInternalField and getInternalField methods. I will like to add a generic setHiddenInternalField and getHiddenInternalField, that should be analog to those other ones but using a WeakMap instead of own property, so we can use them across the board when needed.

@caridy
Copy link
Contributor

caridy commented Nov 26, 2018

Additionally, in IE11 we can continue using the non-hidden mechanism since we don't really care about locker, and we do care a lot about perf, WeakMaps in IE are slower.

Also, all those assertions can be asserted on the originator of the call instead of the method itself.

@ravijayaramappa
Copy link
Contributor Author

ravijayaramappa commented Nov 26, 2018

@caridy Having a common WeakMap to store all mappings we want to hide from the user will make the map size very big. The performance of WeakMap degrades as the size grows (See related issue https://bugs.chromium.org/p/v8/issues/detail?id=4086)
Because of that reason, we need to use a WeakMap per relationship type. That does not seem like something that should be in fields.ts

@davidturissini
Copy link
Contributor

@caridy I don't agree with setInternalField and setHiddenInternalField. When is an internal field not a hidden field? Having two functions seems redundant and confusing

@davidturissini
Copy link
Contributor

@ravijayaramappa I'm not worried about weak map size. In fact, in IE11, if we have too many weak maps we will have memory leak problems because of the polyfill.

@diervo
Copy link
Contributor

diervo commented Nov 26, 2018

I'm still unclear why we just dont patch getOwnPropertySymbols and call it a day

@@ -0,0 +1,23 @@
import {setInternalField, getInternalField } from './fields';

const isCompatMode = 'getKey' in Proxy;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@caridy If there is a better way to detect compat mode, let me know
(locker is off in compat mode)

@davidturissini
Copy link
Contributor

I'm wondering the same question as @diervo . Why can't we patch Object.getOwnPropertySymbols and omit the internal symbols?

@salesforce-best-lwc-internal

This comment has been minimized.

@ravijayaramappa
Copy link
Contributor Author

ravijayaramappa commented Nov 27, 2018

@diervo @davidturissini As long as the property is on the component, it is a liability. Patching Object.getOwnPropertySymbols offers the protection only after the patching has been done. For use-cases like LightningOut, the lightning framework initialization is never guaranteed to run first. So user code can still have access to the un-patched methods and escape the safety hatch.

@salesforce-best-lwc-internal
Copy link

Benchmark results

Base commit: e10b527 | Target commit: ebd2e6c

lwc-engine-benchmark

table-append-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table/append/1k duration 148.80 (±5.00 ms) 147.40 (±3.70 ms) -1.4ms (0.9%) 👌
table-clear-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table/clear/1k duration 6.00 (±0.40 ms) 6.00 (±0.30 ms) 0.0ms (0.0%) 👌
table-create-10k metric base(e10b527) target(ebd2e6c) trend
benchmark-table/create/10k duration 867.85 (±6.55 ms) 879.20 (±5.70 ms) +11.4ms (1.3%) 👎
table-create-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table/create/1k duration 116.95 (±2.55 ms) 117.30 (±2.35 ms) +0.3ms (0.3%) 👌
table-update-10th-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table/update-10th/1k duration 87.90 (±2.10 ms) 86.60 (±2.65 ms) -1.3ms (1.5%) 👍
tablecmp-append-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-component/append/1k duration 253.80 (±6.90 ms) 255.20 (±6.10 ms) +1.4ms (0.6%) 👌
tablecmp-clear-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-component/clear/1k duration 11.75 (±1.85 ms) 11.80 (±1.50 ms) +0.1ms (0.4%) 👌
tablecmp-create-10k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-component/create/10k duration 1707.15 (±8.70 ms) 1714.35 (±12.75 ms) +7.2ms (0.4%) 👌
tablecmp-create-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-component/create/1k duration 207.90 (±5.40 ms) 213.40 (±5.95 ms) +5.5ms (2.6%) 👎
tablecmp-update-10th-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-component/update-10th/1k duration 72.80 (±6.35 ms) 70.30 (±5.10 ms) -2.5ms (3.4%) 👌
wc-append-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-wc/append/1k duration 253.75 (±7.10 ms) 259.20 (±8.70 ms) +5.5ms (2.1%) 👎
wc-clear-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-wc/clear/1k duration 22.80 (±2.15 ms) 21.70 (±2.50 ms) -1.1ms (4.8%) 👌
wc-create-10k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-wc/create/10k duration 1851.25 (±48.35 ms) 1810.05 (±35.25 ms) -41.2ms (2.2%) 👍
wc-create-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-wc/create/1k duration 225.90 (±5.50 ms) 228.35 (±4.65 ms) +2.4ms (1.1%) 👌
wc-update-10th-1k metric base(e10b527) target(ebd2e6c) trend
benchmark-table-wc/update-10th/1k duration 72.80 (±5.65 ms) 72.10 (±4.55 ms) -0.7ms (1.0%) 👌

@diervo
Copy link
Contributor

diervo commented Nov 27, 2018

@ravijayaramappa That makes no sense. We don't care what code execute when as long as we can guarantee our code is executed before creating the component which we can.

Otherwise we will be in big trouble, not for this but for everything else.

@@ -0,0 +1,22 @@
import {setInternalField, getInternalField, hasNativeSymbolsSupport } from './fields';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these are just fields, keep them in shared/fields.ts

? (o: object, fieldName: symbol, value: any): void => {
let associationMap = associations[fieldName];
if (!associationMap) {
associationMap = new WeakMap();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not possible, we can't create weakmaps at will, all weakmaps in engine MUST BE globally defined at the module level.

My assumption here is that what you will do is to add the object as the key, and a hashtable for the value, and you can add new fieldNames into that value hashtable object to map.

Copy link
Contributor

@caridy caridy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just adjustments on the weakmap

@caridy
Copy link
Contributor

caridy commented Nov 27, 2018

@diervo @davidturissini getOwnPropertySymbols is not the only way to access those symbols, for of and other mechanism will give you access to it. I prefer this solution at this point.

@salesforce-best-lwc-internal
Copy link

Benchmark results

Base commit: 6a20ae0 | Target commit: b007383

lwc-engine-benchmark

table-append-1k metric base(6a20ae0) target(b007383) trend
benchmark-table/append/1k duration 150.35 (±4.20 ms) 152.60 (±4.10 ms) +2.2ms (1.5%) 👌
table-clear-1k metric base(6a20ae0) target(b007383) trend
benchmark-table/clear/1k duration 6.20 (±0.50 ms) 6.05 (±0.50 ms) -0.2ms (2.4%) 👌
table-create-10k metric base(6a20ae0) target(b007383) trend
benchmark-table/create/10k duration 875.00 (±6.00 ms) 879.65 (±7.50 ms) +4.7ms (0.5%) 👎
table-create-1k metric base(6a20ae0) target(b007383) trend
benchmark-table/create/1k duration 116.00 (±3.35 ms) 120.60 (±3.25 ms) +4.6ms (4.0%) 👎
table-update-10th-1k metric base(6a20ae0) target(b007383) trend
benchmark-table/update-10th/1k duration 76.45 (±2.20 ms) 79.80 (±2.60 ms) +3.3ms (4.4%) 👎
tablecmp-append-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-component/append/1k duration 247.95 (±10.65 ms) 254.45 (±5.75 ms) +6.5ms (2.6%) 👎
tablecmp-clear-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-component/clear/1k duration 11.75 (±1.95 ms) 11.70 (±1.55 ms) -0.1ms (0.4%) 👌
tablecmp-create-10k metric base(6a20ae0) target(b007383) trend
benchmark-table-component/create/10k duration 1725.55 (±11.75 ms) 1745.55 (±14.95 ms) +20.0ms (1.2%) 👎
tablecmp-create-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-component/create/1k duration 204.80 (±6.00 ms) 210.35 (±7.15 ms) +5.6ms (2.7%) 👎
tablecmp-update-10th-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-component/update-10th/1k duration 72.60 (±4.75 ms) 70.85 (±4.15 ms) -1.8ms (2.4%) 👌
wc-append-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-wc/append/1k duration 253.35 (±7.40 ms) 259.70 (±9.95 ms) +6.3ms (2.5%) 👌
wc-clear-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-wc/clear/1k duration 21.35 (±1.95 ms) 21.70 (±2.35 ms) +0.4ms (1.6%) 👌
wc-create-10k metric base(6a20ae0) target(b007383) trend
benchmark-table-wc/create/10k duration 1831.60 (±60.35 ms) 1961.60 (±10.60 ms) +130.0ms (7.1%) 👎
wc-create-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-wc/create/1k duration 223.25 (±4.60 ms) 226.55 (±5.30 ms) +3.3ms (1.5%) 👎
wc-update-10th-1k metric base(6a20ae0) target(b007383) trend
benchmark-table-wc/update-10th/1k duration 72.60 (±6.05 ms) 75.70 (±6.75 ms) +3.1ms (4.3%) 👌

Copy link
Member

@pmdartus pmdartus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some small stylistic changes. FYI, the performance of the engine is down 2-4 % with this changes.

@@ -1,6 +1,7 @@
import { compileTemplate } from 'test-utils';

import { createElement, LightningElement } from '../main';
import { ViewModelReflection } from "../utils";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should not import engine internals in tests.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, I was thinking how to do this particular test in a way that we don't have to import this, but it is tricky beecasue it is computing the internal index.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test has been updated to fetch all symbols and verify that none them give access to the vm. Its a bit slower but asserts the same behavior.
We could also assert that there are not symbols on the instance.
expect(getOwnPropertySymbols(instance)).toEqual([]); Would you prefer a stricter assertion like that or sufficient to verify that none of the symbols give access to vm?

* hiddenAssociations : (Component-A, { Symbol(ViewModel) : VM-1 })
*
*/
const hiddenAssociations: WeakMap<object, object> = new WeakMap();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const hiddenAssociations: WeakMap<object, object> = new WeakMap();
const hiddenAssociations: WeakMap<any, any> = new WeakMap();

Copy link
Contributor

@caridy caridy Nov 27, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will recommend to to make this:

WeakMap<any, Record<symbol, any>>

export const setHiddenAssociation = hasNativeSymbolsSupport
? (o: object, fieldName: symbol, value: any): void => {
let associationByField = hiddenAssociations.get(o);
if (!associationByField) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use isUndefined helper method to avoid type cohersion.

*/
const hiddenAssociations: WeakMap<object, object> = new WeakMap();
export const setHiddenAssociation = hasNativeSymbolsSupport
? (o: object, fieldName: symbol, value: any): void => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
? (o: object, fieldName: symbol, value: any): void => {
? (o: any, fieldName: symbol, value: any): void => {

Copy link
Contributor Author

@ravijayaramappa ravijayaramappa Nov 27, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pmdartus o here is the WeakMap key. Its value is always going to be an object. And the method is not looking up any property on o. What would be the reason to type this parameter as any?

associationByField = create(null);
hiddenAssociations.set(o, associationByField!);
}
associationByField![fieldName] = value;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this point you should not need the ! notation.

export const getHiddenAssociation = hasNativeSymbolsSupport
? (o: object, fieldName: symbol): any => {
const associationByField = hiddenAssociations.get(o);
return associationByField && associationByField[fieldName];
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use isUndefined helper function.

assert.isTrue(vm && "cmpRoot" in vm, `${vm} is not a vm.`);
}
return getInternalField(component, ViewModelReflection) as VM;
return vm as VM;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the reason why this is duplicated is because in production we have a single liner function that browsers will inline. Making this a two lines to favor the debug portion is not needed, let's keep the one liner.

let associationByField = hiddenAssociations.get(o);
if (!associationByField) {
associationByField = create(null);
hiddenAssociations.set(o, associationByField!);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

! is not needed here, just make sure you use isUndefined() conditions as @pmdartus suggested.

*
*/
const hiddenAssociations: WeakMap<object, object> = new WeakMap();
export const setHiddenAssociation = hasNativeSymbolsSupport
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think Association is the wrong word here, just setHiddenField should be fine.

@salesforce-best-lwc-internal
Copy link

Benchmark results

Base commit: 6a20ae0 | Target commit: e3e1e3e

lwc-engine-benchmark

table-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/append/1k duration 150.35 (±4.20 ms) 152.25 (±5.35 ms) +1.9ms (1.3%) 👌
table-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/clear/1k duration 6.20 (±0.50 ms) 5.95 (±0.35 ms) -0.3ms (4.0%) 👌
table-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/create/10k duration 875.00 (±6.00 ms) 902.90 (±6.30 ms) +27.9ms (3.2%) 👎
table-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/create/1k duration 116.00 (±3.35 ms) 117.15 (±2.60 ms) +1.2ms (1.0%) 👌
table-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/update-10th/1k duration 76.45 (±2.20 ms) 76.10 (±2.35 ms) -0.4ms (0.5%) 👌
tablecmp-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/append/1k duration 247.95 (±10.65 ms) 250.30 (±9.65 ms) +2.4ms (0.9%) 👌
tablecmp-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/clear/1k duration 11.75 (±1.95 ms) 12.30 (±1.65 ms) +0.6ms (4.7%) 👌
tablecmp-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/create/10k duration 1725.55 (±11.75 ms) 1763.75 (±16.30 ms) +38.2ms (2.2%) 👎
tablecmp-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/create/1k duration 204.80 (±6.00 ms) 209.35 (±6.00 ms) +4.6ms (2.2%) 👎
tablecmp-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/update-10th/1k duration 72.60 (±4.75 ms) 70.55 (±4.85 ms) -2.0ms (2.8%) 👌
wc-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/append/1k duration 253.35 (±7.40 ms) 258.20 (±8.30 ms) +4.9ms (1.9%) 👎
wc-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/clear/1k duration 21.35 (±1.95 ms) 21.55 (±2.50 ms) +0.2ms (0.9%) 👌
wc-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/create/10k duration 1831.60 (±60.35 ms) 1967.60 (±13.50 ms) +136.0ms (7.4%) 👎
wc-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/create/1k duration 223.25 (±4.60 ms) 226.25 (±4.50 ms) +3.0ms (1.3%) 👌
wc-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/update-10th/1k duration 72.60 (±6.05 ms) 71.65 (±3.45 ms) -0.9ms (1.3%) 👌


/**
* Store fields that should be hidden from outside world
* hiddenFieldsPerObject is a WeakMap.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wrong name in the comment

Copy link
Contributor

@caridy caridy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with this.

@salesforce-best-lwc-internal
Copy link

Benchmark results

Base commit: 6a20ae0 | Target commit: e3e1e3e

lwc-engine-benchmark

table-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/append/1k duration 150.35 (±4.20 ms) 147.15 (±3.85 ms) -3.2ms (2.1%) 👌
table-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/clear/1k duration 6.20 (±0.50 ms) 6.00 (±0.30 ms) -0.2ms (3.2%) 👍
table-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/create/10k duration 875.00 (±6.00 ms) 888.60 (±8.55 ms) +13.6ms (1.6%) 👎
table-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/create/1k duration 116.00 (±3.35 ms) 117.10 (±3.35 ms) +1.1ms (0.9%) 👌
table-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table/update-10th/1k duration 76.45 (±2.20 ms) 75.90 (±1.60 ms) -0.5ms (0.7%) 👌
tablecmp-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/append/1k duration 247.95 (±10.65 ms) 253.60 (±5.90 ms) +5.7ms (2.3%) 👎
tablecmp-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/clear/1k duration 11.75 (±1.95 ms) 12.10 (±1.30 ms) +0.3ms (3.0%) 👌
tablecmp-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/create/10k duration 1725.55 (±11.75 ms) 1731.35 (±12.80 ms) +5.8ms (0.3%) 👌
tablecmp-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/create/1k duration 204.80 (±6.00 ms) 214.65 (±6.05 ms) +9.8ms (4.8%) 👎
tablecmp-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-component/update-10th/1k duration 72.60 (±4.75 ms) 73.95 (±6.35 ms) +1.4ms (1.9%) 👌
wc-append-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/append/1k duration 253.35 (±7.40 ms) 259.70 (±6.75 ms) +6.3ms (2.5%) 👎
wc-clear-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/clear/1k duration 21.35 (±1.95 ms) 22.25 (±2.65 ms) +0.9ms (4.2%) 👌
wc-create-10k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/create/10k duration 1831.60 (±60.35 ms) 1970.65 (±12.95 ms) +139.1ms (7.6%) 👎
wc-create-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/create/1k duration 223.25 (±4.60 ms) 225.55 (±5.00 ms) +2.3ms (1.0%) 👌
wc-update-10th-1k metric base(6a20ae0) target(e3e1e3e) trend
benchmark-table-wc/update-10th/1k duration 72.60 (±6.05 ms) 74.15 (±4.45 ms) +1.6ms (2.1%) 👌

@salesforce-best-lwc-internal
Copy link

Benchmark results

Base commit: 6a20ae0 | Target commit: f07c1a7

lwc-engine-benchmark

table-append-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table/append/1k duration 150.35 (±4.20 ms) 149.35 (±5.45 ms) -1.0ms (0.7%) 👌
table-clear-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table/clear/1k duration 6.20 (±0.50 ms) 5.90 (±0.30 ms) -0.3ms (4.8%) 👍
table-create-10k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table/create/10k duration 875.00 (±6.00 ms) 883.40 (±5.80 ms) +8.4ms (1.0%) 👎
table-create-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table/create/1k duration 116.00 (±3.35 ms) 117.10 (±2.40 ms) +1.1ms (0.9%) 👌
table-update-10th-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table/update-10th/1k duration 76.45 (±2.20 ms) 76.85 (±2.25 ms) +0.4ms (0.5%) 👌
tablecmp-append-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-component/append/1k duration 247.95 (±10.65 ms) 252.65 (±6.75 ms) +4.7ms (1.9%) 👌
tablecmp-clear-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-component/clear/1k duration 11.75 (±1.95 ms) 11.70 (±2.15 ms) -0.1ms (0.4%) 👌
tablecmp-create-10k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-component/create/10k duration 1725.55 (±11.75 ms) 1777.45 (±17.35 ms) +51.9ms (3.0%) 👎
tablecmp-create-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-component/create/1k duration 204.80 (±6.00 ms) 210.70 (±5.65 ms) +5.9ms (2.9%) 👎
tablecmp-update-10th-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-component/update-10th/1k duration 72.60 (±4.75 ms) 68.75 (±4.55 ms) -3.8ms (5.3%) 👌
wc-append-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-wc/append/1k duration 253.35 (±7.40 ms) 259.90 (±5.25 ms) +6.5ms (2.6%) 👎
wc-clear-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-wc/clear/1k duration 21.35 (±1.95 ms) 23.20 (±2.40 ms) +1.9ms (8.7%) 👎
wc-create-10k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-wc/create/10k duration 1831.60 (±60.35 ms) 1968.75 (±13.55 ms) +137.2ms (7.5%) 👎
wc-create-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-wc/create/1k duration 223.25 (±4.60 ms) 225.20 (±5.10 ms) +1.9ms (0.9%) 👎
wc-update-10th-1k metric base(6a20ae0) target(f07c1a7) trend
benchmark-table-wc/update-10th/1k duration 72.60 (±6.05 ms) 73.50 (±5.85 ms) +0.9ms (1.2%) 👌

@ravijayaramappa ravijayaramappa changed the title fix: [DO NOT MERGE]hide component to vm mapping from user fix: hide component to vm mapping from user Nov 30, 2018
@caridy
Copy link
Contributor

caridy commented Dec 4, 2018

We have decided to merge this, and measure the impact in real world apps, in case it regresses. The initial assessment is that it will not have a significant impact.

@caridy caridy merged commit 5010713 into salesforce:master Dec 4, 2018
@ravijayaramappa ravijayaramappa deleted the ravi/master/hideComponent2VMMapping/W-5628184 branch December 4, 2018 20:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants