2013-03-29 2 views
0

Я новичок в node.js (и в целом в javascript), поэтому я думал, что научусь, создав простую приложение погоды, использующую YQL. В целом приложение работает, но запрос выполняется очень медленно. Для возврата json требуется около 6 секунд. С другой стороны, я создал такое же приложение, используя jQuery (getJSON), и получаю результаты почти сразу.Медленная производительность с JSON в Node.js

Это лучший способ проанализировать json из url в node.js?

var request = require('request'); 

var url = 'http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20weather.forecast%20WHERE%20location%3D96720&format=json&diagnostics=true&callback=' 

request(url, function (error, response, body) { 
    console.log(body); 
}) 

Буду признателен за любые отзывы и/или предложения.

Заранее спасибо.

ответ

0

Я просто попытался открыть этот URL в своем браузере и через> 10 секунд он по-прежнему загружается. (Обновление: время ожидания.)

Я полагаю, что Yahoo устанавливает кеширующие заголовки, которые ваш браузер соблюдает, поэтому ваш первый запрос был, вероятно, кэширован, а затем каждый запрос jQuery после этого загружался из кеша браузера почти мгновенно. request() не имеет локального кеша, поэтому он загружает новую копию каждый раз, что занимает гораздо больше времени.

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

Обновление: вот еще информация о скорости запроса:

  • Мой дом подключение к Интернету: в основном таймауты. (Time Werner Cable/Road Runner, Western Ohio)
  • Мой сервер prgmr.com в Калифорнии: быстрый запрос первым занял 1.151 секунд в node.js, после чего каждый запрос был < 0,1 секунды. Узел v0.8.21
  • node.js веб-прокси работает на Heroku: быстро - 0,28 секунд, включая время на прокси-сервер его обратно на мой ноутбук - http://www.nodeunblocker.com/proxy/http://query.yahooapis.com/v1/public/yql?q=SELECT%20 *% 20FROM% 20weather.forecast% 20WHERE% 20location% 3D96720 & = формат JSON

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

+0

Спасибо за ваш ответ. Даже после очистки кеша и тестирования в другом браузере URL-адрес загружается быстро/мгновенно. Попытка запросить что-либо через узел медленно. Даже если вы загружаете новую копию каждый раз, я ожидаю, что она будет меньше секунды. – bejesus

+0

Hum .. Я просто играл с ним еще несколько, и в моем браузере я получил 2 быстрых ответа, 1 медленный ответ и около 15 тайм-аутов. Я добавил регистрацию ошибок на узел, и каждый раз, когда я запускал ее на своем ноутбуке, время обслуживания составляло около 75 секунд каждый раз, когда я запускал его (5-10 раз). НО, когда я ssh'd на мой сервер в Калифорнии и запускал тот же node.js, запрос был завершен за 1.151 секунд! Ваш браузер и сервер узлов на одном и том же интернет-соединении? –

+0

Это очень интересно. Я на самом деле не тестировал это на сервере, но только локально на своем ноутбуке во время разработки; поэтому да, используя одно и то же подключение к Интернету. Странно, что вы получаете такие длинные ответы и тайм-ауты. Я этого не испытал. Наверное, я просто проверю на сервере и посмотрю, какие ответы я получаю. – bejesus