Visual Studio 2017 - proces serwera Node.JS - wyłączyć?

136

Pracuję nad aplikacją ASP.NET w programie Visual Studio 2017 i zauważam proces Node.JS: JavaScript po stronie serwera działający z pamięcią od 1,3 GB do 1,8 GB. Mój proces roboczy usług IIS ma normalny rozmiar, jak w VS 2015.

Moja aplikacja nie zawiera żadnych bibliotek Node.JS. Nie mogę dowiedzieć się, jak wyłączyć ten proces Node.JS: JavaScript po stronie serwera. Zjada zbyt dużo pamięci na coś, do czego nie mam pożytku.

Czy istnieje sposób, aby to zabić, oprócz odinstalowania VS 2017 i powrotu do VS 2015?

wprowadź opis obrazu tutaj

Zabicie głównego procesu w Menedżerze zadań nie wpływa na nic w VS, jednak jeśli przejdę do zakładki Szczegóły i zabiję poszczególne uruchomione procesy, zawiesza się Visual Studio. Nagrałem film pokazujący, co się stało po tym, jak zabiłem proces i uruchomiłem lokalną stronę internetową (przepraszam za jakość, tak ograniczony rozmiar obrazu do 2 MB):

wprowadź opis obrazu tutaj

Ryan Ternier
źródło
1
Czy używasz TypeScript?
SLaks
Używamy jej niewielkiej ilości.
Ryan Ternier
Zakończyłem ten proces i nie widziałem żadnych złych skutków. Kompilator sieciowy kompiluje MNIEJ plików bez niego.
Glen Little
@GlenLittle To działa, ale jak kot ... wrócił. Zastanawiam się, czy to coś zainstalowanego na początku i zawsze działa. Właśnie zainstalowałem VS2017 na moim lappy i dało mi to możliwość zainstalowania serwera. Zaktualizuję to, kiedy na nim przetestuję
Ryan Ternier
Czy możesz przesłać opinię na ten temat? Istnieje kilka różnych funkcji w narzędziach do tworzenia stron internetowych, które używają Node pod maską (takich jak JSLint / CSSLint / itp.), Które mogą być tutaj zaangażowane. Pojawiłyby się one dla każdego projektu internetowego, nie tylko TypeScript czy Node.
Jimmy

Odpowiedzi:

189

Narzędzia> Opcje> Edytor tekstu> JavaScript / TypeScript> Usługa językowa ...

Odznacz pole „Włącz nową usługę języka JavaScript”.

Uruchom ponownie program Visual Studio

Wydaje się, że uniemożliwia to uruchomienie procesu NodeJS.

Andy Taw
źródło
19
To rozwiązanie pomogło, należy je głosować. Aby to zadziałało, musisz jednak ponownie uruchomić program Visual Studio.
Madd
14
Zrobiłem to, zrestartowałem VS2017 i nadal nie przeszkodziło to w uruchomieniu „Node.js: JavaScript po stronie serwera” podczas uruchamiania VS2017. Zajmuje około 800 MB na moim komputerze i nie mogę już debugować w Chrome.
Bill
1
Ten sam problem, @Bill - wydaje się, że wyłączenie rozszerzenia TypeScript zgodnie z odpowiedzią Gabriela rozwiązało problem.
Dunc
1
Co do cholery? Dlaczego tak się dzieje w ustawieniach edytora tekstu? : P
Sнаđошƒаӽ
3
To nie jest nawet opcja dla mnie w moim menu
BradLaney
30

Zgłosiłem uwagi w tej sprawie:

https://developercommunity.visualstudio.com/content/problem/31406/visual-studio-2017-nodejs-server-process-turn-off.html

Otrzymałem odpowiedź od zespołu MS - skierował mnie do tego postu:

https://developercommunity.visualstudio.com/content/problem/27033/nodejs-server-side-javascript-process-consuming-to.html?childToView=27629#comment-27629

Proces node.exe ma wiersz poleceń: wprowadź opis obrazu tutaj

Skutecznie powiedziano mi:

