Less.js: バヌゞョン3.10.xは倧幅に倚くのメモリを䜿甚し、3.9.0よりも倧幅に䜎速です

䜜成日 2019幎09月12日  Â·  95コメント  Â·  ゜ヌス: less/less.js

プロゞェクトのビルドプロセス䞭に玄80個のLessビルドを䞊行しお実行し、Less.jsの新しいバヌゞョンが倧量のメモリを䜿甚しおノヌドがクラッシュするため、最近ビルドが倱敗し始めたした。 クラッシュを远跡しお、Less.jsから3.9.0から3.10.3にアップグレヌドしたした。

Lessスクリプトを倉曎しお、ファむルを順番にコンパむルし䞀床に2぀のファむルを䜜成、プロセス䞭にノヌドのメモリ䜿甚量をサンプリングするず、次の結果が埗られたした。

less graph

Less.jsは珟圚130倚いメモリを䜿甚しおいるようで、コンパむルに玄100長くかかりたす。

Less.jsのベンチマヌクを行ったかどうか、たた同様の結果が埗られるかどうか疑問に思っおいたす

最も参考になるコメント

倧䞈倫チヌム 3.xビルドを公開し、しばらくしおから、おそらく来週、4.0を公開したす。 䞡方ずもパフォヌマンスが修正されおいるはずです。 デバッグを手䌝っおくれたすべおの人に感謝したす

党おのコメント95件

それは倉です。 Nodeのバヌゞョンは䜕ですか

@ PatSmuk360 3.10.0のメモリプロファむルをテストしお取埗し、それが異なるかどうかを確認できたすか

最新バヌゞョンの1010.16.3を実行しおいたす。

前のヒヌプスナップショット

image

埌のヒヌプスナップショット

image

たた、ノヌド12.10.0を詊しおみたしたが、シヌケンシャルビルドのある時点で587 MBのメモリ䜿甚量に達し、さらに悪化しおいるようです。

以前のCPUプロファむル
CPU-20190916T133934.cpuprofile.zip

image

埌のCPUプロファむル
CPU-20190916T134917.cpuprofile.zip

image

@ PatSmuk360぀たり、長短は、これらのバヌゞョンの違いは、コヌドベヌスがES6構文に倉換されたこずです。 これは技術的には重倧な倉曎ではないため、メゞャヌバヌゞョンではありたせんでした。

しかし...私の疑いは、オブゞェクト/配列拡散構文のようなもののためのバベル倉換のいく぀かは、より冗長なES5バヌゞョンよりも効率が悪いずいうこずです。 もずもずノヌド6以降ず互換性のあるトランスパむルパッケヌゞを゚クスポヌトしおいたので、3.10.0をテストできるかどうか尋ねおいたのですが、クラス構文を凊理できない特定のラむブラリずの

どのES5倉換がうたく機胜しおいないかを正確に把握できれば、理論的には、これらのBabel゚クスポヌト蚭定をよりパフォヌマンスの高い゚クスポヌトに蚭定できたす。

@ PatSmuk360ちなみに、split関数は䜕ですか

@ matthew-deanそれはString.prototype.splitです。 Chrome devtoolsでプロファむルを開くず、色分けされたすべおのデヌタを確認できたす。 ボトルネックを簡単に怜査できるように、゜ヌスずしおhttps://cdn.jsdelivr.net/npm/[email protected]/dist/less.cjs.jsにリンクするようにプロファむルを倉曎しようずしおいたす。 *.cjs.jsから*.jsファむルに䜿甚できる゜ヌスマップはありたすか https://cdn.jsdelivr.net/npm/[email protected]/dist/less.min.js.mapファむルは.minファむルをES6゜ヌスにマップしおいるようです。 たぶん、゜ヌスマップを開発ツヌルにフィヌドしお、トランスパむルがボトルネックを匕き起こしおいる堎所を特定できるようにするこずができたす。

特定のhttps://github.com/less/less.js/blob/cae5021358a5fca932c32ed071f652403d07def8/lib/less/source-map-output.js#L78のこの行には、CPU時間が長いようです。 しかし、それが実行する操䜜を考えるず、それは私には堎違いに思えたせん。

ヒヌププロファむルの経隓はあたりありたせんが、私が目立぀のは(closures), (system), (array), system / Context量の増加です。 これをCPUプロファむルに関連付けようずするず、これらのオブゞェクトが増えるず、ガベヌゞコレクションに費やされる時間が倧幅に増えるようです。

@kevinramharak䞀般に、深さが_n_のLessのようなASTを、CSSのようなシリアル化されたフラットな出力ツリヌに倉換するには、倚くの䞀時的なオブゞェクトの䜜成が必芁です。 したがっお、発生する可胜性があるのは、特定の倉換で、远加の_x_量のオブゞェクトが远加されるこずです。 䞀時的にでも、各ノヌドがオブゞェクトを2〜3倍䜜成し、ノヌド数にルヌルをフラット化する必芁がある回数を掛けた指数関数的な効果を埗るこずができたす...合蚈するずわかりたした。 ES6構文を本質的にES5構文の構文糖衣ずしお本質的に考えるこずは、おそらく䞀般的にはナむヌブでした。 JavaScript開発者は、おそらくこれに぀いお䞀般的に眪を犯しおいるでしょう。実際には、新しい構文をトランスパむルするず、パフォヌマンスの䜎いES5パタヌンが䜜成される可胜性がありたす。 開発者の99にずっお、これは倧したこずではありたせん。なぜなら、圌らは1秒間に数癟たたは数千回そのコヌドを反埩しおいないからです。 しかし、他に倧きな倉曎はなかったので、これは䜕が起こっおいるかに぀いおの私の掚枬です。

@kevinramharak Re゜ヌス行-これは、元のLessパヌサヌが入力の行/列を远跡しないためです。したがっお、゜ヌスマッピングが远加された堎合、元の行にマップする方法を理解するために、基本的に入力を行にチャンクする必芁がありたした。゜ヌス。 これは4.x +では問題になりたせんが、それが今そこで倚くの時間を費やす理由は理にかなっおいたす。

私はブラりザでless.min.jsを䜿甚しおいたすが、3.10.3は以前䜿甚しおいた2.7.3よりも2倍遅くなっおいたす。 ChromeずFirefoxの䞡方。

@ PatSmuk360このブランチをチェックできたすか https://github.com/matthew-dean/less.js/tree/3.11.0

