2013-04-15 4 views
0

Я создал класс локатора служб для доступа к различным классам обслуживания в своем приложении javascript, но я не уверен, насколько эффективен локатор службы в javascript, из-за включенных файлов, которые я должен включить на каждую страницу.Javascript и сервисный локатор и в том числе файлы js

Например, у меня есть две службы в моем локаторе сервисов, но что делать, если мне нужно только получить доступ к одной из служб на странице, тогда мне все равно нужно включить оба js-файла. Это хороший дизайн javascript? Два включенных должным образом не влияют на производительность заметно, но если я разворачиваю свой локатор сервисов с помощью 10 сервисов, тогда мне нужно включить 12 js-файлов, eventho мне может потребоваться только один или два доступа на странице. Как сделать это лучше всего в javascript?

Вот мой код службы локатора:

function serviceFactory() { 
    this.constructor = function() { 
     this.retailService = new retailService(); 
     this.outlookService = new outlookService(); 
    } 

    this.constructor(); 
} 

ответ

0

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

  1. RequireJS
  2. Head.js
  3. $.getScript()

Но следует отметить, что браузеры кэшировать много, а это значит, после того, как они загрузили что-то когда-то они не будут делать это снова в течение некоторого времени (как точно зависит от конфигурации браузера и веб-сервера).

0

Я считаю, что вы смешиваете две концепции в коде, который вы храните. Сервисный локатор не выполняет сервисное обесточивание. Это позволяет вести учет услуг, доступных для системы.

В этом смысле, служба поиска должна быть чем-то вроде

var ServiceLocator = new function() { 
    var self = this; 
    var services = {}; 

    self.register = function (key, service) { 
     services[key] = service; 
    }; 

    self.resolve = function (key) { 
     return services[key]; 
    }; 
}; 

Затем нужно создать и зарегистрировать услуги, но вам нужны различные услуги на странице, завод, который предварительно строит их всех вон Не работай. Вы можете сделать регистрацию обслуживания как

var RetailService = function() { 
    // service definition   
}; 
ServiceLocator.register('retailService', new RetailService());