W VS 2017 kilka funkcji jest zaimplementowanych w JavaScript. Node.js jest używany przez program Visual Studio do uruchamiania tego kodu JavaScript. Node jest używany między innymi do uruchamiania kodu, który zapewnia usługi formatowania i inteligencji, gdy użytkownik edytuje TypeScript lub JavaScript. To zmiana w stosunku do VS 2015.

Odpowiada na moje pytanie, ale ujawnia inne - dlaczego potrzebujesz 1,4 GB pamięci, aby zapewnić mi inteligencję w plikach JavaScript ... czy jest to jedno z rozwiązań wbudowanych w VS, więc zużywa mniej pamięci, więc nie robi nie osiągnąłeś limitu 2 GB (4 GB) 32-bitowych procesów? Pytania pytania pytania.

Ryan Ternier
źródło
Rzeczywiście, warto sprawić, by główny proces VS był bardziej responsywny i zoptymalizować wydajność, przenosząc niektóre rzeczy, takie jak Intellisense, do innego procesu i dodając więcej pamięci RAM dla każdego procesu 32-bitowego. Ale to nie ma dla nas znaczenia w tym przypadku. Odkryłem, że Node zużywa więcej pamięci, jeśli masz więcej otwartych plików kodu źródłowego i włączoną funkcję Intellisense. Jeśli naprawdę brakuje ci pamięci, poeksperymentuj z wyłączeniem Intellisense i innych funkcji, bez których możesz się obejść.
user1306322
2
Miało to dla mnie odwrotny skutek i sprawiło, że VS2017 jest tak leniwy (gra słów zamierzona), że wracam do VS2015. Uważam to za absurdalne, że MS musi używać zewnętrznych frameworków firm trzecich, aby zrobić coś tak prostego jak Intellisense. To zawsze była ich mocna strona… a teraz? Wyłączyłem TypeScript i Node.js i jeśli spojrzę na to, że Chrome VS2017 zawiesza się tak źle, że czasami muszę ponownie uruchomić. Wróćmy więc do Firefoksa i VS2015, przynajmniej na razie. I to na i7, 16GM RAM i całej konfiguracji SSD z Win10 Pro. Wstrząsający.
Neville
zgodnie z postem, do którego odwołuje się tutaj ... Wyłączenie rozszerzenia TypeScript jest na razie obejściem, przynajmniej dla mnie. Kliknij Narzędzia, rozszerzenia i aktualizacje, wyszukaj „TypeScript” i wyłącz go. Uruchom ponownie program Visual Studio.
pat capozzi
Cóż, to wyjaśnia, dlaczego Intellisense poszedł do piekła.
Andy
19

Musisz wyłączyć obsługę języka TypeScript w programie Visual Studio:

Narzędzia> rozszerzenia i aktualizacje> TypeScript dla Microsoft Visual Studio> Wyłącz

Następnie po prostu uruchom ponownie program Visual Studio i gotowe.

Gabriel
źródło
1
nadal biegnę po tym, jak wykonałem te kroki
Jervie Vitriolo
1
Nadal biegnie. To nic nie dało.
BradLaney
18

