Подтвердить что ты не робот

Что такое шаблон прокси-сервера JavaScript?

Сегодня я встретил понятие "прокси-паттерн" на jQuery.com, но ничего не мог сделать. По-видимому, это очень полезно, но я вообще не понимаю эту идею, это звучит чуждо мне. Может кто-нибудь, пожалуйста, объясните мне это простыми словами: "Как будто мне было 3 года"?

4b9b3361

Ответ 1

Представьте, что у вас есть сайт со многими аякс-запросами. Есть изменения в дизайне. Теперь перед каждым запросом вы хотите отобразить некоторый пользовательский загрузочный gif. Вы можете изменить весь код, где есть запрос ajax, или вы можете использовать шаблон прокси.

var proxied = jQuery.ajax; // Preserving original function
jQuery.ajax = function() { 
    jQuery("#loading").dialog({modal: true});
    return proxied.apply(this, arguments);
}

Ответ 2

В книге Javascript Patterns Стоян Стефанов описывает этот шаблон так:

В шаблоне прокси один объект действует как интерфейс к другому объекту. Прокси находится между клиентом объекта и самим объектом и защищает доступ к этому объекту.

Этот шаблон может выглядеть как накладные расходы, но он полезен для выполнения задач. Прокси-серверы играют роль опекуна для объекта (также называемого "реальным субъектом" ) и пытаются сделать этот объект как можно меньше работы.

Пример реального мира

Прокси-шаблон полезен, когда реальный субъект делает что-то дорогое. В Интернете приложений, одна из самых дорогих операций, которую вы можете сделать, это сетевой запрос, поэтому имеет смысл объединить HTTP-запросы как можно больше.

Здесь вы можете увидеть пример: http://www.jspatterns.com/book/7/proxy.html. (посмотрите исходный код).

У вас есть список видео на странице. Когда пользователь нажимает заголовок видео, область ниже заголовка расширяется, чтобы показать больше информации о видео, а также видео для воспроизведения. Подробная видеоинформация и URL-адрес видео не часть страницы; они должны быть получены путем совершения вызова веб-службы. Веб-сервис может принимать несколько идентификаторов видео, поэтому мы можем ускорить приложение, сделав меньше HTTP-запросы по возможности и получение данных для нескольких видео за один раз.

Объект видео не вызывает службу HTTP, а вызывает прокси. Затем прокси-сервер ждет ответа перед отправкой запроса. Если другие вызовы из видео поступают в период ожидания 50 мс, они будут объединены в один. Задержка в 50 мс практически незаметна для пользователя, но может помочь объединить запросы и ускорить работу при нажатии "переключение" и одновременном расширении нескольких видео. Это также значительно снижает нагрузку на сервер, так как веб-сервер должен обрабатывать меньшее количество запросов.

Без прокси

Without proxy

Proxy

With Proxy

Прокси в качестве кеша

As a cache

Ответ 3

В общем - Proxy Pattern позволяет контролировать доступ к ресурсу. При этом он может решить несколько потенциальных проблем:

  • предотвратить неправильное или вредоносное использование ресурса
  • предотвратить/контролировать доступ к ресурсу, который слишком дорог для создания

jQuery используют термин довольно свободно, но их идея заключается в том, что вы переопределяете/скрываете существующий метод (в своем примере jQuery.fn.setArray), добавляя к нему больше функций.

(function() { // envelop everyting in anonymous immediately called function 
  var proxied = jQuery.fn.setArray; // save current method
  jQuery.fn.setArray = function() { // override the method
    console.log(this, arguments); // add functionality
    return proxied.apply(this, arguments); // call original method and return 
                                           // its result
  };
})();

Ответ 5

Шаблон прокси обеспечивает суррогатный объект или объект-заполнитель для другого объекта и контролирует доступ к этому другому объекту.

В объектно-ориентированном программировании объекты выполняют работу, которую они рекламируют через свой интерфейс (свойства и методы). Клиенты этих объектов ожидают, что эта работа будет выполнена быстро и эффективно. Однако бывают ситуации, когда объект сильно ограничен и не может выполнить свою ответственность. Обычно это происходит, когда есть зависимость от удаленного ресурса (что приводит к задержке сети) или когда объект занимает много времени для загрузки.

В таких ситуациях вы применяете шаблон прокси и создаете прокси-объект, который "стоит за исходный объект. Прокси перенаправляет запрос целевому объекту. Интерфейс объекта Proxy совпадает с исходным объектом, и клиенты могут даже не знать, что они имеют дело с прокси, а не с реальным объектом.

enter image description here

Клиент. В примере кода: функция run()

  • вызывает прокси для запроса операции.

Прокси - в примере кода: GeoProxy

  • предоставляет интерфейс, аналогичный реальному объекту

  • поддерживает ссылку, позволяющую прокси доступ к реальному объекту

  • обрабатывает запросы и перенаправляет их на реальный объект

RealSubject - в примере кода: GeoCoder

  • определяет реальный объект, для которого запрашивается услуга.