Phpstorm постоянно индексирует файлы

Обновлено: 07.07.2024

Давайте я тоже поддержу межблоговые дискуссии и отвечу Илье. А ответить есть что.

Уже лет 5 я использую PhpStorm как один из основных инструментов. Как такое могло произойти, если среды разработки — уродские и тормознутые? Давайте разбираться.

Переход на PhpStorm

Раньше я программировал в Notepad++. Вершина его функций — поиск и замена по всем файлам в папке. Казалось, этого вполне достаточно. Мне тоже нравилась скорость работы редактора, и я тоже относился к IDE снисходительно. «Я и так знаю названия функций, нахрена мне тормознутая подсветка синтаксических ошибок в коде?»

Я не помню, что заставило меня скачать PhpStorm. Мне могли понадобиться возможности, которых не было в плагинах к Notepad++. Или я заинтересовался, что же находят в нем люди. Помню только, что он подсвечивал желтым слишком много подозрительных мест в моем коде.

Тем не менее, PhpStorm у меня прижился. Как автор опенсорсного продукта — движка S2 — я получил бесплатную лицензию. С тех пор PhpStorm стал одним из основных моих инструментов.

Миф №1: PhpStorm тормозит

PhpStorm как IDE отличается от текстовых редакторов:

  • индексирует файлы проекта, чтобы потом мгновенно искать по ним, не перебирая каждый раз содержимое;
  • распознает контекст: понимает, где названия функций, где локальные переменные, где пути к файлам и т. д.

PhpStorm как редактор не хуже Notepad++. С той же скоростью появляются буквы и перемещается курсор. Поиск работает мгновенно за счет индексации. Анализ кода работает в фоне и может отставать от курсора. Но в этом большой проблемы нет, потому что сначала программист пишет код, а потом смотрит на подсказки среды разработки.

Миф №2: переименование файла занимает в PhpStorm несколько секунд с прогресс-баром

Зависит от того, что нужно программисту. PhpStorm способен искать вхождения старого названия файла по всему проекту и по контексту определять, нужно ли это название изменить. Альтернатива в обычных редакторах — поиск и замена по всем файлам — занимает несколько минут рутинной работы. Экономия времени на два порядка.

Поиск старого названия файла можно отключить прямо в окне переименования. Тогда файл переименовывается мгновенно.


Миф №3: PhpStorm «устанавливать и настраивать год»

Установка проходит не сложнее установки любых других программ. Первоначальной настройки PhpStorm не требует. Может открыть любую папку как проект без предварительных вопросов.

Настройку дополнительных инструментов делаете тогда, когда они вам понадобятся:

  • путь к git.exe для работы с гитом;
  • доступ к БД, чтобы делать запросы из среды разработки;
  • доступ на сервер по SSH/FTP для загрузки файлов проекта.

Пошаговая отладка через Xdebug настраивается сложнее самой природы . Но если не хотите пользоваться пошаговой отладкой с просмотром значений переменных по всему стеку вызовов, отлаживайте , никто не запрещает :)

Миф №4: PhpStorm «выглядит как говно»

Вкусовщина, конечно. Нормально он выглядит. Внешний вид работать не мешает. Чтобы не приводить зря громадный скриншот, покажу заодно «git blame»:


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

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

А в остальном все замечательно, все есть, что нужно универсалу в наше время - JS, jQuery, PHP, HTML, CSS и т.д.
Недавно окончательно решил покончить либо с этой проблемой, либо с этим редактором, ну и как всегда, собрался с мыслями.

1. Отключаем неиспользуемые плагины в PHPStorm

Заходим в File > Settings > Plugins и отключаем все лишние плагины, которые вредят нашей продуктивности и часто портят настроение.

Ускоряем PhpStorm 8

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

PhpStorm 8 плагины

Плагины, которые включены у меня:

2. Отключаем Spelling в PhpStorm

Также, для ускорения работы PhpStorm можете отключить надоедливый Spelling (проверку правописания):

Spelling PhpStorm 8

Заходим в File > Settings > Editor > Inspections и отключаем Spelling.

3. Увеличиваем предел потребляемой памяти в PhpStorm

Включаем в настройках Show memory Indicator

Сохраняем настройки и смотрим справа внизу появится индикатор потребляемой памяти

Вот тут видим сколько ест программа памяти, у меня открыто 20 файлов, загружен проект Битрикс редакция Бизнес.

Проблема тут в том, что по умолчанию в PHPStorm задан лимит на 512Мб памяти, соответственно, когда у меня в среднем открыто 20-30 файлов, то работать в нем невозможно, не хватает ему памяти, в 8 версии еще было нормально, редко подвисал, но в 9 что-то совсем-совсем плохо стало.

Ну, а раз памяти не хватает, пробуем ее добавить, в 9 версии все работает. Находим папку, куда установлена программа, у меня такой путь:

Тут вам нужен какой-то из двух конфигов, их там два, если не знаете, какой используете, все по умолчанию, то 100% 32-битная версия.

PhpStorm.exe.vmoptions - Если вы используете 32-битную версию PHPStorm
PhpStorm64.exe.vmoptions - Если вы используете 64-битную версию PHPStorm

Открываем файл в любом редакторе или блокноте, тут необходимо в параметре -Xmx1024m увеличить значение, например до 1024Мб.

Cохраняем файл, перезагружаем PHPStorm и наслаждаемся скоростью работы.

Иногда даже с 1Gb памяти программа не запускалась, если чуть-чуть уменьшить, например до 980Mb, то без проблем работает, если что, немного уменьшите.

4. Исключаем из индекса ненужные папки, модули, классы

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

Исключаем из индекса ненужные папки, модули, классы

Минут 20-40 один раз потратите и каждый день будете наслаждаться замечательной, и лучшей на мой взгляд IDE для работы с проектами, не только на PHP.


Обратите внимание еще на один момент, например, модули и некоторые js-либы я не исключил из индексации, ну чтобы автокомплит и поиск работал по ним, это понятно, а вот например, внутри модуля /bitrix/modules/api.auth/ есть папка /install , она исключена из индекса, так у меня сделано во всех модулях, в ней есть инсталлятор, который может хранить в себе копии компонентов, плагинов, php-классов и т.д. для установки, а когда PhpStorm видит два одинаковых класса автокомплит у этого класса пропадает, он желтой волнистой линией подчеркивает такой класс и пишет что-то типа Duplicated class found

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

upd. 06.12.2017

Универсальный способ, чтобы вручную не убирать все папки install и т.п. из индекса, можно поиграться с исключениями внизу в поле Exclude files , тут исключаем все файлы логи, map.js, css, текстовые, архивы, картинки, шрифты и все папки install .

А вот, что вручную я исключал будет в панели справа, это папки с кэшами, бэкапы, временные, обновления, загрузка файлов и т.д., все что по ПКМ -> Mark Directory as -> Excluded


Мой пример исключений, просто вставьте и нажмите Apply, все исключения в дереве проекта слева станут желто-оранжевыми

5. Подключение Bootstrap в PhpStorm

Если все css и js исключить глобально, тогда, например, подключенный в шаблоне сайта Bootstrap не будет в автокомплите, только в том файле, где подключали локально.

В этом случае все сторонние библиотеки можно подключить в Include Path

Для этого я содержу специальную папку и добавляю ее сюда, где плюсик справа.


Содержимое этой папки


Все, после подключения Bootstrap 4 в PhpStorm он будет видеть его глобально по всему проекту, автокомплит классов Bootstrap 4 будет работать везде.


Если зажать клавишу Ctrl и кликнуть мышью по классу btn , то PhpStorm откроет подключенный мной файл bootstrap.css


upd. 12.02.2020

Давно не работал с бутстрапом, тут понадобилось свой фреймворк и бутстрап подключить, а оказывается фича выше подключение Bootstrap 4 через Include Path в PhpStorm больше не работает, а это увы печально и очень плохо, было так удобно, открываешь любой проект, любой кусок когда и везде работал автокомплит, сейчас же осталось два не очень неудобных способа:

  1. Подключение css в самом html-шаблоне в теге <head>
  2. Подключение css и js с помощью метки ПКМ по папке -> Mark Directory As ->Resource Root

Вот так это будет выглядеть, css и js папки должны подсвечиваться сиреневым цветом



Автокомплит css и js везде в коде заработает



Теперь и PhpStorm летает и ничего лишнего в автокомплите.

Но такой способ глобального отключения css и js не всегда подходит, на проекте, где я разрабатываю свои модули и фреймворк, там по папкам все раскидано, пока приходится вручную убирать все css и js Битрикса, уверен, выход есть, что-нибудь еще придумаю.

В PhpStorm 2018.1.6 у меня есть каталог x , который я исключил с помощью Settings | Directories -> Exclude directory x . PhpStorm заботится о большинстве каталогов, которые я исключил, но не об этом. Пока я редактирую / создаю PHP-тесты, PhpStorm постоянно индексирует этот каталог.

enter image description here

Каталог x является частью импортированного проекта.

Есть ли причина, по которой PhpStorm может исключить исключенный каталог и также индексировать его? Процесс индексации длится вечно.

enter image description here

По совпадению я только что попробовал это, но, к сожалению, это не помогает.

Какой смысл добавлять этот каталог через символическую ссылку? Это было добавлено в Настройки | Языки и фреймворки | PHP> Включить путь?

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

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

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

Итак, каталог x исключен, но есть x/y , который добавлен в путь включения? А PhpStorm индексирует весь x со всеми подпапками? Есть ли в других местах какие-либо символические ссылки, указывающие на x ?

У меня есть каталог x , который является дочерним по отношению к каталогу y , который добавлен в путь включения. Таким образом, исключенный каталог x находится внутри этого включаемого каталога. Это действительно то, что делает PhpStorm. Нет, нет никаких символических ссылок, указывающих на каталог x .

Ответы 1

Что стоит попробовать (от команды Jetbrain):

Снимите флажок «Добавить пакеты как библиотеки» на Preferences | Languages & Frameworks | PHP | Composer (нажмите ОК, чтобы сохранить).

Убедитесь, что эти исключенные каталоги не добавлены впоследствии как include path в Preferences | Languages & Frameworks | PHP .

Тест с пересборкой кеша File | Invalidate Caches / Restart.

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

У меня возникла эта проблема после обновления до 2019.1; второй намек решил это для меня: там был указан корень проекта. Не знаю, как / почему эта запись была там и почему она работала в предыдущих версиях.

phpstorm-git

Если вы еще не работаете с Git в PhpStorm, но хотите начать, то вот статья, которая может быть полезной: Работа с Git в PhpStorm (JetBrains). Если уже начали, то вы знаете, что по умолчанию PhpStorm показывает только изменённые или добавленные файлы, не подсвечивая при этом, родительскую папку. Вот несколько способов улучшить процесс.

Просмотр измененных файлов в зоне Version Control

PhpStorm показывает дерево измененных/добавленных файлов в окне Version Control. Там же можно увидеть изменения внутри конкретного файла. Окно можно найти на нижней панели, предварительно включив: View->Tool buttons. Кнопка будет отображаться при условии, что вы используете какую-либо систему контроля версий.

В этом окне можно выполнять другие действия, относящиеся к Git:

  • создавать change-листы (Что такое changelist? англ. );
  • разносить файлы по change-листам drag&drop'ом;
  • видеть файлы, которые не были добавлены в гит или удалены;
  • делать commit; изменений;
  • создавать патчи из измененных файлов;
  • и другое.

Подсветка дерева

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

Следующий способ - подсветка в дереве: ползём в Setting->Version control. Находим параметр "Show directories with changed descendants" и активируем его.

Иногда после активации этого параметра и сохранения настроек ничего не происходит. По ощущениям это выглядит как будто не сработал триггер "Эй, а ну-ка перезагрузи дерево". Для исправления нужно перезагрузить программу.

phpstrom-menu-file

phpstrom-version-control-settings

Разделение по скопам

Третий способ чуть хитрее. Он заключается в использовании, так называемых, скопов (Scopes) или областей. При использовании системы контроля версий, PhpStorm любезно создает для нас скоп "Changed files". Его можно найти в селекте над деревом файлов.

phpstorm-scopes

phpstorm-scopes-settings

Также вы можете создавать свои скопы.

Постскриптум

Для повышения навыка работы с PhpStorm посмотрите как делать Rebase в PhpStorm.


