2014-12-26 6 views
8

В общем, поиск в npm ведет себя странно, это занимает очень много времени, и время от времени оно меняется по порядку и времени.npm поиск занимает много времени

В первый раз я написал

$ npm search jquery 

потребовалось более двух минут. Последующие поиски заняли около 30 секунд. Иногда я получаю матчи, прежде чем запрос HTTP, иногда наоборот:

Matching результаты первого

$ npm search jquery.appendgrid 
NAME    DESCRIPTION           AUTHOR  DATE    VERSION KEYWORDS 
jquery.appendgrid appendGrid - The dynamic table input jQuery plugin =hkalbertl 2014-12-21 08:09 1.5.1 jquery-plugin ui header-detail master-d 
npm http GET https://registry.npmjs.org/-/all/since?stale=update_after&startkey=1419625615355 
npm http 200 https://registry.npmjs.org/-/all/since?stale=update_after&startkey=1419625615355 

результаты Matching последние

$ npm search jquery.appendgrid 
npm http GET https://registry.npmjs.org/-/all/since?stale=update_after&startkey=1419625643062 
npm http 200 https://registry.npmjs.org/-/all/since?stale=update_after&startkey=1419625643062 
NAME    DESCRIPTION           AUTHOR  DATE    VERSION KEYWORDS 
jquery.appendgrid appendGrid - The dynamic table input jQuery plugin =hkalbertl 2014-12-21 08:09 1.5.1 jquery-plugin ui header-detail master-d 

В любом случае она принимает вокруг тридцать секунд. Поскольку это занимает меньше, чем первые две минуты, я думаю, что что-то было кэшировано, но оно все еще делает HTTP-запрос, и оно все еще занимает удивительно долгое время. Это не время между первой строкой http и секундой, которая занимает всего 1-2 секунды. Но есть много времени ожидания до и после.

Что происходит, и могу ли я ускорить его?

+0

«Интернет» занят? Серьезно, насколько занят сайт? как часто вы это делаете? и почему'? –

+0

Я прочитал ваш комментарий, как будто я делаю что-то действительно глупое, дайте мне знать, если это так.Я прочитал учебник, он сказал, что я могу искать пакеты в npm, выполняя «npm search», так вот что я делаю. Может быть, я не должен использовать его таким образом? Если функция поиска не предназначена для поиска пакетов, то для чего это нужно? –

+0

И я не понимаю, что вы подразумеваете под словом «Интернет» занят? ». Это даже вопрос? Почему «интернет» в кавычках? Это не имеет никакого отношения к моему интернет-соединению, вот и все, что я знаю. –

ответ

17

Год назад, когда этот учебник был написан, npm было меньше опубликованных пакетов. В настоящее время их насчитывается более 100 000 человек. Чтобы сделать npm search, npm загружает файл JSON, описывающий все пакеты, грубо индексирует его, а затем выполняет поиск по всем описаниям пакетов.

Результатом является то, что npm search как локальная команда по существу разрушена прямо сейчас - она ​​завершается, но очень медленно, и для этого создается достаточно опасный файл (60 МБ).

Предложенный способ решения теперь использовать интерактивный инструмент поиска в https://www.npmjs.com/

+0

Отличный полный ответ :) –

+0

... и использует много памяти во время поиска. Одна из моих сред - небольшая виртуальная машина с 256 МБ памяти, и поиск в нпм не будет завершен (он начинает измельчать и никогда не заканчивается). – Andras

+1

Я сделал случайный поиск «npm» без имени пакета, и он сказал, что он обновляет локальный кеш для первого запуска. Поэтому я предположил, что это закончится довольно быстро. * Моя проблема заключается в том, что он все еще работает 45 минут спустя, использует более 1 ГБ свопа и около 1,5 ГБ оперативной памяти. У меня еще нет Ctl-C'd, потому что я был не уверен, что если бы это не закончилось, я бы принципиально сломал что-то. Рад, что я пошел искать. Я знаю, что не буду использовать этот аспект инструмента в будущем. – ddd

0

У меня тоже было это, я подозреваю, что npm обновляет список локальных кэшированных пакетов. Длительной задержкой может быть выборка данных репо.

Только что мой первый поиск занял 35 секунд (немного процессора, долгое ожидание, затем 10 секунд твердого процессора). Последующие поисковые запросы занимают 11 секунд, при использовании 97% CPU.

Редактировать: 10 секунд процессора на AMD 3,6 ГГц Phenom II, соответственно отрегулируйте его.

+0

Интересно. Для сравнения 'bearch search jquery' занимает 2-3 секунды на моем компьютере. –

1

НПМ репо не должен быть медленным. Некоторые люди говорят здесь, что у него более 100 000 пакетов ... На самом деле это более 165 000, но даже это число действительно мало для любой базы данных. Я считаю, что они используют CouchDB, что очень быстро. В любом случае, если вы не получите результаты, которые вы хотите, вы всегда можете использовать другие альтернативные поисковые сайты, как:

+3

Это не то, что само репирование npm' происходит медленно; это то, что локальный поиск состоит из 1) скачивание снимка репо 2) разбора, что> 80MB JSON-файл с встроенным анализатором (непотоковый) 3) ищущим Вот что медленно. Резервное хранилище npm выполняется быстро, как вы можете видеть при установке пакетов. –

Смежные вопросы