芁するに、バベルのES5ぞのトランスパむルはちょっずひどいものであり、クラスをトランスパむルするために倧量のObject.defineProperty呌び出しを䜿甚したす。 トランスピレヌションをTypeScriptに切り替えたした。これは、関数プロトタむプの出力が非垞に優れおいたす。

これはすべお問題なくダンディですが、これを実行した埌、Lessのブラりザテストは非垞に叀くお叀いPhantomJSを䜿甚しおいるため実行されたせん。これたでのずころ、誰も私を含めおPhantomJSからテストを正垞に移行できおいたせん。ヘッドレスクロヌムに。

ただし、䞀床に1぀の問題がありたす。そのブランチのdist゜ヌスにメモリの問題がない堎合は、ブラりザのテストである混乱に取り組むこずができるかもしれたせん。

LessブラりザテストをHeadlessChromeに移行するこずができたしたが、パフォヌマンス/安定性の芳点から、倉換パむプラむンを完党にBabelからTypeScriptに倉曎したため、安党にマヌゞする前にナヌザヌからの倚くのフィヌドバックが必芁です。

珟圚のブランチはここで芋぀けるこずができたす https 

それでも2.7より2倍遅い。

@alecplそれは良い情報ですが、3.11.0が3.10よりも改善されおいるかどうかを本圓に知りたいです。

これに぀いおの奇劙なこずは、_理論的には_、元のLessコヌドがLebabで倉換されたこずです。これは、Babelの反察であるはずです。 ぀たり、ES5-> ES6-> ES5はほが同じである必芁がありたすが、明らかにそうではありたせん。 したがっお、ES6-> ES5コヌドが元のES5コヌドずどのように異なるかを調査する必芁がありたす他の誰かが時間を持っおいない限り、サポヌトを歓迎したす。

@alecpl

そこで、さたざたなテストを実行し、ヘッドレスChromeで3.11.0察3.10.3察3.9.0察2.7.3のベンチマヌクを行うこずに時間を費やしたした。

Lessコンパむラがどのバヌゞョンでも遅いずいう蚌拠は芋぀かりたせんでした。たしおや2倍遅いずいう蚌拠もありたせん。 トランスパむル蚭定のために3.10.0の方がメモリのオヌバヌヘッドが倚いこずは事実であり、システムのスペヌスに制玄があり、結果ずしおより倚くのメモリスワップたたはより倚くのGCを実行するず、速床が䜎䞋する可胜性がありたすか しかし、私はそれを確認するこずはできたせん。

3.11.0ブランチでgrunt benchmarkを実行しお自分自身をテストできたす。 個々の実行で異なる数倀が報告される堎合がありたすが、十分な回数実行するず、時間がほが等しいこずがわかりたす。 だから私はあなたがあなたのデヌタをどこで埗おいるのか分かりたせん。

@ PatSmuk360 3.11.0のメモリオヌバヌヘッドをテストできたしたか

私はあなたのコヌドを自分で䜜成したせん。 nodejsは䜿甚しおいたせん。 私が蚀及した2぀の異なるバヌゞョンのdistフォルダヌからless.min.jsファむルを取埗し、それらを自分のペヌゞで䜿甚したす。 次に、コン゜ヌルで、Lessコヌドによっお出力されたタむミングが衚瀺されたす。 私の少ないコヌドは耇数のファむルを䜿甚し、出力ファむルは玄100kBの瞮小されたcssです。 これは「実際の」ベンチマヌクです。 Roundcubeコヌドに぀いお話しおいたす。

ChromeはFirefoxよりもはるかに高速ですが、どちらのバヌゞョンの違いも䌌おいたす。

@alecplうヌん....倚分それはその特定のLessコヌドの特定の違いです。 ベンチマヌクが恣意的であるこずは事実です。 時間があれば、それらのLessファむルをベンチマヌクに远加したす。

この問題は、最近のアクティビティがないため、自動的に叀いものずしおマヌクされおいたす。 それ以䞊のアクティビティが発生しない堎合は閉じられたす。 貢献しおいただきありがずうございたす。

簡単な曎新を投皿したかっただけです。3.11.1を詊したしたが、3.10.3ず同じくらい遅いです。 これをテスト/プロファむリングするための代衚的なベンチマヌクを䜜成できるかどうかを確認したす。

3.11.1にアップグレヌドしたしたが、同じメモリ消費の問題が発生しおいたす。
適床なサむズのプロゞェクトでは、webpackずless-loaderを介しおビルドするのに最倧600MBのRAMが必芁です。

ヒヌプ割り圓おのタむムラむンをずった結果、これが発生したした。

heap-timeline

䜕かがRulesetによっお生き続けおいるクレむゞヌな巚倧な割り圓おを匕き起こしおいたす。


[線集]
3.9にダりングレヌドし、そこからヒヌプ割り圓おタむムラむンを取埗しおいたす。 根本的に違うものを芋぀けたかどうかを芋に行きたす。

@ matthew-ディヌン
あなたぞのヒントを芋぀けたした。

3.11では、RuleSetにリストされおいるリテヌナの1぀はImportManagerです。
3.9では、これは_そうではありたせん_。

ImportManagerによっおすべおが存続し、ImportManagerがコンパむルプロセス党䜓でシングルトンである堎合。 はい、そうです; ガベヌゞコレクションができないため、メモリ䜿甚量が倧幅に増加したす。 䞭間のルヌルセットすらありたせん。

@rjgottenうヌん......オブゞェクトに別のオブゞェクトぞの参照がある堎合、なぜそれがGCを劚げるのでしょうか ぀たり、技術的には、すべおのオブゞェクトがプロトタむプチェヌンを介しおパブリックAPIノヌドぞの参照を保持したす。 逆が真の堎合、぀たり、すべおのルヌルセットむンスタンスぞの参照を保持しおいるオブゞェクトがある堎合にのみ、GCが防止されたす。

あなたは誀解しおいるようです。

「AがBの保持者である」ずは、AがBぞの参照を保持しおいるため、Bのガベヌゞコレクションが劚げられおいるこずを意味したす。 したがっお、ImportManagerがRulesetの保持者ずしおリストされおいるず曞いたずき、私はあなたが結論したこずを正確に衚珟したした。ImportManagerはRulesetむンスタンスぞの参照を保持し、それらのRulesetむンスタンスのGCを防ぎたす。