Odpowiedź Ryana Terniera wskazała mi, co moim zdaniem jest właściwym kierunkiem. Po jego linku ( https://developercommunity.visualstudio.com/content/problem/27033/nodejs-server-side-javascript-process-consuming-to.html?childToView=27629#comment-27629 ) dotarłem do odpowiedzi Bowdena Kelly'ego tuż pod zaakceptowaną odpowiedzią.

Oto odpowiedź Bowdena Kelly'ego:

Proces węzła, który widzisz, zasila usługę języka JavaScript. Proces ten pojawi się za każdym razem, gdy edytujesz plik JS, plik TS lub dowolny plik zawierający JS / TS (html, cshtml itp.). Ten proces napędza technologię IntelliSense, nawigację po kodzie, formatowanie i inne funkcje edycji i robi to, analizując cały kontekst projektu. Jeśli masz dużo plików .js w swoim projekcie, może to być duże, ale bardziej niż prawdopodobne jest to, że masz dużo plików bibliotek, które są analizowane. Domyślnie przeskanujemy każdy plik .js / .ts w Twoim projekcie. Możesz jednak zastąpić to zachowanie i dostroić usługę językową tak, aby skupiała się tylko na kodzie. Aby to zrobić, utwórz plik tsconfig.json w katalogu głównym projektu z następującymi ustawieniami:

    {
    "compilerOptions": {
        "allowJs": true,
        "noEmit": true
    },
    "exclude": [
        "wwwroot/lib" //ignore everything in the lib folder (bootstrap, jquery, etc)
        // add any other folders with library code here
    ],
    "typeAcquisition": { 
        "enable": true,
        "include": [
            "bootstrap",
            "jquery"  //list libraries you are using here
        ]
    }
}

Po dodaniu folderu ze wszystkimi moimi bibliotekami skryptów do pliku tsconfig.json życie znów było dobre.

Ralph
źródło
Po tym, jak moja skrzynka z mydłem zawyła w poprzedniej odpowiedzi, wydaje się, że uratowało to dzień !!! Taka prosta rzecz, ale tak niejasna i zajęła mi tylko trzy dni walki z VS2017, aby w końcu ją znaleźć!
Neville
Dodanie tego pliku prowadziło do wszelkiego rodzaju błędów TypeScript podczas tworzenia projektu. Usunięto go, a błędy zniknęły.
John81
4

Najbrudniejsze obejście w historii: po prostu zmień nazwę na ServiceHub.Host.Node.x86.exeinną. Od tamtej pory mi to nie przeszkadza. Kiedy (jeśli) naprawdę tego potrzebujesz, po prostu zmień nazwę z powrotem.

Ta sama sztuczka działa w Adobe Photoshop, który również uruchamia Node z jakiegoś powodu, którego jeszcze nie odkryłem w moim zwykłym przepływie pracy.


Okazało się...

Nie możesz po prostu zmienić jego nazwy i oczekiwać, że wszystko będzie dalej działać. Kto wiedział!

Najwyraźniej ta sztuczka ze zmianą nazwy działa tylko wtedy, gdy zawiesisz proces VS i zabijesz Node, a następnie wznowisz VS. Jeśli spróbujesz uruchomić VS ze zmienioną nazwą pliku Node exe, nastąpi awaria podczas otwierania projektu z „nieznanym twardym błędem”. Ponadto, podczas pracy nad już załadowanym projektem, leniwy licznik odwołań powyżej metod i właściwości nie będzie działał, ponieważ najwyraźniej polega to na istnieniu Node.

Więc może być w porządku, aby po prostu zawiesić proces Node i pozwolić systemowi Windows na wymianę pamięci z pamięci RAM na dysk twardy, bez zmiany nazwy exe, abyś mógł ponownie uruchomić VS później bez przechodzenia przez kłopoty ze zmianą nazwy. To znaczy, jeśli chcesz żyć z konsekwencjami.

user1306322
źródło
Niestety, myślę, że istnieje kod, który wykryje, czy proces węzła nie odpowiada i zamiast tego uruchomi nowy. Nie znam tej części kodu VS, ale tak mi to zostało opisane.
Jimmy
Zawsze podoba mi się pomysł pozbawiania siłą , wiecie o co mi chodzi ... ;-)
Sнаđошƒаӽ
3

Coś, co może pomóc projektom złagodzić wagę nodejs: polega na ponownym przypisaniu wersji węzła używanej w menu Narzędzia> Opcje> Projekty i rozwiązania> Zarządzanie pakietami sieci Web do zainstalowanej wersji 64-bitowej. Studio nadal będzie uruchamiać swój wewnętrzny Node dla instancji tsserver.js, ale każdy maszynopis w projekcie będzie domyślnie używać dostarczonej wersji - i to pomogło mi z pierwszej ręki.

