2016-02-04 3 views
7

Если мое веб-приложение состоит из нескольких поддоменов, значит ли это, что у меня должно быть несколько сервисных работников, по одному для каждого поддомена? Или я могу иметь одного сервисного работника, который работает по субдоменам?Использование сервисных работников в нескольких поддоменах

+0

Было бы полезно узнать более подробную информацию о структуре вашего приложения. См. Ответ @ mkhatib для двух разных значений «веб-приложения [который] состоит из более чем одного субдомена» и как ответы различаются по смыслу. –

ответ

8

Каждый поддомен считается другим источником, поэтому да, вам нужно будет зарегистрировать сервисного работника для каждого из них. Каждый из этих рабочих будет иметь свой собственный кеш и область действия.

2

Каждый поддомен считается другим источником, и вы должны зарегистрировать сервисного работника для каждого источника, но вы можете повторно использовать тот же источник для рабочего, установив заголовок ответа Service-Worker-Allowed в список областей, которыми может управлять один и тот же источник.

1

Если вы имеете в виду несколько доменов, то пользователь может получить доступ к вашему сайту непосредственно в нескольких доменах, например www.example.com и hello.example.com, тогда я считаю, что ответ да, вам нужно несколько сервисных работников для обработки каждого из них.

Однако, если ваше основное приложение подается на один домене www.example.com, но может вызывать другие домены, как api.example.com или images.examples.com или даже fonts.gstatic.com для загрузки шрифтов Google или example.s3.amazonaws.com для загрузки статических активов, то один работник службы достаточно. Это, как вы можете поймать и кэш (или делать все, что вы хотите на запросы):

(function() { 
    var DEFAULT_PROFILE_IMAGE_URL = 'images/[email protected]'; 

    function profileImageRequest(request) { 
    // Load from cacheOnly to avoid redownloading the images since if the user 
    // updates their avatar its URL will change. 
    return toolbox.cacheOnly(request).catch(function() { 
     return toolbox.networkFirst(request).catch(function() { 
     return toolbox.cacheOnly(new Request(DEFAULT_PROFILE_IMAGE_URL)); 
     }); 
    }); 
    } 

    toolbox.precache([DEFAULT_PROFILE_IMAGE_URL]); 
    toolbox.router.get('/(.+)/users/avatars/(.*)', profileImageRequest, { 
    origin: /example\.s3\.amazonaws\.com/ 
    }); 
})(); 

В примере я использую sw-toolbox библиотеку из команды Chrome, чтобы помочь вам кэшировать различные активы.

Смежные вопросы