7. Limitation YAHOO property can be overwritten… YAHOO.widget.HelloWorld = something; // by one developer … YAHOO.widget.HelloWorld = another; // by another developer
12. In YUI 2 To get <li> element with “promotion” class under element with id “menu” var Dom = YAHOO.util.Dom; var el = Dom.get(‘menu’); varpromotedItems = Dom.getElementsByClassName(‘promotion’, ‘li’, el);
13. Selector API in YUI 3 One-liner YUI().use(‘node’, function(Y) { varpromtedItems = Y.all(‘#menuli.promotion’); });
15. YUI 2 Selector Utility http://developer.yahoo.com/yui/selector/ But, not chainable returning raw Dom elements
16. Node & NodeList Wrapper of DOM elements From function-based to object-based In YUI 2 var el = YAHOO.util.Dom.get(‘id’); YAHOO.util.Dom.addClass(el, ‘className’); In YUI 3 Y.one(‘id’).addClass(‘className’);
17. YUI 3 Chainable YUI().use(‘node’, function(Y) { Y.all(“#menuli”) .each(function(node, i, ctx) { if ( i % 2) { node.addClass(‘even’).removeClass(‘disable’); } }) .setStyle(‘color, ‘red’); });
22. Traditional Way <script type="text/javascript" src="http://yui.yahooapis.com/combo?3.2.0/build/yui/yui-min.js&3.2.0/build/loader/loader-min.js&3.2.0/build/oop/oop-min.js&3.2.0/build/dom/dom-min.js&3.2.0/build/dom/dom-style-ie-min.js&3.2.0/build/event-custom/event-custom-base-min.js&3.2.0/build/event/event-base-min.js&3.2.0/build/pluginhost/pluginhost-min.js&3.2.0/build/node/node-min.js&3.2.0/build/event/event-delegate-min.js"></script>
28. Dynamic Script Tag function createScript(js) { var script = document.createElement(‘script’); script.type = ‘text/javascript’; script.async = “true”; var head = document.getElementsByTagname(‘head’)[0]; head.appendChild(script); }
29. Execution Order Matters Execution order is not guaranteed to be preserved for asynchronous script loading YUI 3 is born to solve execution order problem each module payload is not executed until all dependencies are ready
34. Flickr Lesson #1 Firewall can cut your long URL http://yui.yahooapis.com/combo?3.2.0/build/yui/yui-min.js&3.2.0/build/oop/oop-min.js&3.2.0/build/event-custom/event-custom-min.js&3.2.0/build/event/event-base-min.js&3.2.0/build/pluginhost/pluginhost-min.js&3.2.0/build/attribute/attribute-min.js&3.2.0/build/dom/dom-min.js&3.2.0/build/dom/dom-style-ie-min.js&3.2.0/build/node/node-min.js&3.2.0/build/event/event-delegate-min.js&3.2.0/build/base/base-min.js&3.2.0/build/anim/anim-min.js&3.2.0/build/node/align-plugin-min.js&3.2.0/build/classnamemanager/classnamemanager-min.js&3.2.0/build/intl/intl-min.js&3.2.0/build/console/lang/console.js&3.2.0/build/event/event-synthetic-min.js&3.2.0/build/event/event-focus-min.js&3.2.0/build/widget/widget-min.js&3.2.0/build/dump/dump-min.js&3.2.0/build/substitute/substitute-min.js&3.2.0/build/console/console-min.js&3.2.0/build/plugin/plugin-min.js&3.2.0/build/console/console-filters-min.js&3.2.0/build/cookie/cookie-min.js&3.2.0/build/dom/dom-style-ie-min.js&3.2.0/build/event/event-resize-min.js&3.2.0/build/event/event-mouseenter-min.js&3.2.0/build/dd/dd-min.js&3.2.0/build/dd/dd-gestures-min.js&3.2.0/build/dd/dd-drop-plugin-min.js&3.2.0/build/dd/dd-plugin-min.js&3.2.0/build/event/event-touch-min.js&3.2.0/build/event-gestures/event-move-min.js&3.2.0/build/dd/dd-gestures-min.js&3.2.0/build/dataschema/dataschema-base-min.js&3.2.0/build/dataschema/dataschema-array-min.js&3.2.0/build/cache/cache-base-min.js&3.2.0/build/querystring/querystring-stringify-simple-min.js&3.2.0/build/io/io-base-min.js&3.2.0/build/json/json-min.js&3.2.0/build/dataschema/dataschema-json-min.js&3.2.0/build/dataschema/dataschema-text-min.js&3.2.0/build/dataschema/dataschema-xml-min.js&3.2.0/build/datasource/datasource-min.js
35. Flickr Lesson #2 Sexy URL is not welcome http://… &xxw.js&xxx.js&…
36. Multiple Pages Page A module A + B + C + D + E + X Page B module A + B + C + D + E + Y Page C module A + B + C + D + Z
61. Enable Early Flush in ySymfony Don’t use layout setLayout(false) Fetch partial and flush it in Action getPartial flush Customize web response class to avoid head() after flush()
62. Don’t <html> . . . <body> <div> <div id=‘hd’></div> <?php flush(); ?> <? // some browser would not render till getting closing tag ?> <div id=‘bd’></div> <?php flush(); ?> <div id=‘ft’></div> </div> </body> </html>
66. Users are Not Patient User might start interact with the page before its JavaScript module is loaded It is not good to not respond to user interaction
68. Event-Binder: A Tale of Two JavaScripts Inline Script Prevent default behavior Show progressive UI Put event into queue External Script Flush events from queue Hide progressive UI Remove former event handler