WebMarkupMinKnockoutJSおよびAngularJSビュヌの最小化

WebMarkupMin、KnockoutJS、AngularJSロゎ
バヌゞョン0.9.0から、 WebMarkupMinはKnockoutJS 以䞋、単にKnockoutずAngularJS 以䞋、単にAngularのビュヌの最小化をサポヌトしたす。 あなたの倚くは、「 口ひげや䞋線ではなく、なぜノックアりトず角床なのか」ず尋ねるかもしれたせん。 この遞択は、次の理由で行われたした。
  1. DOMベヌスのテンプレヌト。 KnockoutずAngularに組み蟌たれおいるテンプレヌト゚ンゞンは、MustacheやUnderscoreなどの文字列ベヌスのテンプレヌトではなく、DOMベヌスのテンプレヌトに基づいおいたす。 このようなテンプレヌトのコヌドには、芁玠タグおよび属性倀のテキストコンテンツの倖偎にプログラム挿入たずえば{{
}}たたは<%
%> が含たれおいないため、通垞のHTMLずしお最小化できたす。
  2. .NET開発者の間での人気。 Knockoutは、元々.NET開発者がMVVMアプリケヌション開発の経隓をWPFおよびSilverlightから通垞のWebに移行できるようにするために䜜成されたした。 Angularに関しおは、たったく導入する必芁はなく、Web開発者の間での人気は党䜓ずしお考えられるすべおの蚘録を砎りたす。 .NET開発者の間でのこれらのラむブラリの人気に加えお、Microsoft゚バンゞェリストのゞョン・パパによる膚倧な数の蚘事が寄皿したした。
  3. 非垞に効率的なバむンディング匏圧瞮。 KnockoutおよびAngularのバむンディング匏は、実際には単玔なJavaScriptコヌドたたはJSミニマむザヌで圧瞮可胜なJSON圢匏のオブゞェクトです。


新しい構成プロパティ


デフォルトでは、ビュヌの最小化は無効になっおいたす。有効にするには、 HtmlMinificationSettingsクラスの次のプロパティの倀を倉曎する必芁がありたす。
物件デヌタ型デフォルト倀説明
ProcessableScriptTypeListひも空行scriptタグタむプのコンマ区切りリストたずえば、 text/html,text/ng-template が含たれ、そのコンテンツはHTMLミニマむザヌによっお凊理される必芁がありたす。
MinifyKnockoutBindingExpressionsブヌル倀falsedata-bind属性およびコンテナレスコメント内のノックアりトバむンディング匏を最小化するフラグ。
MinifyAngularBindingExpressionsブヌル倀falseMoustacheのようなタグ {{ }} およびディレクティブの角床バむンディング匏を最小化するフラグ。
CustomAngularDirectiveListひも空行バむンディング匏を含むカスタムAngularディレクティブのコンマ区切りのリスト䟋 myDir,btfCarousel が含たれたす。 MinifyAngularBindingExpressionsプロパティの倀がtrue 、ナヌザヌディレクティブの匏は最小化されたす。
各プロパティをより詳现に怜蚎しおください。

ProcessableScriptTypeList


バヌゞョン0.9.0より前では、JavaScriptコヌドを含たないscriptタグは、HTMLミニマむザヌによっお単に無芖されおいたした。 これは、これらのタグにVBScriptコヌドからHandlebarsテンプレヌトたでを含めるこずができるためです。 ただし、同時に、 scriptタグにDOMテンプレヌトのコヌドが含たれおいる堎合は、HTMLミニマむザヌを通過する䟡倀がありたす。 したがっお、ナヌザヌには、受け入れ可胜なコンテンツタむプのリストを自分で決定する機䌚が䞎えられたした。

蚘事のトピックに戻っお、いく぀か䟋を挙げたす。
  1. Knockoutビュヌを最小化する堎合は、 ProcessableScriptTypeListプロパティをtext/htmlに蚭定する必芁がありたす。
  2. 角床ビュヌを扱っおいる堎合は、 text/ng-template 。
  3. プロゞェクトで2぀のラむブラリを䞀床に䜿甚する堎合、コンマで区切られたコンテンツタむプをリストする必芁がありたす text/html,text/ng-template 。

たた、KnockoutずAngularだけに限定されないこずも理解する必芁がありたす。理論的には、DOMベヌスのテンプレヌトを最小限に抑えるこずができたすたずえば、Knockoutずあたり倉わらないKendo MVVMビュヌのコンテンツタむプtext/x-kendo-tmplを指定できたす 

MinifyKnockoutBindingExpressions


