зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1456565 - Fetch fallback locale eagerly in Fluent. r=stas
MozReview-Commit-ID: A9wBGxzdD2m --HG-- extra : rebase_source : 5b8cd54faff389e9a94412b3ec928f1c36bdd4a2
This commit is contained in:
Родитель
677f146915
Коммит
09e02253d3
|
@ -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;
|
||||
if (seen.length === 0 || seen[seen.length - 1].done === false) {
|
||||
seen.push(iterator.next());
|
||||
let idx = 0;
|
||||
while (idx++ < count) {
|
||||
if (seen.length === 0 || seen[seen.length - 1].done === false) {
|
||||
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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче