aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2011-01-09 00:57:24 -0800
committerIgor Minar2011-01-10 10:24:12 -0800
commitc79aba92f6b058742c9ae20a9382f6abc68afcea (patch)
tree4aece29942b7cde621c2a31284e3723314f30d74
parent84dedb81e79a56b4c81fe413a41e7247d8fa0572 (diff)
downloadangular.js-c79aba92f6b058742c9ae20a9382f6abc68afcea.tar.bz2
bootstrap angular on "document ready" instead of window.onload
- use jqLite api to bootstrap angular - when jQuery is present DOMContentLoaded or hacks for IE are used - when jqLite is present DOMContentLoaded is used for modern browsers and IE9 and window.onload is used for other browsers. - test html for comparing DOMContentLoaded with window.onload Closes #224
-rw-r--r--perf/DCLvsWindowOnLoad.html37
-rw-r--r--src/angular.prefix2
-rw-r--r--src/angular.suffix9
-rw-r--r--src/jqLite.js13
-rw-r--r--src/scenario/angular.prefix2
-rw-r--r--src/scenario/angular.suffix9
6 files changed, 58 insertions, 14 deletions
diff --git a/perf/DCLvsWindowOnLoad.html b/perf/DCLvsWindowOnLoad.html
new file mode 100644
index 00000000..b44b9114
--- /dev/null
+++ b/perf/DCLvsWindowOnLoad.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<!--
+
+This test demonstrates the time difference between document's DOMContentLoaded and window's load events.
+
+-->
+<html>
+ <head>
+ <script>
+ startTS = new Date().getTime();
+ onDOMContentLoadedTS = 0; // default for browsers where DOMCL is not supported
+ </script>
+ <title>DOMContentLoaded test</title>
+ <script src="../build/angular.min.js" ng:autobind></script>
+ <script>
+ angular.element(document).bind('DOMContentLoaded', function(e) {onDOMContentLoadedTS = new Date().getTime()});
+ angular.element(window).bind('load', function(e) {
+ onloadTS = new Date().getTime();
+ log.innerHTML = 'start: ' + new Date(startTS) + '<br/>DOMContentLoaded: +' + (onDOMContentLoadedTS - startTS) + 'ms<br/> load: +' + (onloadTS - startTS) + 'ms';
+ });
+ </script>
+ </head>
+ <body>
+ <h1>DOMContentLoaded test</h1>
+ <p>{{ 'yay!' || 'angular starting...' }}</p>
+
+ <img width="100px" src="http://lh5.ggpht.com/_BLyMhylclm0/TST_bbGH0zI/AAAAAAAAATY/oNUn9kivKN8/s912/1020047.jpg" />
+ <img width="100px" src="http://lh5.ggpht.com/_MqEybfAuUFk/TSOOiegUlPI/AAAAAAAADHY/AEwEWc64_-M/s800/IMG_7294.JPG" />
+ <img width="100px" src="http://lh3.ggpht.com/_LdjD3ua8rpE/TSOW99rwjZI/AAAAAAAAFC0/0qJRhhN45RM/s912/Saison%2010%20%2834%29.JPG" />
+ <img width="100px" src="http://lh6.ggpht.com/_oy_-am3CVUw/TSOQBddZpwI/AAAAAAAACaw/ogFgoD79bVE/s912/P1100886.JPG" />
+ <img width="100px" src="http://lh4.ggpht.com/_srSaA7ZN7oc/TDdxXbA_i1I/AAAAAAAAQ2w/ii3vgrnfCrM/s800/Urlaub10%20157.jpg" />
+ <img width="100px" src="http://lh5.ggpht.com/_y6vXu6iRrfM/SIaYhRQBYNI/AAAAAAAAAmE/lV2NYwxtsQM/s912/North%20Dakota%20Trip%20014.JPG" />
+ <img width="100px" src="http://lh5.ggpht.com/_Jjv9cIn9cS8/RuwZCgfOl6I/AAAAAAAAAOc/QrrMe8vpawg/s800/Shark%20Trip%20-%20day%202%20513.JPG" />
+
+ <p id="log"></p>
+ </body>
+</html> \ No newline at end of file
diff --git a/src/angular.prefix b/src/angular.prefix
index a1b4e151..be874795 100644
--- a/src/angular.prefix
+++ b/src/angular.prefix
@@ -21,4 +21,4 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-(function(window, document, previousOnLoad){
+(function(window, document){
diff --git a/src/angular.suffix b/src/angular.suffix
index 7e86c5d5..3da27dc0 100644
--- a/src/angular.suffix
+++ b/src/angular.suffix
@@ -1,9 +1,6 @@
- window.onload = function(){
- try {
- if (previousOnLoad) previousOnLoad();
- } catch(e) {}
+ jqLite(document).ready(function(){
angularInit(angularJsConfig(document));
- };
+ });
-})(window, document, window.onload);
+})(window, document);
diff --git a/src/jqLite.js b/src/jqLite.js
index cbba69ad..cbb2c7b8 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -87,6 +87,19 @@ JQLite.prototype = {
})(this[0]);
},
+ ready: function(fn) {
+ var fired = false;
+
+ function trigger() {
+ if (fired) return;
+ fired = true;
+ fn();
+ }
+
+ this.bind('DOMContentLoaded', trigger); // works for modern browsers and IE9
+ jqLite(window).bind('load', trigger); // fallback to window.onload for others
+ },
+
bind: function(type, fn){
var self = this,
element = self[0],
diff --git a/src/scenario/angular.prefix b/src/scenario/angular.prefix
index fb9ae147..03ab29cb 100644
--- a/src/scenario/angular.prefix
+++ b/src/scenario/angular.prefix
@@ -21,5 +21,5 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-(function(window, document, previousOnLoad){
+(function(window, document){
var _jQuery = window.jQuery.noConflict(true);
diff --git a/src/scenario/angular.suffix b/src/scenario/angular.suffix
index 66843013..f3ef9f0d 100644
--- a/src/scenario/angular.suffix
+++ b/src/scenario/angular.suffix
@@ -1,10 +1,7 @@
var $scenario = new angular.scenario.Runner(window);
- window.onload = function() {
- try {
- if (previousOnLoad) previousOnLoad();
- } catch(e) {}
+ jqLite(document).ready(function() {
angularScenarioInit($scenario, angularJsConfig(document));
- };
+ });
-})(window, document, window.onload);
+})(window, document);