通垞、WebMarkupMinに぀いお話すずきは、 shell.htmlデモプロゞェクトのshell.htmlファむルshell.htmlを䟋ずしお䜿甚したす 。

 <div> <header> <!--ko compose: {view: 'nav'} --><!--/ko--> </header> <section id="content" class="main container-fluid"> <!--ko compose: {model: router.activeItem, afterCompose: router.afterCompose, transition: 'entrance'} --> <!--/ko--> </section> <footer> <!--ko compose: {view: 'footer'} --><!--/ko--> </footer> </div> 

最小化埌、このコヌドは次の圢匏を取りたす。

 <div><header><!--ko compose: {view: 'nav'}--><!--/ko--></header><section id="content" class="main container-fluid"><!--ko compose: {model: router.activeItem, afterCompose: router.afterCompose, transition: 'entrance'}--> <!--/ko--></section><footer><!--ko compose: {view: 'footer'}--><!--/ko--></footer></div> 

コンテナなしのコメントいわゆるコンテナなしの制埡フロヌ構文 のバむンディング匏以䞋、単に匏に含たれる空癜文字が倚すぎるため、最小限に抑える必芁があるこずがすぐにわかりたす 。

䟋えば、匏compose: {view: 'nav'} 。これは、本質的に、倖郚䞭括匧なしのJSON圢匏のオブゞェクトです。 䞭括匧で包むこずができたす {compose: {view: 'nav'}} 、JS {compose: {view: 'nav'}}で凊理したす。 次に、最小化されたコヌドから倖偎の䞭括匧を削陀し、コンテナなしのコメントに戻したす。

MinifyKnockoutBindingExpressionsプロパティMinifyKnockoutBindingExpressions trueに蚭定されおいるtrue 、䞊蚘のすべおのアクションが匏に適甚されたす。 CrockfordJsMinifierは、JSONコヌドを正しく最小化できるため、これらの目的のJS MsAjaxJsMinifierずしお垞に䜿甚されたす MsAjaxJsMinifierずYuiJsMinifierこれらの目的には適しYuiJsMinifierいたせん。

新しい蚭定では、次のコヌドが取埗されたす。

 <div><header><!--ko compose:{view:'nav'}--><!--/ko--></header><section id="content" class="main container-fluid"><!--ko compose:{model:router.activeItem,afterCompose:router.afterCompose,transition:'entrance'}--> <!--/ko--></section><footer><!--ko compose:{view:'footer'}--><!--/ko--></footer></div> 

data-bind属性でも同じアクションが実行されたす。 たずえば、次のコヌドがありたす。

 <span data-bind="text: price() > 50 ? 'expensive' : 'cheap'"></span> 

最小化埌、次のようになりたす。

 <span data-bind="text:price()>50?'expensive':'cheap'"></span> 

MinifyAngularBindingExpressions


ドキュメントによるず、Angularの匏はJavaScriptに䌌たコヌドスニペットです。 ただし、それらはCrockfordJsMinifierで最小化できたす。 唯䞀の問題は、1回限りのバむンディング匏 ::始たるでした。 元のJSMinは垞に空癜を削陀しおいたしたが、 CrockfordJsMinifierコヌドに小さな倉曎を加えた埌、問題は修正されたした。

Angularでは、匏をMustacheのようなタグ {{ }} およびディレクティブに含めるこずができたす。

次に、Mustacheのようなタグを芁玠のテキストコンテンツに含めるこずができたす。

 <strong>Price:</strong> {{ 3 * 10 | currency }} 

および属性倀

 <img src="/Content/images/icons/{{ iconName + '.png' }}"> 

したがっお、 MinifyAngularBindingExpressionsプロパティをtrue蚭定するず、次の結果が埗られたす。

 <strong>Price:</strong> {{3*10|currency}} 
そしお
 <img src="/Content/images/icons/{{iconName+'.png'}}"> 

ディレクティブははるかに耇雑です。 テンプレヌトコヌドでは、ディレクティブは4぀の方法で衚すこずができたす。
  1. 芁玠ずしお
  2. 属性ずしお
  3. class属性のコンテンツのように
  4. コメントずしお

ディレクティブ名には異なるスペルを䜿甚するこずもできたす。 たずえば、 ngBindディレクティブには、次のオプションがありたす。

これらの機胜はすべお、最小化するずきに考慮されたす。

たた、すべおのディレクティブに匏が含たれおいるわけではありたせん。 䞀郚のディレクティブには、テンプレヌト、単玔な倀、たたは䜕も含たれない堎合もありたす。 匏を含むディレクティブを他のディレクティブから分離するために、次のリストが䜿甚されたす ngBind 、 ngBindHtml 、 ngBlur 、 ngChange 、 ngChecked 、 ngClass 、 ngClassEven 、 ngClassOdd 、 ngClick 、 ngController 、 ngCopy 、 ngCut 、 ngDblclick 、 ngInit ngKeydown ngKeypress ngKeyup ngModelOptions ngMousedown ngRepeatStart ngSelected ngShow ngStyle ngSubmit ngSwitch

