diff --git a/apps/perf-test/src/scenarios/BaseButtonNew.tsx b/apps/perf-test/src/scenarios/BaseButtonNew.tsx
index 7741d1b6323d7..e4ba5d2a6ec57 100644
--- a/apps/perf-test/src/scenarios/BaseButtonNew.tsx
+++ b/apps/perf-test/src/scenarios/BaseButtonNew.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
import { Actionable } from '@uifabric/experiments';
-const scenario = ;
+const scenario = I am a button;
export default scenario;
diff --git a/apps/perf-test/src/scenarios/DefaultButtonNew.tsx b/apps/perf-test/src/scenarios/DefaultButtonNew.tsx
index 802efbeb4ebcd..f9b844a0328d1 100644
--- a/apps/perf-test/src/scenarios/DefaultButtonNew.tsx
+++ b/apps/perf-test/src/scenarios/DefaultButtonNew.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
import { Button } from '@uifabric/experiments';
-const scenario = ;
+const scenario = ;
export default scenario;
diff --git a/change/@uifabric-experiments-2019-07-29-17-22-55-buttonPerf.json b/change/@uifabric-experiments-2019-07-29-17-22-55-buttonPerf.json
new file mode 100644
index 0000000000000..13186b9b5684e
--- /dev/null
+++ b/change/@uifabric-experiments-2019-07-29-17-22-55-buttonPerf.json
@@ -0,0 +1,8 @@
+{
+ "type": "patch",
+ "comment": "Button: Creating separate Actionable view to improve perf of Actionable, small perf improvements and perf scenario updates.",
+ "packageName": "@uifabric/experiments",
+ "email": "Humberto.Morimoto@microsoft.com",
+ "commit": "b83bcc1af7a91f2ceb7966aea79a495b6330e166",
+ "date": "2019-07-30T00:22:55.492Z"
+}
diff --git a/packages/experiments/src/components/Button/Actionable/Actionable.ts b/packages/experiments/src/components/Button/Actionable/Actionable.ts
index c3954e04bf6f3..5716b64ea6a29 100644
--- a/packages/experiments/src/components/Button/Actionable/Actionable.ts
+++ b/packages/experiments/src/components/Button/Actionable/Actionable.ts
@@ -2,9 +2,9 @@ import { createComponent } from '../../../Foundation';
import { ActionableStyles as styles, ActionableTokens as tokens } from './Actionable.styles';
import { IActionableProps } from './Actionable.types';
import { useButtonState as state } from '../Button.state';
-import { ButtonView } from '../Button.view';
+import { ActionableView } from './Actionable.view';
-export const Actionable: React.StatelessComponent = createComponent(ButtonView, {
+export const Actionable: React.StatelessComponent = createComponent(ActionableView, {
displayName: 'Actionable',
state,
styles,
diff --git a/packages/experiments/src/components/Button/Actionable/Actionable.view.tsx b/packages/experiments/src/components/Button/Actionable/Actionable.view.tsx
new file mode 100644
index 0000000000000..c8cc6f80052d5
--- /dev/null
+++ b/packages/experiments/src/components/Button/Actionable/Actionable.view.tsx
@@ -0,0 +1,67 @@
+/** @jsx withSlots */
+import { KeytipData } from 'office-ui-fabric-react';
+import { withSlots, getSlots } from '../../../Foundation';
+import { getNativeProps, anchorProperties, buttonProperties } from '../../../Utilities';
+
+import { IActionableProps, IActionableRootElements, IActionableSlots, IActionableViewProps } from './Actionable.types';
+import { IButtonComponent } from '../Button.types';
+
+export const ActionableView: IButtonComponent['view'] = props => {
+ const { children, disabled, onClick, allowDisabledFocus, ariaLabel, keytipProps, buttonRef, ...rest } = props;
+
+ const { slotType, htmlType, propertiesType } = _deriveRootType(props);
+
+ // TODO: 'href' is anchor property... consider getNativeProps by root type
+ const buttonProps = { ...getNativeProps(rest, propertiesType) };
+
+ const Slots = getSlots(props, {
+ root: slotType
+ });
+
+ const _onClick = (ev: React.MouseEvent) => {
+ if (!disabled && onClick) {
+ onClick(ev);
+
+ if (ev.defaultPrevented) {
+ return;
+ }
+ }
+ };
+
+ const Button = (keytipAttributes?: any): JSX.Element => (
+
+ {children}
+
+ );
+
+ return keytipProps ? (
+
+ {(keytipAttributes: any): JSX.Element => Button(keytipAttributes)}
+
+ ) : (
+ Button()
+ );
+};
+
+interface IActionableRootType {
+ slotType: IActionableRootElements;
+ htmlType: 'link' | 'button';
+ propertiesType: string[];
+}
+
+function _deriveRootType(props: IActionableViewProps): IActionableRootType {
+ return !!props.href
+ ? { slotType: 'a', htmlType: 'link', propertiesType: anchorProperties }
+ : { slotType: 'button', htmlType: 'button', propertiesType: buttonProperties };
+}
diff --git a/packages/experiments/src/components/Button/Button.view.tsx b/packages/experiments/src/components/Button/Button.view.tsx
index 0bd64fb27471f..8b2f5955c6d35 100644
--- a/packages/experiments/src/components/Button/Button.view.tsx
+++ b/packages/experiments/src/components/Button/Button.view.tsx
@@ -43,8 +43,8 @@ export const ButtonView: IButtonComponent['view'] = props => {
aria-label={ariaLabel}
ref={buttonRef}
>
-
-
+ {icon && }
+ {content && }
{children}
);