2017-05-23 58 views
9

Mamy architekturę, w której jedna duża aplikacja jest podzielona na wiele aplikacji Angular obsługiwanych przez różne zespoły z różnymi harmonogramami wdrażania. Te osobne aplikacje kątowe w kontekście ASP.NET są wdrażane na serwerze i uruchamiane jako jedna duża aplikacja. Każda aplikacja jest wdrażana w osobnej puli aplikacji i wszystkie mają ten sam układ i kod ramowy.Optymalizacja pakietów w rozproszonej architekturze oprogramowania

Każda aplikacja korzystałaby z pakietu zoptymalizowanego przy użyciu kompilatora AOT i modułu pakującego (pakiet zbiorczy lub pakiet webowy 2). Każda aplikacja będzie również używać scentralizowanego kodu Javascript, który musi być scentralizowany w dużej aplikacji (kod frameworku). Ten kod posłużyłby także komponentom Angular i zawierałby takie elementy, jak scentralizowany komponent układu, wiele usług kątowych, które nawiązywały połączenia internetowe, itp. Tak więc każda aplikacja korzystałaby z tego samego kodu ramowego.

Celem jest również to, że gdy wystąpi zmiana w tym kodzie ramowym, żadna pojedyncza aplikacja nie będzie musiała aktualizować i wdrażać ponownie.

Standardowo widzę, że używane są import es2015, a moduł pakujący interpretuje import i dodaje tylko niezbędny kod do modułu (drżenie drzewa). Głównie potrzebne są elementy architektury Angular, które są potrzebne w pakiecie (bez użycia CDN). Ale w tym przypadku istnieją 3 partie kodu realizacji:

  • kątowe i inny kod sprzedawca
  • Scentralizowane zamówienie Kod frameworking wykorzystywane przez wszystkie aplikacje również przy użyciu kątowe, a także zapewniając pakiet
  • Aplikacja samo dostarczanie jednego pakietu:

Jak podzieliłbyś i zoptymalizowałeś pakiety?

  • Zrób osobny pakiet z wszystkimi kątowe/sprzedawca rzeczy, że scentralizowane Kod frameworking i aplikacja muszą używać kątowa rzeczy byłyby wyłączone z głównej wiązki
    • Użyj CDN podobną drogę do centralizacji rzeczy zwyczaj frameworking i przedstawieniu że wiązka (bez kodu kątowej w wiązce)
    • Więc byś skończyć z czymś takim:

<script src="vendor-bundle.js"></script>
<script src="/central-location/frameworking-bundle.js"></script>
<script src="app-bundle.js">/script>;

Co jest najlepszym rozwiązaniem w tym konkretnym przypadku? Nie mogę znaleźć dobrych przykładów dla tego rodzaju konfiguracji architektury.

+2

Zadajesz bardzo skomplikowane pytania, ale nowszy znak zapytania rozwiązany. Czy naprawdę nie otrzymujesz pomocy przynajmniej raz? – user394010

+0

Właśnie napisałem to :) –

+1

Mam na myśli inne pytania. Nie wiem, jakie to trudne. Ale napisali już dawno temu. – user394010

Odpowiedz

1

Wystarczy użyć tego rodzaju budowy: <script src="vendor-bundle.js"></script> <script src="/central-location/frameworking-bundle.js"></script> <script src="app-bundle.js">/script>;

I używać Etags ostatni buforowanie zmodyfikowany/na frameworking-bundle.js ten sposób plik zostanie pobrany ponownie, jeśli zmodyfikowane. Użytkownicy będą zawsze otrzymywać najnowszą wersję bez użycia ciągu znaków version/hashing/query. Nie będzie musiał modyfikować kodu. https://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching/

Kod ramowy powinien wykluczyć kod dostawcy, a aplikacja powinna go zdefiniować. W ten sam sposób, jak na przykład Kendo wymaga posiadania JQuery.

+0

możesz dołączyć te zewnętrzne adresy URL za pomocą modułu bundler –