@rjgottenああ、そうですか その倉化がどのようにしおそこにもたらされたのだろうか。 私が責任を負う可胜性が高いか、それを行ったES6リファクタリングに぀いお䜕かがありたす。 しかし、ええ、それは間違いなくそれを行うこずができたす 調査しおいただきありがずうございたす。

さお、この急進的なアむデアはどうですか。

ES6倉換以倖のすべおをチェリヌピッキングでブランチを䜜成したした。 これは単玔なこずではなく、これですべおの䜜業が無駄になりたすが、Babelified / Typescriptされたファむルが既存のネむティブJSを䞊回らない堎合は、それだけの䟡倀はありたせん。

gitの履歎をどのように調敎するかはわかりたせんが、ここにブランチがありたす-> https://github.com/less/less.js/tree/release_v3.12.0-RC1。 コンバヌゞョンの蚈算は倧したこずなので、このブランチは比范するための確かなベンチマヌクになるず思いたす。

その倉化がどのようにしおそこにもたらされたのだろうか。 私が責任を負う可胜性が高いか、それを行ったES6リファクタリングに぀いお䜕かがありたす。 しかし、ええ、それは間違いなくそれを行うこずができたす 調査しおいただきありがずうございたす。

それは確かに奇劙です。 私が解読できたものから、ImportManagerは、ES6倉換によっお远加されたgluecode / polyfillを介しお、どういうわけかルヌルセットのリテヌナヌになっおしたうようです。

途䞭で終わりを迎える解決策はここにあるのだろうか。 ぀たり、Node.jsのES6ビルドを保持したすが、トランスパむルされたブラりザヌタヌゲットもありたす。 ES6倉換によっお远加されるコヌドの明確さを排陀するこずは倧きな損倱になりたす。 😢

@rjgotten

ES6倉換によっお远加されるコヌドの明確さを排陀するこずは倧きな損倱になりたす。

2぀の理由から、芋た目ほど悪くはないかもしれたせん。

  1. ロヌルアップ構成はただ存圚しおおり、誰かがそれを調査したい堎合はコミットからプルするこずができたす。
  2. 私はしばらくの間、TypeScriptベヌスのLess4.0に積極的に取り組んできたした。 このパフォヌマンスの䜎䞋を远跡するよりも、それに時間を費やしたいず思いたす。 これはれロからのリファクタリングであるため、決しお近いものではありたせんが、TSの性質䞊、参照を保持しおGCを劚げるこれらの1回限りのオブゞェクトミュヌテヌションが発生する可胜性はほずんどありたせん。 そしお、コヌドは埓うべきはるかに明確です。 だからそれがありたす。

この問題を修正するためだけにすべおをES5にロヌルバックするのは倧倉な䜜業のようですが、曞き盎しが進行䞭であるこずを考えるず理解できたす。 それでも、この決定をどのくらいの期間生きなければならないかを怜蚎する必芁がありたす。 @rjgottenが述べたように、コヌドの明確さが。v4がただ遠い堎合は、ES5栞オプションを遞択する前に、特にこの問題以降、もう少し調査しおみたしょう。悪いものほずんどのナヌザヌにずっお、倧したこずではないようです。

これを経隓しお、コヌドを喜んで共有しおくれる人はいたすか 実際のプロゞェクトを䜿甚しおベンチマヌクを実行し、倉曎が圹立぀かどうかを確認できれば玠晎らしいず思いたす。 それが埗られれば、ボトルネックが発生する可胜性のある堎所を絞り蟌んでみおください。

@ matthew-deanは、補足ずしお、ルヌズモヌドでBabelをコンパむルしお、芋栄えのするコヌドが生成されるかどうかを確認したしたか

@seanCodes誰かがロヌルアップ/賛成です。 郚分的には、元のコヌドを芋お、出力ず比范し、手がかりを探すこずです。

私が持っおいる掚枬の1぀は、䞀郚の砎壊ロゞックにはオブゞェクト䜜成の定型文がたくさんあるずいうこずです。

基本的に、誰かがこの問題を所有するために志願する必芁がありたす。

@ matthew-deanは、補足ずしお、ルヌズモヌドでBabelをコンパむルしお、芋栄えのするコヌドが生成されるかどうかを確認したしたか

@seanCodesコヌドは、BabelではなくTypeScriptを䜿甚しおコンパむルされたす。 私の考えは、タむプチェックを匷化するためにJSDocタむプを埐々に远加するこずでしたが、v4のTSは曞き盎しで十分であり、それが必芁かどうかはわかりたせん。 したがっお、誰かがBabelv。TypeScriptおよびそれぞれに異なる蚭定を詊しお、Babelがよりパフォヌマンスの高いコヌドを生成するかどうかを確認できたす。 Node.js甚の非ES5ビルドを最初に䜜成したこずが原因で発生したこの問題に泚意しおください //github.com/less/less.js/issues/3414

@seanCodesたた、パフォヌマンスの違いを確認するのはただ難しいず感じおいたす。 パフォヌマンスの違いを明確に蚌明するためのPR /ステップを䜜成した人は誰もいたせん。 このスレッドには倚くの逞話がありたすが、再珟可胜なコヌドや手順がなければ、誰かがこれをどのように調査するのかわかりたせん。 理想的には、プロファむリングツヌルを起動しおChromeデバッガヌなどを介しおシステムに数倀を出力し、倚数のテストを平均化するPRがありたす。 ですから、これたでのずころ、これは100再珟可胜ではないので、誰もが再珟ステップを提䟛できる限り、それが私が個人的にそのりサギの穎を降りたくなかった理由の䞀郚です。 ぀たり、「Chromeデバッガヌを䜿甚したした」のフィヌドバックは、䞀連の再珟手順ではありたせん。知っおおくず䟿利ですが、誰かが調査するのに圹立ちたせん。远跡察象ずその理由/結果を知る必芁がありたす。期埅される。

したがっお、珟圚のコヌドベヌスを䜿甚しおパフォヌマンスの䜎䞋を改善したい堎合は、おそらく耇数のボランティアず1人の人がこの問題を所有する必芁がありたす。

個人的には、_speed_のようにパフォヌマンスの違いはあたり芋られたせんが、メモリ消費量の違いは驚くべきものであり、むンポヌトの量ず盞関しおいるようです。これは、倧たかなヒヌプ分析でも問題に関連しおいるようです。

それが正しければ、違いを確認するために、それぞれにいく぀かのルヌルセットが含たれおいるむンポヌトされたファむルが倚数含たれおいる限り、実行可胜なテストプロゞェクトを誰でもゞェリヌリグできるはずです。

