Какой самый эффективный способ сделать запись журнала на сервере из javascript? - PullRequest
1 голос
/ 04 октября 2011

Предположим, у меня есть скрипт, который должен что-то регистрировать на сервере.У меня есть конечная точка, такая как http://myServer.com/recordLog, и я могу поразить ее некоторыми параметрами, и она сделает запись.Некоторые предостережения:

  • Я могу контролировать то, что сервер возвращает
  • Это будет происходить миллионы раз в день.
  • Эффективность крайне важна.
  • Сценарий может быть загружен с другого сервера и внутри iframe, поэтому проблемы с безопасностью браузера находятся в процессе.
  • Меня не очень волнует ответ.Даже если произошел сбой связи, я не собираюсь ничего с этим делать.
  • Я не могу ничего сделать, что повлияет на состояние остальной части страницы.

Моей первой мыслью было сделать вызов ajax - это выглядит как «современный», «правильный» способ сделать это.Однако в некоторых случаях это может вызвать проблемы безопасности между доменами.

Другая моя идея - загрузить в память изображение размером 1x1 или пустое <script>.Что-то вроде:

var i = new Image;
i.src = "http://myserver.com/recordLog?foo=bar&baz=buz"; // returns 1x1 gif

или:

// this is similar to ajax-p, I suppose
var s = document.createElement('script');
s.type= 'text/javascript';
s.src= "http://myserver.com/recordLog?foo=bar&baz=buz"; // returns empty text file

Я почти уверен, что нет необходимости помещать изображение или скрипт в DOM.Простая установка src заставляет браузер сделать запрос.

Эти два очень похожи.Общий стандарт, кажется, использует пиксели, но я думаю, что это задержка.Я думаю, что пустой сценарий будет немного меньше для передачи.Есть ли преимущества у одного или другого?

Есть ли другие идеи / методы?Есть ли какие-то скрытые ошибки, о которых я не думаю (например, древние браузеры, которые не будут работать должным образом)?

Ответы [ 4 ]

0 голосов
/ 04 октября 2011

Или вы можете использовать базу данных NoSQL для хранения сообщений журнала, например CouchDB или MongoDB .CouchDB, например, хранит документы JSON, и вы взаимодействуете с сервером, используя RESTful API.MongoDB, с другой стороны, хранит документы в формате BSON (двоичный формат, основанный на JSON).Существует множество примеров, которые помогут вам перейти на их сайты.

0 голосов
/ 04 октября 2011

Я не вижу проблемы с этим:

var xhr = new XMLHttpRequest;
xhr.open( 'GET', 'http://myserver.com/recordLog?foo=bar&baz=buz' );
xhr.send();
0 голосов
/ 04 октября 2011

Просто создайте iframe и укажите на какой-нибудь URL-адрес регистрации, который ничего не возвращает.

0 голосов
/ 04 октября 2011

Если вы хотите отправить запрос, почему бы просто не создать форму и отправить ее.

<iframe id=invisibleiframe ...>
<form target=invisibleiframe action=log>
  <input type=hidden name=logmessage value=log>
</form>
<script>forms.log.submit()</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...