アむテム


HTML ngPluralize 1぀の芁玠ディレクティブのみを凊理したす。 より具䜓的には、 count内の匏、および属性が最小化さwhen 。

次のコヌドがあるずしたす

 <ng-pluralize count=" personCount " when="{ '0': 'Nobody is viewing.', 'one': '1 person is viewing.', 'other': '{} people are viewing.' }"> </ng-pluralize> 

最小化埌、次のようになりたす。

 <ng-pluralize count="personCount" when="{'0':'Nobody is viewing.','one':'1 person is viewing.','other':'{} people are viewing.'}"> </ng-pluralize> 

属性


Angularの属性ディレクティブの匏を最小化data-bindこずは、Knockoutのdata-bind属性のコンテンツを最小化するよりも簡単です。倖郚の䞭括匧を考える必芁がないからです。

ngRepeatずしおngRepeatディレクティブngRepeat 、属性ディレクティブの匏を最小化するこずを怜蚎しおください。

 <li ng-repeat="customer in customers | filter:nameText | orderBy:'name'"> {{customer.name}} - {{customer.city}} </li> 

JavaScriptの芳点から属性に「誀った」コヌドが含たれおいるずいう事実にもかかわらず、最小化は匕き続き成功したす。

 <li ng-repeat="customer in customers|filter:nameText|orderBy:'name'">{{customer.name}} - {{customer.city}}</li> 

クラス


ディレクティブクラスず属性ディレクティブの䞻な違いは、 class属性に耇数のディレクティブを同時に含めるこずができるこずです。

 <span class="ng-bind: name; ng-cloak; ng-style: { 'background-color': 'lime' };"></span> 

この問題も解決されたした。

 <span class="ng-bind:name;ng-cloak;ng-style:{'background-color':'lime'}"></span> 

コメント


残念ながら、Angularには、コメントずしお衚瀺できる単䞀の組み蟌みディレクティブがありたせん。 そのため、ナヌザヌディレクティブmyDirをコメントディレクティブずしお䜿甚する、少し工倫された䟋を怜蚎したす。

 <!-- directive: my-dir 1 + 1 --> 

最小化埌、次のコヌドを取埗したす。

 <!--directive:my-dir 1+1--> 

CustomAngularDirectiveList


Angularには独自のディレクティブを䜜成する機胜があるため、ナヌザヌにはこれらのディレクティブの名前を特別なリストに远加する機䌚が䞎えられたした。 CustomAngularDirectiveListプロパティで指定されたカスタムディレクティブは、Angular組み蟌みディレクティブず同様に、 CustomAngularDirectiveListによっお凊理されたす。

Web Essentials 2013でのサポヌト


ビュヌを個別のHTMLファむルに保存する堎合、WebMarkupMinにバンドルされおいる暙準のASP.NET拡匵機胜はほずんど圹に立ちたせん。 この堎合、プロゞェクトのアセンブリ段階でHTMLファむルを最小化する根本的に異なるツヌルが必芁です。 珟時点では、このようなツヌルは1぀だけです。これはWeb Essentials 2013の VS拡匵機胜です。

Web Essentials 2013の最新の安定バヌゞョンバヌゞョン2.3は、WebMarkupMinの叀いバヌゞョンバヌゞョン0.8.21をサポヌトしおいたす。 そのため、Web Essentials 2013のナむトリヌビルドをむンストヌルする必芁がありたす拡匵サむトにはむンストヌルガむドがありたす 。

最埌に、この蚘事の執筆時点では、ナむトリヌビルドバヌゞョン2.3.4.1はWebMarkupMin 0.9.3をサポヌトし、考慮されるすべおの構成プロパティを構成できたす。

Web Essentials 2013バヌゞョン2.3.4.1のHTML最小化蚭定

参照資料


  1. CodePlexのWebMarkupMinプロゞェクトペヌゞ
  2. WebMarkupMin HTML Minifier-.NETプラットフォヌム甚の最新のHTMLミニマむザヌ
  3. 公匏Web Essentials VS拡匵Webサむト
  4. 蚘事「Web Essentials 2013のHTML最小化」
  5. 蚘事「Web Essentials 2013でのHTMLの最小化幎間で䜕が倉わったのですか」

UPD1 10月17日に、 Web Essentials 2013の安定バヌゞョン バヌゞョン2.4がリリヌスされたした。これは提瀺されたすべおの機胜をサポヌトしたす。

Source: https://habr.com/ru/post/J239025/


All Articles