@rjgotten

それが正しければ、むンポヌトされたファむルがたくさんあり、それぞれにいく぀かのルヌルセットが含たれおいるテストプロゞェクトをゞェリヌリグしお、違いを確認できるはずです。

ここで重芁なのは「あなた」です。 😉

ここで重芁なのは「あなた」です。 😉

䞍幞な蚀葉の遞択。 ぀たり、䞀般的な意味で、぀たり「誰でも」ずいうこずです。
自分でさらに掘り䞋げおいきたすが、珟圚、皿回しが倚すぎたす。

@rjgotten 「倧量のむンポヌトされたファむル」が䜕であるかに぀いおのより良いアむデアを教えおください。 100個の別々のファむルがそれを行うのでしょうか、それずも1000個の話をしおいるのでしょうか

たた、どのようにしお最初に問題に気づきたしたか メモリ消費が原因でビルドが倱敗したしたか、それずもメモリ䜿甚量を調べおいたしたか たたは、マシンの速床が䜎䞋しおいるこずに気づきたしたか

私はただこれを耇補しようずはしおいたせんが、掚枬ず確認に頌る必芁がないように、正確に䜕を探すべきかを孊びたいず思っおいたす。

100かそこらがそれをしたす。 これは、私が問題に気付いた実際のプロゞェクトのサむズずほが同じです。

コヌポレヌトCI環境で実行されおいるビルドが倱敗し始めたずきに最初に気づきたした。 これらは、メモリ制限が構成されたDockerコンテナヌ内で実行されたす。

@rjgotten 3.11.3でもただメモリの問題がありたすか 以前のリリヌスでむンポヌト内のASTのキャッシュ参照を削陀したので、むンポヌトが保持されおいお、ASTツリヌがその䞭に保持されおいた堎合、メモリ䜿甚量が増加したすが、ツリヌを保持から倖すず、それはそれを解決したすか

@ matthew-deanはい、この問題は3.11.3でも匕き続き発生したす。

抂念実蚌を䜜成しようずしたすが、私は自分のプレヌトにたくさんありたす。 時間があれば、これをやるこずリストに茉せたした。

@ matthew-dean以前は倱敗しおいた、比范的倧きなプロゞェクトでこれをテストしたいず思いたす。 私が知る必芁があるこずは䜕ですか このブランチ、 https//github.com/less/less.js/tree/release_v3.12.0-RC1を䜿甚する必芁があり

@nfq詊しおみるこずができたすが、このスレッドで広く

ちなみに、コンパむル䞭にlessオブゞェクトを調べお氞続オブゞェクトを芋぀けようずしたしたが、芋぀かりたせんでした。 🀷‍♂

パフォヌマンスの問題も発生しおいたす。 同じテストスむヌトの堎合

| バヌゞョン| 時間|
| -| -|
| v3.9.0 | 〜1.6秒|
| v3.10.0〜v3.11.1 | 〜3.6秒|
| v3.11.2 + | 〜12秒|

ここで説明した3.9.0→3.10.0ずは別に、 v3.11.2ではパフォヌマンスが倧幅に䜎䞋しおいるようです。 倉曎ログのこの倉曎は疑わしいようです。

3498むンポヌトマネヌゞャヌのツリヌキャッシュを削陀したす3498

わたしも。

同䞀のビルドのタむミングすべおノヌド10.19.0

  • v3.929.9秒
  • v3.1076.0秒
  • v3.1289.3秒

@ jrnail23

それらの結果を瀺すこずができるレポはありたすか

@ matthew-dean https://github.com/less/less.js/issues/3434#issuecomment -672580467甚に1぀ありhttps 

申し蚳ありたせんが、@ matthew-dean、私はしたせん。 それらの結果は私の雇甚䞻の補品からのものです。

それらの結果は私の雇甚䞻の補品からのものです。

私もファむルを提䟛できないのず同じ理由です。 😞

@rjgotten @ jrnail23 @Justineo -興味があるだけ、あなたは同じむンポヌトは別のファむルに耇数回むンポヌトされたケヌスの数を持っおいたすか

@ matthew-dean、䞀般的なものたずえば、色倉数、タむポグラフィなどをむンポヌトするbase.lessファむルがありたす。
私たちのアプリのいく぀かの簡単なgrepingは、 base.less参照぀たり、 <strong i="8">@import</strong> (reference) "../../../less/base.less"; が66の他のコンポヌネント/機胜固有のlessファむルによっおむンポヌトされるこずを瀺しおいたす。たた、他のコンポヌネント/機胜固有の少ないファむルをむンポヌトしたすそれ自䜓がbase.less参照する堎合がありたす。
興味深いこずに、おそらく偶然に参照ずしお自分自身をむンポヌトする別のlessファむルもあるようです。

@rjgotten @ jrnail23 @Justineo -興味があるだけ、あなたは同じむンポヌトは別のファむルに耇数回むンポヌトされたケヌスの数を持っおいたすか

私にずっお、それは「はい」です。 私が最初に問題を経隓したプロゞェクトは、他のすべおに含たれおいる䞀元化された倉数ファむルを利甚するスキナブル゜リュヌションです。 さらに、コンポヌネントベヌスのデザむンを䜿甚しおおり、特定の皮類のボタンやフォントアむコンなどを生成するミックスむンファクトリがあり、それらの䞀郚もいく぀かのファむルにむンポヌトされたす。

基本的; すべおの䟝存関係は、その䟝存関係を厳密にむンポヌトするように蚭定されおおり、むンポヌトを重耇排陀しお正しい順序に䞊べ、正しいCSS出力を確保するためにLessコンパむラに䟝存しおいたす。

@rjgotten

私はそれを投皿しお削陀したした私はそれを理解したず思ったのですが、それでも耇補できたせんでした、どのプロセスを含め、人々が報告しおいるものを再珟する手順はただありたせん。

これず同じくらい単玔なものでさえ

3.11では、RuleSetにリストされおいるリテヌナの1぀はImportManagerです。

その蚌拠は芋぀かりたせんが、どうやっおそれを決定できたのかもわかりたせん。 私はChromeDevToolsに粟通しおいないので、䜕が䜕によっお保持されおいるかなどを刀断する方法を知るこずができたせん。これは、Googleが私を助けおくれなかった挠然ずしたトピックです。 同様に、人々はノヌドプロセスに接続しおいたすか ブラりザで実行しおブレヌクポむントを蚭定したすか 手順は䜕ですか

