Language-tools: VSCode: Formatter медленно или зависает, если в проекте присутствует jsconfig.json

Созданный на 6 нояб. 2020  ·  19Комментарии  ·  Источник: sveltejs/language-tools

Опишите ошибку
После обновления до 105.4.0 расширения VS Code программа форматирования работает очень медленно или зависает при сохранении файла .svelte, из-за чего мне приходится пропускать форматирование из приглашения VS Code почти каждый раз, когда я сохраняю файл.
В проекте присутствует jsconfig.json , у него есть пара псевдонимов, отображенных в корне моего проекта.

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "#js/*": ["./client_src/js/*"],    
      "#api/*": ["./server_src/api/*", "./client_src/js/api/*"],
      "#api/scripts/*": ["./server_src/scripts/api/*"],
      "#api/webapps/*": ["./server_src/webapps/api/*"],
      "#api/restapps/*": ["./server_src/restapps/api/*"],
    }
  },
  "exclude": ["node_modules"]
}

https://code.visualstudio.com/docs/languages/jsconfig

Если я удалю этот файл, форматтер будет работать должным образом.

Версия 102.3.0 не имеет этой проблемы, я тем временем перешел на эту версию.

Воспроизводить
Добавьте в проект файл jsconfig.json , содержимое не имеет значения.
Я добавил пустой файл jsconfig.json или с пустым объектом, и это приводит к зависанию программы форматирования.

Ожидаемое поведение
Отформатируйте код без зависаний.

Скриншоты
image

Система (пожалуйста, заполните следующую информацию):

  • ОС: Windows 10
  • IDE: VS Code
  • Плагин / Пакет: Svelte для VSCode 102.4.0 102.5.1
question

Все 19 Комментарий

Можете ли вы попробовать добавить include и exclude (https://www.typescriptlang.org/docs/handbook/tsconfig-json.html). Мы исключим node_modules и dist файл по умолчанию, если нет tsconfig или jsconfig.

Может быть, у # 639 есть какие-то плохие побочные эффекты, в данном случае он запускается слишком часто / слишком долго?

Ваш exclude правильный? Я не вижу там чего-то вроде dist , возможно, из-за # 639 папка, в которой создаются файлы (например, dist ), сканируется каждый раз, и файлы добавляются, так как это не исключено.

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

{
  "exclude": ["node_modules", "**/node_modules", "dist"]
}

Это довольно старый и большой проект, в котором функциональность CMS построена как отдельные модули, которые полностью автономны, поэтому все они имеют свою собственную папку node_modules и package.json для обработки зависимостей для этого модуля.
Расширение Svelte выводит это, так что есть пара файлов 😛

SnapshotManager File Statistics:
Project files: 527
Svelte files: 32
From node_modules: 1342

Только что представил Svelte пару месяцев назад, и до сих пор он работает очень хорошо.

527 для меня все еще много. Это действительно большое приложение.

Отмечено, что большая часть сообщенных проблем с производительностью форматирования на самом деле не является проблемой форматирования, а является более общей проблемой производительности. Это просто формирование легче заметить. Вероятно, нам все еще нужно настроить производительность здесь и там.

Думаю, большинство этих файлов взяты из других проектов. Поскольку в корне есть только jsconfig, все загружается, даже если оно не нужно. Я тоже думаю, что мы мало что можем там сделать. Первоначальная загрузка - это, скорее всего, служба TS, считывающая файл конфигурации, а затем сначала сканирующая и загружая все файлы js / ts. Поскольку это синхронно, мы по сути не можем делать что-либо еще.

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

Исключение более глубоких папок node_modules в структуре, похоже, решило мою проблему на данный момент.

Один и тот же файл jsconfig в течение многих лет использовался в проекте без каких-либо проблем, последний раз он редактировался 2 года назад.

Если вам не нужно ссылаться на эту проблему для настройки производительности, мы, вероятно, могли бы закрыть ее.

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

Кажется, это всегда шаг или изменение позади или что-то в этом роде? Сообщения об ошибках довольно непоследовательны.

Мне нужно больше информации о вашем проекте и ситуации, в которой он происходит.

  • это происходит со всеми файлами или только с большими?
  • на что это влияет? Автозаполнение? Диагностика? Все?
  • насколько велик твой проект?
  • вы используете препроцессоры, такие как машинописный текст? Если да, то какие?
  • взгляните на output> Svelte и посмотрите, нет ли там чего-нибудь подозрительного. Там также есть отчеты о статистике файлов каждые несколько минут, не могли бы вы вставить сюда, когда происходит замедление?

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

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

У меня также очень медленное форматирование, но без jsconfig.json.
Вместо этого я использую машинописный текст с tsconfig.json. Посмотрите, как показывает Svelte Output

SnapshotManager File Statistics:
Project files: 15
Svelte files: 71
From node_modules: 473
Total: 567

Я исключаю node_modules в tsconfig, но результат тот же, и я подозреваю, что это причина низкой производительности.
Какие-либо предложения? Спасибо.

Форматирование происходит медленно только при запуске или все время? Если только при запуске - мы мало что можем сделать, все файлы загружаются при запуске, и это на некоторое время блокирует расширение.
Чтобы сузить этот вопрос, мне понадобится минимум воспроизводимых материалов.

Обобщить проблему сложно. Небольшой проект, похоже, не пострадает, по крайней мере, не так сильно. Но мои «большие» проекты ведут себя так:
Форматирование со временем замедляется. Файлы меньшего размера прекрасно работают после запуска Vs Code. Но для некоторых больших файлов (~ 15 импортов других тонких компонентов, 300 LOC) форматирование идет медленно (занимает около 10-15 секунд) с самого начала и только ухудшается. Файлы меньшего размера со временем становятся медленнее, но их трудно воспроизвести.

Что я могу сделать, чтобы получить для вас больше полезной информации? Я не могу отправить вам проект, потому что это какие-то внутренние вещи для заказчика.

Можете ли вы как-нибудь анонимизировать это? Так, например, удалите все внутренние зависимости, извлеките один большой компонент и замените его содержимое на материал lorem ipsum и импортируйте другие компоненты-заполнители. Во время этого процесса извлечения вы также можете обнаружить, что проблема больше не воспроизводится, что помогает сузить круг причин.

Я только что понял, что могло быть причиной, по крайней мере, постоянного отставания в "большом" стройном компоненте:
Это игровая площадка, которая использует файл json в качестве тестовых данных (массив с ~ 3.500 элементами).

import testData from './testData.json';

Есть ли способ игнорировать такие файлы?

@kuechlerm Вы нашли способ игнорировать импорт данных?

@IgorMitev Нет :(

Я предполагаю, что вы установили resolveJsonModule в true в своем tsconfig.json ? Это означает, что TS «импортирует и анализирует этот файл», что является медленным, и его нельзя избежать. Если вместо этого вы установите resolveJsonModule равным false и предоставите объявление d.ts которое говорит TS просто предположить, что любой файл, заканчивающийся на .json в порядке, вот так:

declare module "*.json" {
  const value: any;
  export default value;
}

Тогда файл не анализируется и он должен быть быстрее. Недостатком является то, что у вас больше нет определений типов для модуля JSON, а также TS не выдаст ошибку, если по указанному вами пути нет файла JSON.

@dummdidumm Это был очень хороший совет! Спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги