Frage

Ich kann nicht viele Informationen über Yü der Assetmanager für die Verwaltung von JS und CSS-Dateien. Meine Frage ist, was ist der Punkt, den Assetmanager zu verwenden? Ich bin sicher nicht, welchen Wert es meinen Entwicklungsprozess fügt hinzu, in der Tat, es scheint, wie es meinen Code kompliziert ... jedes Mal, wenn ich meine Skripte oder CSS-Code ändern, ich habe zu gehen und löschen mein Vermögen Ordner, um sicherzustellen, ich habe die neuesten Versionen.

Es scheint, es ist viel einfacher, nur alle Javascript-Dateien setzen unter / webroot / js / und verwenden Sie nur die Tags, die Dateien anstatt in die Mühe der Assetmanager zu laden. Außerdem Yü der registerCoreScript Funktion stellt immer Script-Tags innerhalb der Header-Tag, anstatt sie an der Unterseite des Codes, in der Nähe des Schließkörper-Tag platziert, wie YSlow empfohlen.

Ich denke, es muss eine Lücke in meinem Verständnis von Yü des Assetmanager sein. Jedes hat alle möglichen Ideen, warum die Assetmanager verwendet, ist besser als Hartcodierung der Script-Tags innerhalb des PHP-Code? Ich bin ein wenig verwirrt ...

Danke!

War es hilfreich?

Lösung

Ich bin sicher, dass jemand besser beantworten kann dies als ich, aber es ist im Grunde so, dass Ihr source JS und CSS-Dateien in Ihre geschützten Ordner bleiben kann.

Dies ist ein wenig für eine Sache sicherer, aber der größte Vorteil für mich ist, dass Sie komprimieren können und minify und ansonsten Ihr Vermögen verarbeiten mit dem Asset-Publishing-System, und es macht es einfacher, Host Ihre JS und CSS auf einem CDN , da es getrennt vom Code-Basis.

Auch hier ist eine offizielle Antwort von qiang (der Typ, der Yü schrieb) darüber.

Andere Tipps

Der Hauptvorteil von Yü des Vermögensverwalters ist, dass es Sie Ihre Komponenten in einem in sich geschlossenen Weise zu strukturieren ermöglicht .

Eine Geschichte von einem Widget

Betrachten Sie eine Komponente, die ein UI-Widget ist. Nehmen wir an, die Verteilung ein paar Vermögenswerte umfasst zusammen mit der Implementierung der Komponente, zum Beispiel diese Dateien:

SuperWidget.php
superwidget.css
superwidget.js
image_for_css.png

Überlegen Sie, wie Sie das Widget in Ihre Anwendung integrieren würde, wenn der Vermögensverwalter nicht existierte. Typische Schritte könnten gehören:

  1. Kopieren SuperWidget.php irgendwo innerhalb des protected/ Verzeichnis
  2. Kopieren superwidget.js zu Ihrem js/ Verzeichnis
  3. Kopieren superwidget.css zu Ihrem css/ Verzeichnis
  4. Kopieren image_for_css.png zu Ihrem images/ Verzeichnis oder vielleicht auch innerhalb css/ zu reduzieren, die relativen Pfadabhängigkeiten

Dann zur Laufzeit würde Superwidget entsprechende Tags emittiert die CSS und JavaScript aufzunehmen; , dies zu tun, wäre es müssen wissen, wo genau haben Sie diese Vermögenswerte platziert . Mit anderen Worten:. einige Entscheidungen die Installation in Bezug auf beliebig gemacht werden, aber dann sind sie in Stein gemeißelt, wenn Sie gehen und bearbeitet die Quelle

Ist das Widget wiederverwendbar?

Wenn dieses Widget wurden sehr individuelle und bedeutete ein untrennbarer Teil der Anwendung zu sein, dann würde dieser Ansatz gut funktionieren und es würde nicht viel Notwendigkeit, einen Vermögensverwalter haben. Aber was, wenn es eine allgemein nützliche Komponente, die Sie verteilen mögen?

Die Probleme beginnen entstehen.