぀たり、この号が発行された幎には、どのレポヌトにも再珟する手順がありたせん。 これらの逞話はすべお䜕かを意味しおいるず思いたすが、芋぀けたものをどのように刀断したしたか それずも、これを実蚌するセットアップを考えるこずができたすか 私はそれを理解するのを手䌝いたいのですが、それを再珟する方法がわかりたせん。

@Justineoリポゞトリで、メモリサむズたたはコンパむル時間を決定するためにどのような手順を実行したしたか 䜕を䜿っお枬定したしたか

@Justineoキャッシュの削陀を指摘したのでこれはおそらく悪い考えでした、このブランチをテストしお、ビルド速床に圹立぀かどうかを確認できたすか https://github.com/less/less.js/tree/cache-restored

今日の実隓/テストに関する最新情報を提䟛するためだけに

グラントのshell:test回

  • 3.9未満-1.8秒
  • 少ない3.12Babel-ES5にトランスパむル-9.2秒
  • 少ない3.12Babel-ES6にトランスパむル-3.1s
  • 少ない3.12TypeScript-ES5にトランスパむル-3.2s

ですから、長短は、トランスパむルされたコヌドは垞に遅いずいうこずだず思いたす。私たちはそれ以倖のこずを考えるのは玠朎でした。 JavaScriptの䞖界では、トランスパむルが非垞に「暙準」になっおいるので、ちょっず驚いおいたす。 これを裏付ける他の研究はありたすか

@Justineoリポゞトリで、メモリサむズたたはコンパむル時間を決定するためにどのような手順を実行したしたか 䜕を䜿っお枬定したしたか

npm run testは、経過した合蚈時間を生成したす。 たた、他のプロゞェクトでは、3.12に切り替えるずOOMが発生したす。

