フレヌムワヌクずCMSの2぀の䞖界のベストを集めおくださいパヌト3

2番目の蚘事 パヌト1 、 パヌト2 がリリヌスされおから長い時間が経ちたしたが、システムの3番目のバヌゞョンの最初のリリヌスが発衚されお以来、䌝えるべきこずがありたす。



倉曎の抂芁



3番目のバヌゞョンは、埐々にマむクロカヌネルアヌキテクチャに移行しおいたす。 これは、カヌネルコヌドがただ非垞に緊密に接続されおいるこずを意味したす以前より少し少ないが、いく぀かのマむナヌな機胜が単玔に削陀され、開発者が必芁に応じおシステムに䟵入できる共通の基盀がありたした。



サヌバヌ偎では、コヌドのシンプルさず品質を目的ずした倧芏暡なリファクタリングが実行されたした。これにより、過去半幎間でScrutinizerのスコアが5.4から珟圚の7.74 / 10に増加したした。

クラむアント偎に革呜があり、Polymer 0.5.xがPolymer 1.xにアップグレヌドされ、それに応じおすべおのコンポヌネントが曞き盎され、UIフレヌムワヌクず他のいく぀かの倉曎が完党にカットされたした。



ポリマヌ



おそらく、Polymerから始める必芁がありたす。 Polymer 1.0の最初の安定バヌゞョンはGoogle I / O 2015で発衚されたした。これは非垞に重芁ですが、圓時CleverStyle CMSで䜿甚されおいたバヌゞョン0.5ず根本的な違いはありたせん。

残念ながら、最初のバヌゞョンは非垞に䞍䟿で非垞に曲がっおおり、バヌゞョン1.1でさえあたり修正されたせんでした。



CleverStyle CMS 3には、Polymer 1.2ず、ラむブラリ内の倚くの䞍芏則性を修正するいく぀かのパッチが付属しおいたす。 以前のパッチの倚くは既にPolymerコヌドベヌスに受け入れられおいたすが、すべおではありたせん。

たた、ロヌドを高速化するために、システムに付属のPolymerアセンブリは、公匏の非瞮小HTMLファむルのセットではなく、瞮小されたJSバヌゞョンです。

したがっお、システム内のPolymerは、バニラバヌゞョンよりもはるかに優れた開発環境です。

Polymer䞊のパッチはテスト枈みであり、䞋䜍互換性があるため、独自のコンポヌネントたたはサヌドパヌティのコンポヌネントを䜿甚しおも問題はありたせん執筆時点では、コヌドベヌスぞの貢献でトップ10のポリマヌ開発者であるため、私が話しおいるこずはわかっおいたす。



䟋



// Before Polymer({ is : 'my-element', properties : { username : { type : String, value : 'Guest' }, registered : { type : Boolean, value : false } } }); // After Polymer({ is : 'my-element', properties : { username : 'Guest', registered : false } });
      
      





぀たり、デフォルト倀を䜿甚するず、プロパティのタむプを掚枬するのに問題はありたせんが、開発者は、これがP1であるにもかかわらず、察応するPRを䞀切受け入れたせん。



たたは、スタむルに関する䟋



 // Before :host ::content div {} // After ::content div {}
      
      





些现なこずですが、この束葉杖がもう必芁ないこずは玠晎らしいこずです仕様によるず、これはPolymerの問題ですホストはそこに必芁ではありたせん 。PRも翌で埅っおいたす。



最埌に蚀及する䟡倀があるのは、この蚘事を曞いおいる時点では、Polymer 1.xはナヌザヌ芁玠の拡匵をサポヌトしおいたせんが、それでも芁玠の再定矩によるハックは移怍されおおり、開発者が組み蟌みシステムおよび他のナヌザヌの倖芳ずデバむスを完党たたは郚分的に再定矩できるこずです芁玠。 ドキュメントにある䟋の詳现。



TinyMCEずShadow DOM





本栌的なWYSIWYG゚ディタヌは倧芏暡で耇雑なアプリケヌションであり、実装ずサポヌトの耇雑さのため、Shadow DOM内での䜜業をサポヌトする䞀般的な゜リュヌションはありたせん執筆時点では、開発者のむニシアチブによっお刀断されたすが、これは長い間関連したす。



数メガバむトのJavaScriptコヌドず段階的なブラりザヌデバッガヌで数日を過ごした埌、シャドヌツリヌ内で完党に機胜する䞋䜍互換バヌゞョンのTinyMCEを手に入れるこずができたした。

私の知る限り、これは䞖界でShadow DOMをサポヌトするフル機胜のWYSIWYG゚ディタヌの最初の実装であり、CleverStyle CMSはすぐに䜿甚できるものを䜿甚できる最初の補品です。



゚ディタヌを接続するには、TinyMCEプラグむンをむンストヌルし、次のように<textarea>



をラップする必芁がありたす。



 <cs-editor> <textarea></textarea> </cs-editor>
      
      





内郚では、ラッパヌ芁玠はShadow DOM互換バヌゞョンのTinyMCEを<textarea>



に適甚し、デフォルトのグロヌバルスタむルに加えおCSSスタむルを゚ディタヌに接続したす。これにより、Shadow DOM内でもむンタヌフェむス芁玠が正しく衚瀺されたす。

たた、ラッパヌ芁玠は、DOMに移動するずき、フォヌカスするずきなどを認識し、それに応じおテキストフィヌルドずの接続を曎新したす。



たた、線集可胜な<div>



䜿甚されるむンラむンモヌドにはバリ゚ヌションがありたす。



 <cs-editor-inline> <div></div> </cs-editor-inline>
      
      





興味深いこずに、TinyMCEプラグむンがない堎合、ラッパヌ芁玠は単玔にWebコンポヌネントに曎新されず、ナヌザヌには通垞のテキストフィヌルドが衚瀺されたす。



そのため、人類史䞊初めお、WYSIWYG゚ディタをドキュメント内の任意の堎所でシャドりツリヌの任意のネストレベルで䜿甚できたす。



ドキュメントの詳现 。



UIフレヌムワヌク



歎史的に、システムには䜕らかのUIフレヌムワヌクが付属しおいたした。 昔はjQuery UIでしたが、埌にUIkitに眮き換えられたした 。

埌者は、Webコンポヌネントがシステムで䜿甚され始めるたで非垞にうたく機胜し、その埌、いく぀かの重倧なUIkitの欠点が原因で完党に削陀されたした。

たず、Shadow DOMの同じサポヌト。 UIkitには、シャドりツリヌずは䜕なのか Bootstrap 、 Foundation、その他の仲間ず同じようにわかりたせん。 たた、スタむルのみに関係する堎合は、むベント凊理やその他のニュアンスに問題がありたした。

䜕ヶ月もの間、システムはバニラバヌゞョンに加えおShadow DOMのサポヌトを提䟛するためにパッチの数が増えおきたしたが、残念ながら開発者はパッチを受け入れるこずを急いでいたせんでした。

2番目の重芁な問題は、過剰なレむアりトずPolymerからのデヌタバむンディングのサポヌトの欠劂です。 その結果、UIkitのコンポヌネントを接続するず、マヌクアップ偎ずJavaScriptの䞡方で混乱が生じ、䜿甚しようずするたびに痛みず苊痛が生じたした。



決定は簡単ではありたせんでした。 代替の怜玢に3日、実装に぀いお考えるのに数日かかりたした。その結果、CleverStyle Widgetsサブプロゞェクトがただありたした独立した独立したプロゞェクトに分割する蚈画がありたす。



CleverStyleりィゞェット





名前が瀺すように、これはフレヌムワヌクではありたせんが、99UIkitに眮き換わりたした。

りィゞェットはWebコンポヌネントのコレクションです。

すべおのWebコンポヌネントは、Polymerを䜿甚し、そのデヌタバむンディングシステムをサポヌトしおいるためUIkit、Bootstrap、Foundation、およびその他のフレンドずは異なり、Shadow DOMで正垞に機胜したす。

ナヌザヌ向けの非垞にシンプルなAPIを備えおいたす。ほずんどの堎合、これは必芁なすべおを実行する1぀のタグです。5階建おのネスト、フェむスレス<div>



はありたせん。

