Skip to content

Commit dd7e4cb

Browse files
committed
Merge pull request marcj#78 from txstate-etc/initperformancefix
Increase performance of initial page load (especially IE10 and below)
2 parents 0f80dc0 + 50cdad5 commit dd7e4cb

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/ElementQueries.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,15 @@
159159
* @param {String} property width|height
160160
* @param {String} value
161161
*/
162+
var allQueries = {};
162163
function queueQuery(selector, mode, property, value) {
164+
if (typeof(allQueries[mode]) == 'undefined') allQueries[mode] = {};
165+
if (typeof(allQueries[mode][property]) == 'undefined') allQueries[mode][property] = {};
166+
if (typeof(allQueries[mode][property][value]) == 'undefined') allQueries[mode][property][value] = selector;
167+
else allQueries[mode][property][value] += ','+selector;
168+
}
169+
170+
function executeQueries() {
163171
var query;
164172
if (document.querySelectorAll) query = document.querySelectorAll.bind(document);
165173
if (!query && 'undefined' !== typeof $$) query = $$;
@@ -169,14 +177,21 @@
169177
throw 'No document.querySelectorAll, jQuery or Mootools\'s $$ found.';
170178
}
171179

172-
var elements = query(selector);
173-
for (var i = 0, j = elements.length; i < j; i++) {
174-
setupElement(elements[i], {
175-
mode: mode,
176-
property: property,
177-
value: value
178-
});
180+
for (var mode in allQueries) if (allQueries.hasOwnProperty(mode)) {
181+
for (var property in allQueries[mode]) if (allQueries[mode].hasOwnProperty(property)) {
182+
for (var value in allQueries[mode][property]) if (allQueries[mode][property].hasOwnProperty(value)) {
183+
var elements = query(allQueries[mode][property][value]);
184+
for (var i = 0, j = elements.length; i < j; i++) {
185+
setupElement(elements[i], {
186+
mode: mode,
187+
property: property,
188+
value: value
189+
});
190+
}
191+
}
192+
}
179193
}
194+
180195
}
181196

182197
var regex = /,?[\s\t]*([^,\n]*?)((?:\[[\s\t]*?(?:min|max)-(?:width|height)[\s\t]*?[~$\^]?=[\s\t]*?"[^"]*?"[\s\t]*?])+)([^,\n\s\{]*)/mgi;
@@ -244,6 +259,7 @@
244259
}
245260
}
246261
}
262+
executeQueries();
247263
};
248264

249265
/**
@@ -322,7 +338,7 @@
322338
document.addEventListener('DOMContentLoaded', callback, false);
323339
}
324340
/* Safari, iCab, Konqueror */
325-
if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) {
341+
else if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) {
326342
var DOMLoadTimer = setInterval(function () {
327343
if (/loaded|complete/i.test(document.readyState)) {
328344
callback();
@@ -331,7 +347,7 @@
331347
}, 10);
332348
}
333349
/* Other web browsers */
334-
window.onload = callback;
350+
else window.onload = callback;
335351
};
336352

337353
if (window.addEventListener) {

0 commit comments

Comments
 (0)