Ponadto, innym razem, gdy zauważyłem, że usługa językowa działa, odkryłem, używając prostego tsconfig.jsonpowyżej katalogów używanych jako repozytoria i określając skipLibCheck: truei dodając node_modules do wykluczenia - ogromnie pomogło w usłudze, a jeden plik obsługuje wszystkie foldery poniżej niezależnie od bezpośrednich odniesień do projektu. PS - jeśli nadal chcesz obsługiwać JavaScript Intellisense, ustaw opcję allowJs: truei noEmit: true.

Na koniec sprawdź w Opcjach skryptu w menu Narzędzia> Opcje> Edytor tekstu> Javascript / Typescript> Projekt , czy opcja ta nie jest zaznaczona, aby automatycznie kompilować pliki maszynopisu, które nie są częścią projektu, ponieważ mogą one również wiązać zasoby dla pomocniczych projektów innych firm za pomocą węzła lub maszynopisu.

Nie są one niezawodne, każdy z nich musi znaleźć dokładne wąskie gardło, ale stwierdziłem, że często działają one dla mnie i mojego zespołu

Nathan Teague
źródło
To zadziałało dla mnie. Dodano „C: \ Program Files \ nodejs” (gdzie wcześniej ręcznie instalowałem NodeJS) na początek tej listy, a proces Node.js przeszedł z 50-60% obciążenia procesora do 0%.
andynil
1

Zwracam tylko uwagę, że zużycie dużej ilości pamięci zostało naprawione w wydaniu z 10 maja 2017 r. - Visual Studio 2017 w wersji 15.2 (26430.04).

Informacje o wersji tutaj: https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes

Szczegółowe uwagi dotyczące poprawki tutaj: https://developercommunity.visualstudio.com/content/problem/27033/nodejs-server-side-javascript-process-consuming-to.html

zulumojo
źródło
2
Uruchamianie wersji 15.2 (26430.16) tutaj i powiedziałbym, że może naprawili absurdalnie - problem z dużym zużyciem pamięci, ale tylko zmienili go na zużycie dużej pamięci :)
PJUK
1
Zgoda. Problem wynika głównie z tego, jak słabo napisany jest node.js (w tym, że funkcje „obiektowe” są replikowane w kółko) - z drugiej strony, frameworki poprawiające niedociągnięcia JS zawsze spowalniają. Tak się dzieje, gdy ludzie zajmujący się Linuksem rozwijają się dla Windowsa - wielki, gruby, zawiły bałagan.
MC9000
Zgłosiłem ten problem na github.com/aspnet/JavaScriptServices/issues/1298 Zauważyłem ten problem w VS 2015 w 2015 roku z projektami JavaScript, ale problem staje się coraz poważniejszy.
wspaniały świat
nadal będzie 2 GB w 2017
Geomorillo
Nie naprawiono dla mnie. Wciąż pochłania mnóstwo pamięci dzięki wersji 15.6.6
John81
0

Aby wyłączyć usługi językowe w programie VS Code, przejdź do rozszerzeń, a następnie filtruj według rozszerzeń wbudowanych i wyłącz usługę języka TypeScript / Javascript.

W końcu odkryłem to po tym, jak usługa węzła kodu VS spowodowała awarię mojego serwera około milion razy. Irytujące, że tak trudno było znaleźć dokumentację.

wyłącz wbudowane rozszerzenie usługi językowej ts / js

Ben Olayinka
źródło
0

W moim przypadku bot chciał zabić proces node.js i zrobiłem następujące rzeczy, aby zmniejszyć zużycie procesora przez procesy Node.Js, które działają w programie Visual Studio 2019:

  • Usunąłem folder „Program Files (x86) / MicrosoftSDK / TypeScript
  • biegnę npm rebuild fsevents
  • Wyłączyłem w przeglądarce Chrome: Ustawienia-System-Kontynuuj uruchamianie aplikacji w tle ...

Teraz wydaje mi się dużo lepiej. Ale niestety nie w 100%.

Mam nadzieję, że to też komuś pomoże. Powodzenia chłopaki! :-)

Honza P.
źródło