テンプレートから静的リソースを接続する

さまざまな企業でフロントエンド/バックエンド開発者/レイアウトデザイナーとして多くのWebプロジェクトに携わった後、私は常に、ページに表示するために必要な静的リソース(今のところ、これを.cssおよび.jsファイルと見なす)を接続するタスクに対する非効率的でいアプローチに出会いました。



私が遭遇したすべてのアプローチの主な問題は、フロントエンドコードの構造、デプロイおよびバックエンドコードのロジック(主にテンプレート)、およびセマンティクスの欠如の間の密接な関係です。 さらに、 フロントエンドコードという用語は、 .js.css 、およびブラウザに提供されるその他のファイルまたはリソースのすべての組み合わせを意味します。 通常、これらのファイルはフロントエンド開発者によって処理されます(うんざりです!)。



最初に、いくつかの実際の例を示します(さまざまなフレームワークと言語がどこでも使用されているため、疑似コードで、実際のコードは私たちを混乱させるだけです)、使用されるアプローチに関連する欠点と問題を検討し、最後にこの問題の私のビジョンを説明します。



最初の例


1つの大きなプロジェクト( Zend Frameworkに基づく)では、静的ファイルはおよそ次の方法で接続されました。



// someWidget.tpl // PROJECT_STATIC_VERSION —      (  ) ViewHelpers.appendStylesheet("css/some-path/sub-path/some-widget.css?" + PROJECT_STATIC_VERSION); ViewHelpers.appendJsFile ("js/some-path/sub-path/some-widget.js?" + PROJECT_STATIC_VERSION); //    Layout: <div class="some-widget"> <!-- a lot of cool html --> </div>
      
      





メソッドViewHelpers.appendStylesheetおよびViewHelpers.appendJsFileは、最終ページの対応するタグで転送されたファイルの接続を保証すると想定します。 PROJECT_STATIC_VERSION 、URLにキーを追加するため使用され、更新すると、ブラウザーはこのファイルの新しいバージョンを強制的にダウンロードします。

これに加えて、ファイルはテンプレートの外部、たとえばコントローラーコードや要素デコレーターコード( Zend_Form_Decorator )で接続されていることがよくありました。 テンプレートに含まれるjsコードがExtJSに依存している場合、 ExtJS jsフレームワークファイルの接続が特に頻繁に発生しました 。 残念ながら、95%の場合、これはフォームのコピーと貼り付けによって行われました。



 ViewHelpers.appendJsFile("js/libs/ext-js/ext-js.js?" + PROJECT_STATIC_VERSION); ViewHelpers.appendCss ("css/libs/ext-js/ext-js.css?" + PROJECT_STATIC_VERSION); ViewHelpers.appendJsFile("js/libs/ext-js/locale-ru.js?" + PROJECT_STATIC_VERSION);
      
      





したがって、このアプローチの欠点(もちろん、ほとんどの場合):



symfonyプロジェクトの2番目の例


 // SomeConroller.SomeAction If (Config.Env == "Production") { includeCss("styles/feature.min.css"); includeJs("js/feature.min.js"); } Else If(Config.Env == "Dev") { includeCss("styles/feature/global.css"); includeCss("styles/feature/sub-feature.css"); includeJs("js/classes/Core.js"); includeJs("js/classes/Event.js"); includeJs("js/classes/CoolPlugin.js"); includeJs("js/classes/Feature.js"); includeJs("js/classes/FeatureSubFeature.js"); } Layout: <div class="feature"> <!-- feature's code is here --> </div>
      
      





さらに、プロジェクトレベルでは、フォームのjsおよびcssコードをマージおよび縮小するために必要なファイルを記述するための構成がありました。



 styles/feature.min.css: styles/feature/main.css styles/feature/sub-feature.css js/feature.min.js: js/classes/Core.js js/classes/Event.js js/classes/CoolPlugin.js js/classes/Feature.js js/classes/FeatureSubFeature.js
      
      





この例には、以前の例のすべての欠点がありますが、より恐ろしい形式になっています。



挑戦する


その結果、これらのアプローチやその他のアプローチの欠点を分析した後、静的リソースを接続するためのシステムに関する多くの要件を収集しました。





解決策




有用な慣行




結論として、私はこのアプローチを個人的なプロジェクトでうまく使用し、現在のプロジェクトに徐々に導入していると言いたいと思います。



それを読んだすべての人に感謝します。 コメントや提案があれば嬉しいです!




All Articles