2013-05-13 16 views
9

To pytanie było zadawane kilka razy, ale nie dotyczy to tego przykładu.Pominięcie poszczególnych modułów pamięci podręcznej za pomocą RequireJS

Oto przegląd naszej aplikacji:

  • Prosty serwer routingu z Express, na węźle
  • Jedynka strona aplikacji kręgosłup
  • Podstawowe moduły i biblioteki (JS/CSS), które nie zmieniają
  • Widget JS/LESS pliki/HTML, które często zmieniają

trakcie rozwoju, szukam buforować biust pliki, które się zmieniają, ale nie te podstawowe biblioteki, aby przyspieszyć przeładowywanie strony i przyspieszyć rozwój.

znalazłem wyjaśnienia na: Krach

  1. Cache na RequireJS - here
  2. Wyjaśnienie na CacheBuster poszczególnych modułów - here

Czyżby rozwiązanie:

  1. Explain jak działa wymuszanie buforowania requireJS?
  2. Należy podać rozwiązanie dla tego konkretnego scenariusza.

Odpowiedz

4

Pomijanie pamięci podręcznej polega na dołączaniu zawsze unikatowego ciągu zapytań na końcu każdego wymaganego pliku. Wykorzystuje wartość konfiguracyjną RequireJS: urlArgs; RequireJS dba o dołączenie jej do ciebie:

urlArgs: "bust=" + (new Date()).getTime() 

(new Date()).getTime() jest to tylko prosty sposób, aby uzyskać niepowtarzalny ciąg z JavaScript. Możesz dokonać pewnych zmian na Math.random(), ale używając number of milliseconds since the epoch gwarantuje wyjątkowość, dla optymalnego buforowania.

myślę Pan Burke sugeruje coś takiego:

require.config({ 
    baseUrl: '/base/path', 
    paths: { 
     'fileAlias': 'fileLikelyToChange?bust=' + (new Date()).getTime(), 
     'anotherFileAlias': 'anotherFileLikelyToChange?bust=' + (new Date()).getTime(), 
     'jQuery': 'jQuery' 
    }, 
}); 

Tak więc, zamiast wszechobecnego urlArgs pomijanie pamięci podręcznej, stosuje się go w szczególności do każdego pliku, który może się zmienić; stąd wykluczenie jakichkolwiek bibliotek.

nie testowałem, ale ja pewnie schludny go do czegoś takiego:

function bust(path) { 
    return path + '?bust=' + (new Date()).getTime(); 
} 

require.config({ 
    baseUrl: '/base/path', 
    paths: { 
     'fileAlias': bust('fileLikelyToChange'), 
     'anotherFileAlias': bust('anotherFileLikelyToChange'), 
     'jQuery': 'jQuery' 
    }, 
}); 
+1

Dzięki - a co z plikami zawartymi w mojej aplikacji, ale nie wymienionymi w obiekcie require.config - paths? – imrane

+0

W tym scenariuszu nie sądzę, że istnieje proste rozwiązanie. Po prostu opisuję to, co moim zdaniem zostało zasugerowane w sprawie GitHub. Nie sądzę, że masz naprawdę inne możliwości, niż modyfikowanie źródła RequireJS lub dokonywanie skomplikowanych hacków. – c24w

0

Wystarczy pamiętać, że jeśli naprawdę muszą polegać na jakimś zewnętrznym skrypt, który można wykorzystać zamiast $.getScript wymagać zapewnienia, że ​​jest on uwzględniony. Mam kilka nieamdowych skryptów, które są przeznaczone do integracji z innymi firmami (na przykład płatności Amazon), których użyłem getScript zamiast wymagać. Jeśli możesz użyć tej metody, unikałoby wysyłania parametrów pomijania pamięci podręcznej z urlArgs na serwer zewnętrzny.

Powiązane problemy