改善IntelliJ IDEA和Scala插件性能)
IntelliJ IDEA是java編程語言開發(fā)的集成環(huán)境。IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能可以說是超常的。在普通筆記本電腦上成熟IDE是最復(fù)雜的一種應(yīng)用程序。JetBrains官方團(tuán)隊(duì)收到有關(guān) Scala 插件在某些情況下出現(xiàn)延遲或者總體上運(yùn)行緩慢的反饋有時(shí)技術(shù)團(tuán)隊(duì)可以提供一些幫助但另一些時(shí)候比如您的代碼庫龐大復(fù)雜或者機(jī)器較為陳舊時(shí)同樣也無能為力。今天我們將為大家介紹如何手動(dòng)嘗試改善IntelliJ IDEA和 Scala 插件體驗(yàn)例如實(shí)現(xiàn)配置調(diào)整和保持良好的編碼習(xí)慣。首先來看 IntelliJ IDEA 中性能至關(guān)重要的兩個(gè)主要領(lǐng)域創(chuàng)建或打開項(xiàng)目是一個(gè)重要的時(shí)刻這涉及內(nèi)存管理。第二個(gè)與復(fù)雜邏輯有關(guān)當(dāng) Scala 插件試圖識(shí)別并高亮顯示錯(cuò)誤和警告或顯示改進(jìn)代碼的提示時(shí)以及當(dāng)您執(zhí)行 Scala 插件提供的一項(xiàng)操作和自動(dòng)編輯大部分代碼時(shí)CPU 會(huì)高強(qiáng)度運(yùn)行。在這兩種情況下我們都可以通過相似的方式提升性能可以為 IntelliJ IDEA 分配更多資源禁用不使用的檢查改進(jìn)編碼做法禁用一些功能。資源從資源開始這里基本上意味著提供更多內(nèi)存。但是首先建議是啟用內(nèi)存指示器您可以右鍵點(diǎn)擊 IntelliJ IDEA 的底部面板然后在彈出菜單中點(diǎn)擊內(nèi)存指示器。 它會(huì)告訴您???????IntelliJ IDEA實(shí)際使用了多少內(nèi)存讓您按需設(shè)置內(nèi)存大小。如今普通筆記本電腦有 8 GB 或更多 RAM通常足以讓 IntelliJ IDEA、其他應(yīng)用程序和操作系統(tǒng)正常運(yùn)行。檢查 ???????IntelliJ IDEA內(nèi)存消耗后通過打開Help幫助菜單并選擇Edit Custom VM Options編輯自定義 VM 選項(xiàng)來打開 idea.vmoptions 文件將 -Xmx 設(shè)置更改為略大于內(nèi)存指示器顯示的值。 請注意超過一定值后增加 -Xmx 將無法提升性能。 在這里增加到 4 GB 有一些效果之后額外的提升幾乎可以忽略不計(jì)。對(duì)于 Scala 插件如果您決定從 IntelliJ IDEA 中編譯應(yīng)用增加可用內(nèi)存也可能加快編譯速度。 為此請轉(zhuǎn)到Settings | Build, Execution and Deployment | Scala Compiler Server設(shè)置 | 構(gòu)建、執(zhí)行和部署 | Scala 編譯器服務(wù)器并修改 VM 選項(xiàng)。檢查CPU 方面Scala 插件最重要的功能之一也會(huì)使用大量 CPU是它的一組檢查。 檢查是一種邏輯可以檢查代碼尋找特定類型的問題。 有些問題非常簡單比如永遠(yuǎn)不會(huì)被修改而可被替換為不可變值的 private 變量。 其他問題如未使用的 public 字段可能需要很長時(shí)間調(diào)查。如果您感覺部分檢查沒有用處將其禁用可能會(huì)提高高亮顯示速度。可以轉(zhuǎn)到Settings | Editor | Inspections設(shè)置 | 編輯器 | 檢查查看可用檢查列表禁用不需要的檢查。 另外瀏覽設(shè)置也是全面了解 Scala 插件功能的好方法。接下來我們將深入探究 Scala 插件眾多檢查中的 3 個(gè)。 每個(gè)檢查都只是插件邏輯的一小部分對(duì)于不同用戶可能會(huì)產(chǎn)生不同的影響。1. Type check can be replaced by pattern matching類型檢查可被替換為模式匹配這個(gè)檢查會(huì)在一系列 if-else 語句中查找類型檢查和類型轉(zhuǎn)換并建議將其替換為模式匹配。 請注意即使是最復(fù)雜的檢查也有快速路徑來檢查是否不適用于給定代碼段例如當(dāng)其中沒有 isInstanceOf 時(shí)。 但是在某些情況下您可能想要使用像這樣的代碼如果您希望它保持這種狀態(tài)可以考慮禁用檢查。2. Scala 2 syntax can be replaced with Scala 3Scala 2 語法可被替換為 Scala 3只有啟用編譯器選項(xiàng) -Xsource:3 時(shí)這個(gè)檢查才有效。 它會(huì)報(bào)告可被替換為 Scala 3 的 Scala 2 語法。 如果為兼容性使用 -Xsource:3但不需要重寫代碼則可以將其安全禁用。3. Declaration access can be weaker聲明訪問可以更弱和 Unused declaration未使用的聲明檢查對(duì)于代碼中的每個(gè)聲明這兩個(gè)檢查都將嘗試檢查聲明的使用方式。 如果聲明為 public 或 protected第一個(gè)將起作用它將檢查聲明是否確實(shí)在自己的類、特征或?qū)ο蟮淖饔糜蛑馐褂谩H绻皇菣z查將提示可以將聲明設(shè)為 private第二個(gè)適用于每個(gè)聲明 – 它會(huì)遍歷聲明的作用域并檢查它是否被使用。編碼做法Scala 讓我們能夠以簡潔的方式編寫復(fù)雜代碼但這是有代價(jià)的我們留給 IDE 的越多它的性能就越差。 如上所示在許多情況下如果您執(zhí)行嚴(yán)格的編碼做法Scala 插件中的一些檢查可能是不必要的。 事實(shí)上如果是要弄清楚聲明是否未被使用或者變量是否可以為值Scala 插件檢查所做的與我們所做的并沒有太大不同。 我們會(huì)在作用域內(nèi)檢查嘗試找到疑似與此相關(guān)的其他元素會(huì)查找子類、隱式轉(zhuǎn)換等。如果審查者因您代碼的復(fù)雜性而苦惱這可能表明代碼還有改進(jìn)空間使其更易分析。 同樣如果您發(fā)現(xiàn) IntelliJ IDEA 因?yàn)闄z查代碼花費(fèi)了太長時(shí)間而變慢請考慮調(diào)整編碼做法為類、方法和聲明設(shè)置適當(dāng)?shù)脑L問修飾符縮小作用域。不要過度使用類型推斷。限制隱式的使用。在組件上選擇松耦合而不是緊耦合這樣檢查的邏輯就不必遵循過多路徑。在大型項(xiàng)目中考慮將代碼拆分為模塊和子模塊再次限制檢查要覆蓋的范圍。您還可以轉(zhuǎn)到Settings | Languages Frameworks | Scala設(shè)置 | 語言和框架 | Scala中的Performance性能選項(xiàng)卡查看其中的控件并考慮項(xiàng)目的性能是否會(huì)受到這些控件所處理問題的影響。 例如使用很多隱式形參時(shí)弄清楚它們可能需要很長時(shí)間 或者如果使用大文件對(duì)于每個(gè)類和方法在使用代碼示例的注釋中都有一個(gè)文檔條目Scala 插件將嘗試正確高亮顯示它您可以嘗試禁用這些功能以及其他一些功能。功能到目前為止我們談到的所有提示都可能在某些特殊情況下對(duì)您有所幫助。 通常如果機(jī)器足夠好IntelliJ IDEA的性能應(yīng)該還不錯(cuò)。 只有當(dāng)項(xiàng)目要求特別高時(shí)這些提示才會(huì)有用。但可能出于某種原因您必須在舊的、性能較差的電腦上使用IntelliJ IDEA這是還可以嘗試其他操作來改善體驗(yàn)。轉(zhuǎn)到 Settings | Appearance Behavior | Appearance設(shè)置 | 外觀與行為 | 外觀禁用抗鋸齒和平滑滾動(dòng)。 字體將顯得不太光滑滾動(dòng)瀏覽文件內(nèi)容時(shí)也會(huì)感覺不太流暢但這兩種功能都會(huì)對(duì)性能產(chǎn)生一些影響。 如果這還不夠您可以打開 File文件菜單并啟用 Power Save Mode省電模式。 這將關(guān)閉 ???????IntelliJ IDEA 的許多功能所以我建議只在沒有其他幫助的情況下才這樣做。如果這對(duì)您來說過于極端您可以從 JetBrains Marketplace 安裝 Automatic Power Saver 插件。 它可以讓您控制Power Save Mode省電模式何時(shí)自動(dòng)打開和關(guān)閉讓您仍然可以在需要時(shí)使用 IntelliJ IDEA 的復(fù)雜功能。另一種選擇是禁用類型感知注解器 您可以點(diǎn)擊 IntelliJ IDEA 主窗口右下角的小 “[T]” 符號(hào)完成此操作。它會(huì)阻止 Scala 插件檢查代碼中的類型。 注意它不會(huì)禁用所有錯(cuò)誤檢查只禁用那些由于類型不多而導(dǎo)致錯(cuò)誤的檢查例如當(dāng)您嘗試將 String 作為實(shí)參傳遞給接受 Int 的方法時(shí)。