See comment here: https://github.com/facebook/react/pull/11457#discussion_r148954193.

Although it seems very unlikely that someone would pass a one-character prop, the price (at least in versions of V8 in Chrome right now) is reported to be about 10x.

So we should check `.length` first and then do the comparison.

**Please comment if you want to take this issue.**
**If somebody already commented, please let them finish it.**
* attributeName:
 *   Used when rendering markup or with `*Attribute()`.
 * attributeNamespace
 * propertyName:
 *   Used on DOM node instances. (This includes properties that mutate due to
 *   external factors.)
 * mutationMethod:
 *   If non-null, used instead of the property or `setAttribute()` after
 *   initial render.
 * mustUseProperty:
 *   Whether the property must be accessed and mutated as an object property.
 * hasBooleanValue:
 *   Whether the property should be removed when set to a falsey value.
 * hasNumericValue:
 *   Whether the property must be numeric or parse as a numeric and should be
 *   removed when set to a falsey value.
 * hasPositiveNumericValue:
 *   Whether the property must be positive numeric or parse as a positive
 *   numeric and should be removed when set to a falsey value.
 * hasOverloadedBooleanValue:
 *   Whether the property can be used as a flag as well as with a value.
 *   Removed when strictly equal to false; present without a value when
 *   strictly equal to true; present with a value otherwise.
 */
export const properties = {};
/**
 * Checks whether a property name is a writeable attribute.
 * @method
 */
export function shouldSetAttribute(name, value) {