src/main/java/com/machinezoo/pushmode/dom/DomElement.java
public DomElement key(String key) {
		touch();
		this.key = key;
		return this;
	}
/**
	 * Sets element's pairing key.
	 * Key, if set, must be unique among siblings in the DOM tree.
	 * Once set, the key is available from {@link #key()}.
	 * <p>
	 * While {@link #id()} is sent to the browser and it should be unique in the document,
	 * {@link #key()} is used only server-side and it only needs to be unique among sibling elements.
	 * <p>
	 * Key is used in hierarchical DOM diff to pair corresponding elements in cases where some DOM nodes have been inserted or removed from parent's child list.
	 * If {@link #key()} is {@code null}, DOM diff falls back to element's {@link #id()}.
	 * If that is {@code null} too, DOM diff uses element position to pair elements in compared DOM trees,
	 * which might result in unnecessarily big diffs if an element is inserted at the beginning of a long list.
	 * Absence of key thus doesn't impact functionality, only performance. And even then it matters only if siblings are inserted or removed.
	 * 
	 * @param key
	 *            new element key or {@code null}
	 * @return {@code this}
	 * @throws IllegalStateException
	 *             if this element is frozen
	 */
Sets element's pairing key.
Key, if set, must be unique among siblings in the DOM tree.
Once set, the key is available from  #key().

While  #id() is sent to the browser and it should be unique in the document,
#key() is used only server-side and it only needs to be unique among sibling elements.

Key is used in hierarchical DOM diff to pair corresponding elements in cases where some DOM nodes have been inserted or removed from parent's child list.
If  #key() is  null, DOM diff falls back to element's  #id().
If that is  null too, DOM diff uses element position to pair elements in compared DOM trees,
which might result in unnecessarily big diffs if an element is inserted at the beginning of a long list.
Absence of key thus doesn't impact functionality, only performance. And even then it matters only if siblings are inserted or removed.

@param key
new element key or  null
@return  this
@throws IllegalStateException
if this element is frozen
Sets element ' s pairing key . Key if set must be unique among siblings in the DOM tree . Once set the key is available from #key () . While #id () is sent to the browser and it should be unique in the document #key () is used only server - side and it only needs to be unique among sibling elements . Key is used in hierarchical DOM diff to pair corresponding elements in cases where some DOM nodes have been inserted or removed from parent ' s child list . If #key () is null DOM diff falls back to element ' s #id () . If that is null too DOM diff uses element position to pair elements in compared DOM trees which might result in unnecessarily big diffs if an element is inserted at the beginning of a long list . Absence of key thus doesn ' t impact functionality only performance . And even then it matters only if siblings are inserted or removed . @param key new element key or null @return this @throws IllegalStateException if this element is frozen
public DomElement key(String key) {
		touch();
		this.key = key;
		return this;
	}
public DomElement key ( String key ) { touch ( ) ; this . key = key ; return this ; }
Sets element's pairing key.
Sets element ' s pairing key .