Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(154)

Unified Diff: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 22488002: Tightening up dart2js load timing. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
index 21e7b5ca20fb720a8661c077e3daa58b0f9b5429..27c1add04b4797c83ae61f9e8c6366d52f70bfd2 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart
@@ -857,11 +857,7 @@ class CodeEmitterTask extends CompilerTask {
return js.fun('oldIsolate', [
js('var isolateProperties = oldIsolate.${namer.isolatePropertiesName}'),
- js(r'isolateProperties.$currentScript ='
- 'typeof document == "object" ?'
- '(document.currentScript ||'
- 'document.scripts[document.scripts.length - 1]) :'
- 'null'),
+ js(r'isolateProperties.$currentScript = null'),
js('var isolatePrototype = oldIsolate.prototype'),
js('var str = "{\\n"'),
@@ -2962,24 +2958,47 @@ class CodeEmitterTask extends CompilerTask {
buffer.write(N);
}
addComment('BEGIN invoke [main].', buffer);
+ // This code finds the currently executing script by listening to the
+ // onload event of all script tags and getting the first script which
+ // finishes. Since onload is called immediately after execution this should
+ // not substantially change execution order.
buffer.write("""
-if (typeof document !== "undefined" && document.readyState !== "complete") {
- document.addEventListener("readystatechange", function () {
- if (document.readyState == "complete") {
- if (typeof dartMainRunner === "function") {
- dartMainRunner(function() { ${mainCall}; });
- } else {
- ${mainCall};
- }
+;(function (callback) {
+ if (typeof document === 'undefined') {
+ callback(null);
+ return;
+ }
+ if (document.currentScript) {
+ callback(document.currentScript);
+ return;
+ }
+
+ var scripts = document.scripts;
+ function onLoad() {
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].removeEventListener('load', onLoad, false);
}
- }, false);
-} else {
+ callback(event.target);
+ }
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].addEventListener('load', onLoad, false);
+ }
+})(function(currentScript) {
+ ${namer.isolateName}.${namer.isolatePropertiesName}.\$currentScript =
+ currentScript;
+
+ if (typeof console !== 'undefined' && typeof document !== 'undefined' &&
+ document.readyState == "loading") {
+ console.warn("Dart script executed synchronously, use <script src='" +
+ currentScript.src + "' defer></scr" + "ipt> to execute after parsing " +
+ "has completed. See also http://dartbug.com/12281.");
+ }
if (typeof dartMainRunner === "function") {
dartMainRunner(function() { ${mainCall}; });
} else {
${mainCall};
}
-}
+});
""");
addComment('END invoke [main].', buffer);
}

Powered by Google App Engine
This is Rietveld 408576698