Vor allem der Einsatz Schema wir untersucht haben, verlangt von den Nutzern des Widgets verschiedene Dateien in verschiedene Verzeichnisse zu kopieren, um den Installationsvorgang verkompliziert und die Fehlerwahrscheinlichkeit zu erhöhen.

Aber das größere Problem ist, dass Ihre Bereitstellung Schema mit dem einer anderen Komponente, die unabhängig von Ihnen entwickelte in Konflikt geraten könnte. Was passiert, wenn jemand anders entschieden zu einer superwidget.js Datei zu haben?

Wenn die Installationsanweisungen für diese beiden Komponenten Konflikt dann offensichtlich einer von ihnen nicht wie vorgesehen werden kann, installiert ist, und dann greifen Sie einige Details zu ändern und Hacking, den Quellcode der Komponente diese Änderungen aufzunehmen. Wenn Sie später auf eine neuere Version dieser Komponente aktualisieren Sie werden sorgfältig für Ihre Anpassungen Konto gezwungen werden, so dass ein „copy / überschreiben“ unmöglich aktualisieren.

All dies ist wirklich nicht schön, und während es unwahrscheinlich ist, kann in der Praxis passieren fühlt es sich sicher nicht richtig.

Vermögensverwalter, machen es so

Hier, wo der Asset-Manager kommt Nehmen wir an, Sie entscheiden, Ihre Komponente so zu strukturieren.

superwidget/
  SuperWidget.php
  assets/
    css/
      superwidget.css
    js/
      superwidget.js
    images/
      image_for_css.png

Sie können direkt kopieren Sie diese irgendwo in Ihrem protected/ Verzeichnis egal, was andere Komponenten, die Sie installiert haben; das Schlimmste, was hier passieren könnte, ist, dass man superwidget/, um etwas anderes benennen würde, wenn es ein Konflikt ist.

Mit dem Asset Manager SuperWidget.php veröffentlicht der ganzen superwidget/assets/ Verzeichnis, mit der Kopie bei zB enden assets/1337c0de/ wo assets/ Ihre Anwendung Basis Asset Weg ist und 1337c0de/ ist eine zufällige Hash von Yü erstellt und garantiert nicht in Konflikt mit einem anderen veröffentlichten Wert.

Das bedeutet, dass die Vermögenswerte für Superwidget kann nicht möglicherweise Konflikt mit denen anderer Komponente , so dass Superwidget wirklich wiederverwendbar. Und da die Verzeichnisstruktur innerhalb 1337c0de/ die gleiche wie in der Distribution sein wird, können CSS Bilder beziehen den relativen Pfad ../images/ verwenden, ohne auf den Wert des Zufalls Hash beziehen zu benötigen (was nur wissen, nach der Veröffentlichung).

Was die Asset-Verwaltungr ist nicht

  • Es ist nicht eine Möglichkeit, die Sicherheit zu erhöhen. Ihre Komponentenquelle würde sowieso irgendwo in protected/ sein (also keine Verbesserung gibt), und die Vermögenswerte müssen Webzugriff sein, egal, wo sie nicht kopiert Ende (keine Sicherheit für sie, egal was).
  • Es ist keine allumfassende Lösung Ihrer Vermögen für die Verarbeitung (z minifying CSS). Zwar ist es möglich, eine benutzerdefinierte Asset-Manager zu installieren, der dies tut, nicht vergessen, dass mit wieder verwendbaren Komponenten enthalten Vermögen wird eine kleine Minderheit unter allen Ihrer „Basisanwendung“ Vermögenswerte; wenn Sie minification auf der ganzen Linie wollen, werden Sie Prozess alles auch anders haben und der Asset Manager werden Sie nicht helfen.

TL; DR

Der Asset-Manager ermöglicht es Ihnen, Komponenten machen die leicht verteilbar sind und kann in Anwendungen, ohne die Angst zu schaffen, Konflikte mit anderen Komponenten enthalten sein.

Ein weiterer Vorteil, dass ich wie über den Asset-Manager, ist, dass Sie Ihre Asset-Dateien aktualisieren kann, ohne dass die Benutzer zu sagen, ihren Cache zu löschen.

http: // www .yiiframework.com / wiki / 311 / Assetmanager-Clearing-Browser-s-Cache-vor-Ort-Aktualisierung /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top