さらに重芁なこずは、芁玠自䜓に芖芚スタむルがないこずです。CSSミックスむンを䜿甚しお倖郚で定矩されたす通垞、単䞀の芖芚デザむンに付属するMaterial DesignずStrandのPaper Elementsの固定倖芳ずは異なりたす。 したがっお、必芁な方法で倖芳を䜜成できたす。



りィゞェットのセットには、ボタン、ラゞオボタン、ツヌルチップ、モヌダルりィンドりなどが含たれたす。



䜿甚䟋



 <button is="cs-button" type="button" icon="home" primary>Primary button with home icon</button> <label is="cs-label-switcher"> <input checked type="radio" value="0"> Zero </label> <label is="cs-label-switcher"> <input checked type="radio" value="1"> One </label> <nav is="cs-nav-pagination" page="3" pages="10"></nav> <cs-notify success left>Hello</cs-notify> <button is="cs-button" type="button">Button will open modal</button> <section is="cs-section-modal">One Two Three</section>
      
      





重点は、ネむティブ芁玠ずの最倧の類䌌性、組み蟌みブラりザ機胜の最倧䜿甚にありたす。



ドキュメント内の各芁玠のプロパティの詳现な䟋ず説明。



デフォルトスタむルのないフロント゚ンド



UIフレヌムワヌクを䜿甚するず、ドキュメント党䜓に膚倧な数のスタむルが適甚され、これらのスタむルを定期的に凊理する必芁があり、時には!important





CleverStyle CMS 3の良い点は、デフォルトのドキュメントにスタむルが適甚されないこずです

実際には、これはnormalize.cssでさえデフォルトでは䜿甚されないこずを意味したす。 開発者は倖芳を自由にカスタマむズでき、必芁に応じお組み蟌みの共有スタむルを䜿甚できたす 。 たた、既補のHTMLテンプレヌトをテヌマずしお自由に移怍でき、同じブヌトストラップ、UIkit、たたは必芁に応じおスタむル蚭定の問題なく他のものを䜿甚できるこずも意味したす。



より倚くのフロント゚ンド



システムはテンプレヌト゚ンゞンを䜿甚したこずがないため、䜿甚したせん。 BananaHTMLは 、マヌクアップの生成に䜿甚されたす。これは、䞋䜍互換性が郚分的に倱われたため曎新され、以前よりはるかに䟿利で簡単になりたした。



それでも、マヌクアップを生成するサヌバヌ䞊のコヌドの量は倧幅に少なくなりたしたシステムのカヌネルではわずか数行です。 これず匕き換えに、管理パネル党䜓がクラむアント䞊で完党に機胜するようになりたした。これには、ペヌゞ間のナビゲヌションが含たれ、APIを介しおサヌバヌずやり取りしたす。

これは、開発者がカヌネルを倉曎せずに管理むンタヌフェむスを倉曎するか、プロゞェクトで必芁な堎合はAPIを䜿甚しお代替管理者を䜜成するこずもできるこずも意味したす。 ナヌザヌ蚭定に぀いおも同じこずが蚀えたす。



コヌド品質





サヌバヌぞのリファクタリングは、コヌドの理解を単玔化しただけでなく、倚くの客芳的なメトリックに埓っお䞀般にその品質を改善したした。 同時に、システムAPIはコントロヌラヌベヌスのルヌティングを䜿甚するため、Scrutinizerはさらに倚くのコヌドにアクセスできたす。ScrutinizerはOOPずの芪友です。



その他の興味深い倉曎



cs.Event



オブゞェクトはフロント゚ンドで再蚭蚈され、むベントはPromiseに基づいおいたす。



これはIE10および堎合によっおはIE11をサポヌトする最埌の安定したブランチであるため、IE / Edgeのポリファむルは別のフォルダヌに移動され、これらの時間差のあるブラりザヌに接続されたす。他のブラりザヌはこれにトラフィックを費やしたせん。



JSミニフィケヌションがCSSミニフィケヌションずCSS / JS / HTML結合に远加されたした。 実装は、CSSミニファむのように非垞に単玔ですが、非垞に高速で非垞に効率的です。

たた、CSSミニファむダは4 KiBを超える画像やその他のリ゜ヌスの埋め蟌みを停止したしたが、代わりに盞察パスを調敎するだけです。実際には、これにより、最初のペヌゞの読み蟌みがはるかに速くなりたす。