Или зарегистрируйтесь через социальные сети:


Верстка, HTML и CSS.

  • Быстрый старт в HTML для начинающих.
  • Фундамент CSS. Значения.
  • Блочная и строчная модель CSS.
  • Основы позиционирования элементов. CSS.
  • CSS. Работа с основными свойствами.
  • Фундамент CSS. Основы и выборка элементов (селекторы).
  • Позиционирование на Flexbox в CSS.
  • Верстка адаптивной шапки (header) сайта с нуля.
  • Ускоренная верстка веб-страниц с помощью фреймворка Bulma.
  • Работа с медиа-запросами в CSS.
  • Разное. Верстка, HTML и CSS.
  • Вводный курс Javascript.
  • Javascript. Работаем с HTML и CSS (DOM).
  • Javascript. Работа с событиями.
  • Библиотека. React dnd. Drag and drop.
  • Философия React для начинающих.
  • Разработка расширений для Google Chrome
  • Как создать заготовку для расширения Google (файл манифеста)

Веб-сервер. Базы данных. Backend.

  • Язык программирования PHP. Основы.
  • Объектно-ориентированное программирование на PHP.
  • Основы языка SQL.
  • Локальные хранилища браузеров.
  • Firebase. Realtime database. Работа на PHP.
  • Базы данных
  • API. Основы работы.
  • Composer.
  • Веб-сервер Apache.
  • Разное
  • Задачник. Массивы PHP. Попробуйте свои силы.
  • Быстрый старт в Symfony.
  • Шаблонизатор Twig в Symfony.
  • Symfony. Работа с базой данных. Основы.
  • Symfony. Работа с базой данных. Связи.
  • Symfony. Работа с переменными окружения.
  • Наследование сущностей Doctrine (на примере Symfony)
  • Symfony. Работа с сервисами.
  • Symfony 5. Аутентификация пользователей через login форму.
  • Особенности аутентификации Symfony 5.3, 6.
  • Symfony. Создание API-платформы.
  • Основы работы с файлами в Symfony на примере загрузки изображений.
  • Обновление Symfony 4 до Symfony 4.4 и 5. Рецепты. Работа с Git.
  • Работа с бандлом Doctrine Extensions.
  • Symfony. Работа с формами.
  • Админка на EasyAdmin в Symfony
  • Query Builder
  • Docker для Symfony
  • Deploy. Symfony.

Техническая сторона веб-аналитики сайтов.

  • Яндекс Метрика для начинающих. Основы.
  • Яндекс.Метрика. Работа с целями.
  • Инструкция. Как перенести расходы из Яндекс Директ в Яндекс Метрику.
  • Google Tag Manager.
  • Google Data Studio
  • Электронная коммерция (торговля). Ecommerce.
  • Пиксель. Facebook.
  • Google Analytics. Работа с целями и событиями.
  • Разное
  • Основы работы с Wordpress
  • Дочерние темы Wordpress. Правки, которые сохраняются при обновлении.
  • Иерархия шаблонов Wordpress
  • Минимальная тема Wordpress своими руками.
  • Произвольные поля Wordpress.
  • Wordpress. Работа с базой данных.
  • Шорткоды (shortcodes) Wordpress.
  • Wordpress. Разное.

SEO и продвижение сайтов.

  • Полезные инструменты для веб-разработчиков
  • Git. Система контроля версий.
  • Текстовый редактор vi (vim).
  • Командная строка unix-подобных систем
  • Операционные системы для веб-разработчика.
  • Gulp
  • GitHub
  • Плагин Emmet
  • PhpStorm
  • Консоль браузера. Эффективная работа.
  • Основы Docker для веб-программистов.

Google Apps Script

Здравствуйте. Меня зовут Дмитрий Ченгаев.

Я занимаюсь веб-разработкой и веб-программированием. Этот сайт, своего рода, обучающий центр, на котором я публикую свой опыт, уроки и знания в сферах работы с такими технологиями как:

[+] HTML
[+] CSS
[+] PHP
[+] Верстка сайтов
[+] Javascript
[+] других инструментах, которые помогают решать задачи веб-разработки проще и быстрее.

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

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

Читайте также: