Bug 1456565 - Fetch fallback locale eagerly in Fluent. r=stas

MozReview-Commit-ID: A9wBGxzdD2m

--HG--
extra : rebase_source : 5b8cd54faff389e9a94412b3ec928f1c36bdd4a2
This commit is contained in:
Zibi Braniecki 2018-04-24 10:31:59 -07:00
Родитель 677f146915
Коммит 09e02253d3
2 изменённых файлов: 16 добавлений и 11 удалений

Просмотреть файл

@ -27,17 +27,17 @@ const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm", {
const { AppConstants } = ChromeUtils.import("resource://gre/modules/AppConstants.jsm", {});
/*
* CachedIterable caches the elements yielded by an iterable.
* CachedAsyncIterable caches the elements yielded by an iterable.
*
* It can be used to iterate over an iterable many times without depleting the
* iterable.
*/
class CachedIterable {
class CachedAsyncIterable {
/**
* Create an `CachedIterable` instance.
* Create an `CachedAsyncIterable` instance.
*
* @param {Iterable} iterable
* @returns {CachedIterable}
* @returns {CachedAsyncIterable}
*/
constructor(iterable) {
if (Symbol.asyncIterator in Object(iterable)) {
@ -82,11 +82,16 @@ class CachedIterable {
/**
* This method allows user to consume the next element from the iterator
* into the cache.
*
* @param {number} count - number of elements to consume
*/
touchNext() {
async touchNext(count = 1) {
const { seen, iterator } = this;
let idx = 0;
while (idx++ < count) {
if (seen.length === 0 || seen[seen.length - 1].done === false) {
seen.push(iterator.next());
seen.push(await iterator.next());
}
}
}
}
@ -122,7 +127,7 @@ class Localization {
constructor(resourceIds, generateMessages = defaultGenerateMessages) {
this.resourceIds = resourceIds;
this.generateMessages = generateMessages;
this.ctxs = new CachedIterable(this.generateMessages(this.resourceIds));
this.ctxs = new CachedAsyncIterable(this.generateMessages(this.resourceIds));
}
/**
@ -268,7 +273,7 @@ class Localization {
* that language negotiation or available resources changed.
*/
onLanguageChange() {
this.ctxs = new CachedIterable(this.generateMessages(this.resourceIds));
this.ctxs = new CachedAsyncIterable(this.generateMessages(this.resourceIds));
}
}

Просмотреть файл

@ -46,8 +46,8 @@
document.l10n = new DOMLocalization(window, resourceIds);
// trigger first context to be fetched eagerly
document.l10n.ctxs.touchNext();
// Trigger the first two contexts to be loaded eagerly.
document.l10n.ctxs.touchNext(2);
document.l10n.ready = documentReady().then(() => {
document.l10n.registerObservers();