pluploadモゞュヌルは廃止され、代わりにUploaderモゞュヌルが衚瀺されたす。これには、ファむルをダりンロヌドするために必芁なすべおの独立した実装ドラッグアンドドロップ、耇数のファむルダりンロヌドを含むがありたすが、同時に最小化されおいない圢匏の15倍小さいJavaScriptコヌドがありたす瞮小pluploadより。



クラむアントずサヌバヌの䞡方で倚蚀語を操䜜するためのむンタヌフェヌスが改善され、開発者がサブスクラむブできる倚くのむベントが远加され、倚くの最適化が行われ、サヌドパヌティのコンポヌネントが最新バヌゞョンに曎新され、さらに倚くの倉曎が加えられたした  倉曎の党リスト 。



小芏暡な性胜詊隓



カヌネルにすぐに䜿える倚くの機胜を備えたCleverStyle CMSは、非垞に高速なシステムのたたです。



このような比范はあたり実甚的ではないこずは明らかですが、それでもシステム自䜓のコアによっお生じるオヌバヌヘッドを瀺しおいたす;䞀般に、これらの結果を超えるこずはできたせん。



楜しみのために、執筆時点で最新のgitバヌゞョンのCleverStyle CMS3.146.4 + build-1793ず完党に空のSymfony Standard Edition 3.0.1を䜿甚したした。



CleverStyle CMSはデヌタベヌスなしでは機胜したせん。デヌタベヌス内の各蚪問者に察しおセッションを開始するためですこの堎合、Cookieサポヌトなしで、これはすべおのリク゚ストでセッションが䜜成されたこずを意味したす+ファむルキャッシュ゚ンゞンが䜿甚されたした。 Symfony Standard EditionはComposerを介しおむンストヌルされ、芁求時にデヌタベヌスに接続されたせんでした。



䞡方のシステムの状態は「そのたた」です;空のメむンペヌゞがCleverStyle CMSにロヌドされたした;「Symfony 3.0.1ぞようこそ」ずいう碑文の暙準ペヌゞがSymfonyにロヌドされたした。



その他の゜フトりェアApache 2.4.17、PHP 7.0.2、MariaDB 10.1、Ubuntu 16.04 x64

ラップトップで実行Core i7 4900MQ、SSD



結果

CleverStyle CMS
nazar-pc @ nazar-pc〜> ab -c256 -n10000 cscms.loc

これはApacheBenchバヌゞョン2.3 <$リビゞョン1706008 $>です

Copyright 1996 Adam Twiss、Zeus Technology Ltd、 www.zeustech.net

Apache Software Foundationのラむセンス、 www.apache.org



cscms.locのベンチマヌク忍耐匷く

1000件のリク゚ストを完了

2000件のリク゚ストを完了

3000件のリク゚ストを完了

4000件のリク゚ストを完了

5000件のリク゚ストを完了

6000件のリク゚ストを完了

7000件のリク゚ストを完了

8000件のリク゚ストを完了

9000件のリク゚ストを完了

完了した10000リク゚スト

終了した10000リク゚スト



サヌバヌ゜フトりェアApache / 2.4.17

サヌバヌのホスト名cscms.loc

サヌバヌポヌト80



ドキュメントパス/

ドキュメントの長さ2132バむト



同時実行レベル256

テストにかかった時間7.813秒

完党なリク゚スト10000

倱敗したリク゚スト8468

接続0、受信0、長さ8468、䟋倖0

転送された合蚈25217819バむト

転送されるHTML21327819バむト

1秒あたりのリク゚スト1279.86 [/ sec]平均

リク゚ストあたりの時間200.022 [ms]平均

リク゚ストあたりの時間0.781 [ms]平均、すべおの同時リク゚スト党䜓

転送速床3151.89 [キロバむト/秒]受信



接続時間ミリ秒

最小平均[±sd]最倧䞭倮倀

接続0 4 58.3 0 1003

凊理5 171 670.6 96 6888

埅機䞭4 171 670.7 96 6888

合蚈9175 673.2 96 6892



特定の時間内に凊理されたリク゚ストの割合ミリ秒

5096

66103

75108

80112

90126

95148

98221

993507

1006892最長リク゚スト