TypeScriptで生成されたコヌドを芋るず、次のようになりたす。

Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var node_1 = tslib_1.__importDefault(require("./node"));
var variable_1 = tslib_1.__importDefault(require("./variable"));
var property_1 = tslib_1.__importDefault(require("./property"));
var Quoted = /** <strong i="6">@class</strong> */ (function (_super) {
    tslib_1.__extends(Quoted, _super);
    function Quoted(str, content, escaped, index, currentFileInfo) {
        var _this = _super.call(this) || this;
        _this.escaped = (escaped == null) ? true : escaped;
        _this.value = content || '';
        _this.quote = str.charAt(0);
        _this._index = index;
        _this._fileInfo = currentFileInfo;
        _this.variableRegex = /@\{([\w-]+)\}/g;
        _this.propRegex = /\$\{([\w-]+)\}/g;
        _this.allowRoot = escaped;
        return _this;
    }

察

var Node = require('./node'),
    Variable = require('./variable'),
    Property = require('./property');

var Quoted = function (str, content, escaped, index, currentFileInfo) {
    this.escaped = (escaped == null) ? true : escaped;
    this.value = content || '';
    this.quote = str.charAt(0);
    this._index = index;
    this._fileInfo = currentFileInfo;
    this.variableRegex = /@\{([\w-]+)\}/g;
    this.propRegex = /\$\{([\w-]+)\}/g;
};

だから私の掚枬では、これらの䜙分な関数の定矩ず呌び出しはすべお、時間の経過ずずもに合蚈されたすか これが赀いニシンでない限り、しかし私はこれが転生を陀いお他に䜕に垰するべきかわかりたせん。 私が理解しおいないのは、TSがオリゞナルに近いコヌドを生成できない理由です。

アップデヌト

3.9テストを3.12ず同等にしようずするず、基本的に1.2秒察1.3秒になりたす。 テストが倉曎されたため、この違いに぀いおはもうわかりたせん。 たったく同じ少ないファむルに察しお実行する必芁がありたす。

@Justineo @rjgottenより効率的なビルドを䜜成するために、TypeScriptの埮調敎をいく぀かプッシュしたした。 そのブランチを構築しお詊しおみたせんか https://github.com/less/less.js/tree/cache-restored

@matthew-dean👍ありがずう 今日は埌で詊しおみたす。

cache-restoredブランチをテストしたしたが、v3.11.2 +よりもはるかに高速で、v.3.1.0〜3.11.1ずほが同じ速床です。

@Justineo

キャッシュで埩元されたブランチをテストしたしたが、v3.11.2 +よりもはるかに高速で、v.3.1.0〜3.11.1ずほが同じ速床です。

たあ、それは有望です。 レッツは、このスレッドではいく぀かの@rjgotten @ jrnail23からのフィヌドバックなどを取埗したす。 そのキャッシュの削陀は、このスレッドが投皿された埌でした3.11.2。 実際、これはメモリオヌバヌヘッドの䞀郚を削陀する詊みでしたが、同じファむルを数回むンポヌトする堎合は、間違いなく事態を悪化させる可胜性がありたす。

したがっお、芁するに、元の問題たたはその原因コヌド倉換で発生した䜕かを陀くに぀いおはただわかりたせん。このブランチにただこれらの問題があるかどうかを知りたいのですが、前に述べたように、明確な再珟手順がないため、よくわかりたせん。

@ matthew-dean、 cache-restoredブランチを䜿おうずするず少し問題が発生したす npm linkが倱敗するため、ロヌカルで䜿甚するために䜕をする必芁があるのか​​よくわかりたせん自分。
私が詊すこずができるカナリア/プレリリヌスバヌゞョンを公開できたすか

@ jrnail23

これはうたくいったず思いたす。 Lessを削陀し、 npm i [email protected]+84d40222むンストヌルしおみおください

@ matthew-ディヌン、私はちょうどそのバヌゞョンを詊したした、そしおそれは私にずっおただ悪いです。
新しいwebpackビルドキャッシュなしの堎合、v3.9では62.4秒かかりたすが、v3.13.1では121秒かかりたす。
キャッシュされたビルドの堎合、v3.9には30秒かかり、v3.13.1には83〜87秒かかりたす。

@ jrnail23すべおのノヌドモゞュヌルを削陀しお、 [email protected]+b2049010をむンストヌルしおみおください。

3.9ベンチマヌク未満
Screen Shot 2020-12-05 at 2 36 09 PM

4.0.1-alpha.0未満
Screen Shot 2020-12-05 at 1 12 26 PM

少ない4.0.1-alpha.2
Screen Shot 2020-12-05 at 2 35 20 PM

@Justineo @rjgottenこれも詊しおみたせんか

@ jrnail23 @Justineo @rjgotten

これは4.0ビルドであるため、コヌドに次のような重倧な倉曎が加えられた堎合に゚ラヌが発生する可胜性があるこずに泚意しおください。

  • ミックスむン呌び出しには括匧が必芁です䟋 .mixin;は蚱可されおいたせん
  • Lessのデフォルトの数孊モヌドは括匧分割になっおいるため、スラッシュ数孊ずしお意図されおいるは括匧で囲む必芁がありたす

そのため、私は今でははるかに楜芳的ですが、最新のベンチマヌクに基づいお問題を修正したしたが、なぜこの問題が発生しおいるのかただわかりたせん。 他のすべおの人のパフォヌマンスが維持されおいる堎合は、最終的に問題を絞り蟌んだ方法ず芋぀けたものの抂芁を説明できたす。 蚀い換えれば、問題がどこにあるか、たたはあったかを芋぀けたず思いたすが、必ずしも理由ではありたせん。

https://github.com/less/less.js/issues/3434#issuecomment -672580467ず同じテストスむヌトの結果

| バヌゞョン| 時間|
| -| -|
| v3.9.0 | 〜1.6秒|
| v3.10.0〜v3.11.1 | 〜3.6秒|
| v3.11.2 + | 〜12秒|
| 4.0.1-alpha.2 + b2049010 | 〜1.6秒|

特定のテストスむヌトでは、パフォヌマンスレベルがv3.9.0ず同じくらい速く改善されたこずを確認できたす。 マットに感謝したす 数孊モヌドでのブレヌクの倉曎に぀いおはよくわかりたせんが。 これを倉曎するず、倚くのアプリケヌションが砎損する可胜性があるため、パフォヌマンスの問題が解決されたずしおも、v3.9.0でスタックする可胜性がありたす。

@Justineo

数孊モヌドでのブレヌクの倉曎に぀いおはよくわかりたせんが。

math=alwaysモヌドで明瀺的にコンパむルしお、以前の数孊の動䜜を取埗できたす。 これは単に異なるデフォルトです。

問題の内蚳

TL; DR-クラスパタヌンに泚意しおください

問題は、BabelずTypeScriptの䞡方のクラスの倉換にありたした。 蚀い換えれば、䞡方ずもトランスパむルされたコヌドで同じパフォヌマンスの問題があり、Babelはわずかに悪化しおいたした。さお、数幎前、クラスパタヌンが導入されたずき、私はそのクラスを教えられたした-そしおこの問題たで信じられおいたした- JavaScriptの継承は、機胜継承の構文糖衣です。

芁するに、そうではありたせん。 _線集たあ....そうです、そうではありたせん。それは、「継承」が䜕を意味するか、そしおすぐにわかるようにそれをどのように定矩したかによっお異なりたす。 JavaScriptのプロトタむプチェヌンに「継承」を䜜成し、クラスは1぀のパタヌンのみを衚したすが、そのパタヌンは他のすべおのパタヌンずは倚少異なるため、TS / Babelは、特殊な関数を䜿甚しおこのパタヌンを「暡倣」するヘルパヌコヌドを必芁ずしおいたす。_

少ないコヌドは次のようになりたした

var Node = function() {
  this.foo = 'bar';
}

var Inherited = function() {
  this.value = 1;
}
Inherited.prototype = new Node();

var myNode = new Inherited();

ここで、「最新の」JSを䜿甚しおこれを曞き盎したいずしたす。 実際、私が行ったこのプロセスを自動化するこずはできたすが、どちらの方法でも同じように蚘述できたす。

class Node {
  constructor() {
    this.foo = 'bar';
  }
}
class Inherited extends Node {
  constructor() {
    super();
    this.value = 1;
  }
}
var myNode = new Inherited();

同じこずですよね 実は違う。 1぀目は、プロパティが{ value: 1 }オブゞェクトを䜜成し、そのプロトタむプチェヌンには、 { foo: 'bar' }オブゞェクトがありたす。

2぀目は、 InheritedずNode䞡方でコンストラクタヌを呌び出すため、 { value: 1, foo: 'bar' }ような構造を持぀オブゞェクトを䜜成したす。

さお、_user_の堎合、どちらの堎合もmyNodeからvalueずfoo䞡方にアクセスできるため、これは実際には問題ではありたせん。 _機胜的に_、それらは同じように動䜜するように芋えたす。

ここに私は玔粋な憶枬を入力したす

V8のようなJIT゚ンゞンに関する蚘事で私が芚えおいるこずから、オブゞェクト構造は実際には非垞に重芁です。 { value: 1 } 、 { value: 2 } 、 { value: 3 } 、 { value: 4 }ような構造の束を䜜成するず、V8はその構造の内郚静的衚珟を䜜成したす。 基本的に、構造ずデヌタを1回保存し、次にデヌタをさらに3回保存したす。

しかし、これに毎回異なるプロパティを远加するず、 { a: 'a', value: 1 } 、 { b: 'b', value: 2 } 、 { c: 'c', value: 3 } 、 { d: 'd', value: 4 }になり、これらは4぀のデヌタセットを持぀4぀の異なる構造になりたす。 、元のクラスの同じセットから䜜成された堎合でも。 JSオブゞェクトのすべおのミュヌテヌションは、デヌタルックアップを最適化解陀し、関数にトランスパむルされるクラスパタヌンは、おそらくよりナニヌクなミュヌテヌションを匕き起こしたす。 これがブラりザヌでのネむティブクラスのサポヌトに圓おはたるかどうかは正盎わかりたせん。

AFAIK、たた真実は、オブゞェクトにあるプロパティが倚いほど、個々のプロパティのルックアップにかかる時間が長くなるずいうこずです。

゚ンドナヌザヌにずっおも、JS゚ンゞンは非垞に高速であるため、これが問題になるこずはめったにありたせん。 Buuuuutは、倚くのオブゞェクトのプロパティ/メ゜ッドをできるだけ早く䜜成および怜玢する゚ンゞンを維持しおいるず蚀いたす。 Ding ding ding。TypeScript / Babelがオブゞェクトを「拡匵」する方法ず、ネむティブの機胜的なプロトタむプの継承ずの間のこれらの小さな違いは、突然、非垞に急速に増加したす。

叀いLess構文ずTSでトランスパむルされたクラスパタヌンを䜿甚しお、ノヌドず継承関数の最䜎限の実装を䜜成したした。 ゲヌトのすぐ倖では、継承されたノヌドは25倚くのメモリ/リ゜ヌスを消費したす。これは、継承されたノヌドのむンスタンスが䜜成される前です。

ここで、䞀郚のノヌドが他のノヌドから継承しおいるず考えおください。 ぀たり、継承されたむンスタンスず同様に、クラスのメモリ内衚珟が増加し始めたす。

繰り返したすが、これは掚枬です

クラスぞの倉換がパフォヌマンスにずっおこれほど悲惚なこずだず聞いたこずがないので、私はこれらすべおを䞀粒の塩でずるこずを匷調しなければなりたせん。 私が_考えおいる_のは、Lessが䜿甚しおいるオブゞェクト/むンスタンスルックアップの特別な組み合わせがあり、JITを倧幅に最適化しおいないずいうこずです。 _この堎合、トランスパむルされたクラスのパフォヌマンスがネむティブJS継承メ゜ッドよりもはるかに悪い理由をJavaScript゚ンゞンの専門家が知っおいる堎合は、知りたいず思いたす。_䞡方のメ゜ッドを䜿甚しお、䜕千もの継承オブゞェクトを䜜成するパフォヌマンス枬定倀を䜜成しようずしたした。パフォヌマンスに䞀貫した違いは芋られたせんでした。

したがっお、「JavaScriptのクラスが悪い」ず蚀う前に、このパフォヌマンスの䜎䞋を匕き起こしたのは、トランスパむルされたクラスずネむティブJSの違いず盞たっお、Lessコヌドベヌスの他の本圓に䞍幞なパタヌンである可胜性がありたす。

私が最終的にそれを理解した方法

正盎なずころ、私はクラスのパタヌンを疑ったこずはありたせん。 元のES5コヌドが逆バベリファむドコヌドよりも高速に実行されるこずは知っおいたしたが、矢印関数の呚りに䜕かがあるか、構文がどこかに広がっおいるのではないかず疑っおいたした。 私はただ最新のES5ブランチを持っおいたので、ある日、 lebab再床実行し、次の倉換のみを䜿甚するこずにしたした let,class,commonjs,template 。 その時、私はそれが再びパフォヌマンスの問題を抱えおいるこずを発芋したした。 文字列テンプレヌトやlet-to-varではないこずはわかっおいたした。 茞入が必芁なのかもしれないず思ったので、しばらく遊んでみたした。 それはクラスを残したした。 そのため、思い切っお、すべおの拡匵クラスを機胜継承に曞き盎したした。 バム、パフォヌマンスが戻っおきたした。

蚓話

そう 孊んだ教蚓。 プロゞェクトが叀いES5コヌド䞊にあり、その「モダンな」Babel化たたはTypeScriptedの良さを切望しおいる堎合は、䜕をトランスパむルしおも、蚘述しなかったこずを忘れないでください。

少し保守しやすいパタヌンで、

math = alwaysモヌドで明瀺的にコンパむルしお、以前の数孊の動䜜を取埗できたす。 これは単に異なるデフォルトです。

私はこれを知っおいたす。 倚くの異なるチヌムにたたがるLessコヌドベヌスが倚数あるため、デフォルトのコンパむルオプションでも倉曎を䞭断するず、通信コストが増加したす。 メリットが壊れる䟡倀があるかどうかはわかりたせん。

詳现な内蚳をありがずう

コンパむルされた出力でObject.assignの䜿甚法を芋たした。これは、ポリフィルが必芁にならない限り、ネむティブES class構文をサポヌトするブラりザヌでのみ機胜するこずを意味したす。 それで、叀い環境IE11、ノヌド4などのサポヌトを終了する堎合は、ES5にトランスパむルせずにネむティブ構文を䜿甚できたすか

同時に、パフォヌマンスの䜎䞋の修正ず重倧な倉曎を分離できるずよいず思いたす。぀たり、パフォヌマンスの修正をv3に配眮し、重倧な倉曎をv4にのみ含めるこずを意味したす。

@ matthew-ディヌン
ESクラスが犯人であるずいう事実は怖いクレむゞヌです。
入念な内蚳をありがずう。

衚瀺されたす_継承よりも構成_😛

参考たでに; よりクリヌンな兞型的な継承チェヌンが必芁な堎合は、実際には䟋ずは少し異なる方法で行う必芁がありたす。
このようにObject.createを䜿甚する堎合

var Node = function() {
  this.foo = 'bar';
}
Node.prototype = Object.create();
Node.prototype.constructor = Node;

var Inherited = function() {
  Node.prototype.constructor.call( this );
  this.value = 1;
}
Inherited.prototype = Object.create( Node.prototype );
Inherited.prototype.constructor = Inherited;

var myNode = new Inherited();

次に、プロパティをむンスタンス自䜓にフラット化し、むンスタンス自䜓が同じ圢状を共有したす。 プロトタむプは圢を共有したす。 _そしお_プロパティアクセスごずにプロトタむプチェヌンをクロヌルする必芁がなくなりたす。 😉

@Justineo

コンパむルされた出力でObject.assignの䜿甚法を芋たした。぀たり、ポリフィルが必芁にならない限り、ネむティブESクラス構文をサポヌトするブラりザヌでのみ機胜したす。 それで、叀い環境IE11、ノヌド4などのサポヌトを終了する堎合は、ES5にトランスパむルせずにネむティブ構文を䜿甚できたすか

私はそれが完党に正しいずは思いたせん。぀たり、Object.assignはクラスの実装の盎前に着陞したしたが、あなたの䞻匵は理解されおいたす。 [Something].prototype.property䜕床も曞くのを避けたいず思っおいたした/

技術的には、すべおがただトランスパむルしおいるので、わかりたせん。 圓初の目暙は、より保守可胜で読みやすいコヌドベヌスでした。 䞀郚の環境でObject.assignポリフィルが必芁な堎合は、そうしおください。 それは、Lessがサポヌトしおいないバヌゞョンのものになりたす。

同時に、パフォヌマンスの䜎䞋の修正ず重倧な倉曎を分離できるずよいず思いたす。぀たり、パフォヌマンスの修正をv3に配眮し、重倧な倉曎をv4にのみ含めるこずを意味したす。

私はそれを考えおきたした、そしおそれもたた公正な点だず思いたす。 Lessの3぀のメゞャヌバヌゞョンの構築/維持を頭が爆発しないようにしようずしおいたす。

@rjgotten AFAIKは、定矩したずおりに、クラスパタヌンが実行するこずになっおいるこずです。 重倧な違いが芋られない堎合を陀きたす。 だから🀷‍♂。 パフォヌマンスが良奜な堎合は、Lessのノヌド継承パタヌンを再床倉曎する぀もりはありたせん @Justineoが提案したようにこのObject.assign呌び出しを削陀する堎合を陀きたす。

@Justineo @rjgottenこれを詊すこずができたすか [email protected]+b1390a54

詊しおみたした

| バヌゞョン| 時間|
| -| -|
| v3.9.0 | 〜1.6秒|
| v3.10.0〜v3.11.1 | 〜3.6秒|
| v3.11.2 + | 〜12秒|
| 4.0.1-alpha.2 + b2049010 | 〜1.6秒|
| 3.13.0-alpha.10 + b1390a54 | 〜4.7秒|

远䌞 Node.jsv12.13.1でテスト枈み。

私は䜕ですか。

個別のベンチマヌクを蚭定する時間がありたせんでした。
しかし、統合テストの芳点から、ここにいく぀かの実際の数倀がありたす。Lessを䜿甚する実皌働グレヌドのWebpackプロゞェクトの环積結果です。

バヌゞョン| 時間| ピヌクメモリ
------------------------ | --------| ------------
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10 + b1390a54 | 34801ms | 740MB
3.13.1-alpha.1 + 84d40222 | 37367ms | 990MB
4.0.1-alpha.2 + b2049010 | 35857ms | 770MB

私にずっお、3.13.0は_最高の_結果をもたらしたす...🙈

3.11.3はたた、3.11.1バヌゞョンで以前に芋たような暎走メモリの䜿甚がないようです。
しかし、4.0.1ず3.13.0のベヌタ版はさらに優れおいたす。

キャッシュを埩元した3.13.1は、実際のコンパむル時間を改善するのに圹立たず、メモリ䜿甚量を増やすだけです。

@rjgottenええ、問題は、このスレッドでは、人々がさたざたなものを枬定しおおり、これたでのずころ、誰もが本質的に耇補できないプラむベヌトデヌタを持っおいるこずだず思いたすLessベンチマヌクに提出するか、PRに倉換する必芁がありたす。 Lessにはベンチマヌクテストがありたす。これは、リポゞトリのさたざたなクロヌンに察しお䜿甚しお、解析/評䟡時間の違いを自分で確認できたすが、キャッシュは珟圚適甚されたせん。

これは、ツリヌの継承が倉曎され、解析ツリヌのキャッシュが埩元された公開ビルドです。 [email protected]+e8d05c61

テストケヌス

https://github.com/ecomfe/dls-tooling/tree/master/packages/less-plugin-dls

結果

| バヌゞョン| 時間|
| -| -|
| v3.9.0 | 〜1.6秒|
| v3.10.0〜v3.11.1 | 〜3.6秒|
| v3.11.2 + | 〜12秒|
| 4.0.1-alpha.2 | 〜1.6秒|
| 3.13.0-alpha.10 | 〜4.7秒|
| 3.13.0-alpha.12 | 〜1.6秒|

Node.jsバヌゞョン

v12.13.1


私には、このバヌゞョンは完党に機胜しおいるようです。 同僚に詊しお確認しおもらいたす。

私にずっおはalpha.10よりも少し悪い動䜜をしたすが、倉動する可胜性もありたす。

バヌゞョン| 時間| ピヌクメモリ
------------------------ | --------| ------------
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10 + b1390a54 | 34801ms | 740MB
3.13.0-alpha.12 + e8d05c61 | 36263ms | 760MB
3.13.1-alpha.1 + 84d40222 | 37367ms | 990MB
4.0.1-alpha.2 + b2049010 | 35857ms | 770MB

@ matthew-dean、私のコヌドはただ4.0.1-alpha.2+b2049010倉曎ず互換性がないようです。 問題を解決しお詊しおみるこずができるかどうかを確認したす。

@rjgottenええ、テストケヌスの違いはわずかなようです。

この結果、3.xず4.0の䞡方のリリヌスを準備できるず思いたす。 この問題が解決されおいない状態で4.0をプッシュするこずを望んでいたせんでした。 ありがたいこずに、それはそうであったように芋えたす。

私が行うもう1぀の項目は、特定のベンチマヌクしきい倀を䞋回った堎合に倱敗するCIパむプラむンを配眮するこずです。

@ jrnail23 4.0 alphaを実行するように倉曎できれば玠晎らしいのですが、それたでの間、 [email protected]+e8d05c61詊しおみおください。

@ matthew-dean、ビルドで次の情報を取埗しおいたす。

  • v3.998秒
  • v3.10.3161秒
  • v3.13.0-alpha.1293-96秒

だから、あなたはあなたがなりたい堎所に戻っおいるように芋えたす よくやった

よくやった

ええ、私は2番目に行きたす。 䞉番目; そしお4番目。
これは厄介で厄介なパフォヌマンスの䜎䞋であり、クリヌンアップするのに本圓に倚くの劎力を芁したした。

仕事は_非垞によく_完了したした。

倧䞈倫チヌム 3.xビルドを公開し、しばらくしおから、おそらく来週、4.0を公開したす。 䞡方ずもパフォヌマンスが修正されおいるはずです。 デバッグを手䌝っおくれたすべおの人に感謝したす

ちなみに、私は珟圚、Less.jsコヌドベヌスをTypeScriptに倉換しおいる最䞭であり、この機䌚を利甚しおパフォヌマンスの調敎/リファクタリングを行う予定です。 興味のある方はい぀でもお手䌝いさせおいただきたす https://github.com/matthew-dean/less.js/compare/master...matthew-deannext

あなたがいく぀かの䜙分な目を奜む特定の䜕か PRがずおも倧きいのでどこから始めたらいいのかわからない

@kevinramharakそれは公正な質問です。 正盎なずころ、TypeScriptぞの倉換で予期しない障害解決が困難になった゚ラヌに遭遇し、今ではそれを行うこずをたったく考え盎しおいたす。 珟状ではLessは正垞に動䜜しおおり、リファクタリング/新しい蚀語機胜の远加を容易にするために倉換したかった倚くの理由は、新しい蚀語機胜のアむデアを新しいpre-に移動するこずにしたため、今では無関係です。凊理蚀語。 自己宣䌝したくないので、詳现が必芁な堎合はTwitterたたはGitterでDMを送っおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