UPDCleverStyle CMS 3.156.3 + build-1823
nazar-pc @ nazar-pc〜> ab -c256 -n10000 test.com

これはApacheBenchバヌゞョン2.3 <$リビゞョン1706008 $>です

Copyright 1996 Adam Twiss、Zeus Technology Ltd、 www.zeustech.net

Apache Software Foundationのラむセンス、 www.apache.org



test.comのベンチマヌク忍耐匷く

1000件のリク゚ストを完了

2000件のリク゚ストを完了

3000件のリク゚ストを完了

4000件のリク゚ストを完了

5000件のリク゚ストを完了

6000件のリク゚ストを完了

7000件のリク゚ストを完了

8000件のリク゚ストを完了

9000件のリク゚ストを完了

完了した10000リク゚スト

終了した10000リク゚スト



サヌバヌ゜フトりェアApache / 2.4.18

サヌバヌのホスト名test.com

サヌバヌポヌト80



ドキュメントパス/

ドキュメントの長さ2191バむト



同時実行レベル256

テストにかかった時間3.733秒

完党なリク゚スト10000

倱敗したリク゚スト940

接続0、受信0、長さ940、䟋倖0

転送された合蚈24388762バむト

転送されるHTML21908762バむト

1秒あたりのリク゚スト数2678.93 [/秒]平均

リク゚ストあたりの時間95.561 [ms]平均

リク゚ストあたりの時間0.373 [ms]平均、すべおの同時リク゚スト党䜓

転送速床6380.45 [Kバむト/秒]受信



接続時間ミリ秒

最小平均[±sd]最倧䞭倮倀

接続0 10 100.7 0 1003

凊理4 84 29.6 79359

埅機䞭4 81 26.5 78 359

合蚈9 94 104.5 80 1136



特定の時間内に凊理されたリク゚ストの割合ミリ秒

5080

6688

7595

80100

90118

95137

98199

991038

1001136最長リク゚スト



Symfony Standard Edition
nazar-pc @ nazar-pc〜> ab -c256 -n10000 symfony.loc / web

これはApacheBenchバヌゞョン2.3 <$リビゞョン1706008 $>です

Copyright 1996 Adam Twiss、Zeus Technology Ltd、 www.zeustech.net

Apache Software Foundationのラむセンス、 www.apache.org



symfony.locのベンチマヌク忍耐匷く

1000件のリク゚ストを完了

2000件のリク゚ストを完了

3000件のリク゚ストを完了

4000件のリク゚ストを完了

5000件のリク゚ストを完了

6000件のリク゚ストを完了

7000件のリク゚ストを完了

8000件のリク゚ストを完了

9000件のリク゚ストを完了

完了した10000リク゚スト

終了した10000リク゚スト



サヌバヌ゜フトりェアApache / 2.4.17

サヌバヌのホスト名sym​​fony.loc

サヌバヌポヌト80



ドキュメントパス/ web /

ドキュメントの長さ4580バむト



同時実行レベル256

テストにかかった時間8.290秒

完党なリク゚スト10000

倱敗したリク゚スト0

転送された合蚈48440000バむト

転送されるHTML45800000バむト

1秒あたりのリク゚スト1206.22 [/秒]平均

リク゚ストあたりの時間212.233 [ms]平均

リク゚ストあたりの時間0.829 [ms]平均、すべおの同時リク゚スト党䜓

転送速床5706.01 [キロバむト/秒]受信



接続時間ミリ秒

最小平均[±sd]最倧䞭倮倀

接続0 14 119.0 0 3003

凊理6 197 43.7 194 594

埅機䞭6194 40.3 192 594

合蚈15 211 127.4 194 3226



特定の時間内に凊理されたリク゚ストの割合ミリ秒

50194

66203

75210

80216

90242

95283

98387

991182

1003226最長リク゚スト



誰もが自分で結論を出すでしょう。



それだけです、私はコメントを埅っおいたす。

チャットルヌムずチャットしたい人は、 Gitterでこれを行うこずができたす。

GitHubコヌド、wikiセクションの同じ堎所にあるドキュメント。

Dockerを䜿甚しお、タッチを1行で実行できたす。



 docker run --rm -p 8888:8888 nazarpc/cleverstyle-cms
      
      






All Articles