2 Stimmen

statische Stylesheets werden bei jeder Postanforderung neu geladen

Jedes Mal, wenn ein Beitrag von der Seite kommt, wird das ganze Bündel von CSS neu geladen. Ist es möglich, ihnen zu sagen, dass sie nicht immer wieder reinkommen sollen. Es gibt eine Reihe von GET, die abgefeuert werden. Können wir in irgendeiner Weise zu optimieren oder ist es normales Verhalten?

Die Umgebung ist google apps in python.

2voto

Gant Punkte 29313

Prüfen Sie die Verwendung Statische Dateien y Handler für statische Dateien . Da sich der letztgenannte Link auf die Cache-Dauer von statischen Dateien bezieht, glaube ich, dass die Caching-Funktionalität möglich ist.

Im Gegensatz zu einem herkömmlichen Webhosting Umgebung, stellt Google App Engine Dateien keine Dateien direkt aus Ihrer Quellverzeichnis der Anwendung, es sei denn es sei denn, Sie haben es so konfiguriert. Wir nannten unsere Vorlagendatei index.html genannt, aber dies macht die Datei nicht automatisch unter der URL /index.html verfügbar.

Aber es gibt viele Fälle, in denen Sie statische Dateien direkt dem Webbrowser zur Verfügung den Webbrowser ausliefern. Bilder, CSS Stylesheets, JavaScript-Code, Filme und Flash-Animationen werden normalerweise mit einer Webanwendung gespeichert und direkt an den Browser geliefert. Sie können App Engine anweisen, bestimmte Dateien direkt zu bedienen, ohne dass Sie eigenen Handler zu programmieren.

1voto

Kiv Punkte 30274

Wenn Ihr CSS aus einer statischen Datei stammt, sollten Sie es, wie von Steve erwähnt, in einem statischen Verzeichnis ablegen und es in Ihrer app.yaml-Datei angeben. Wenn sich Ihre CSS-Dateien zum Beispiel in einem Verzeichnis namens stylesheets:

handlers:
- url: /stylesheets
  static_dir: stylesheets
  expiration: "180d"

Das Wichtigste dabei ist, dass Sie beim Hochladen einer neuen Version Ihrer CSS-Datei den Dateinamen ändern müssen, da die Besucher Ihrer Website sonst immer noch die alte, im Cache gespeicherte Version anstelle der neuen, glänzenden Version verwenden. Das einfache Erhöhen einer Zahl am Ende funktioniert gut.

Wenn Ihr CSS dynamisch generiert wird, sollten Sie die Zwischenspeicherung in den Headern des Antwortobjekts festlegen, wenn die Anforderung eingeht. In Ihrem Request-Handler könnten Sie zum Beispiel so etwas wie dies haben:

class GetCSS(webapp.RequestHandler):
  def get(self):
    # generate the CSS file here, minify it or whatever
    # make the CSS cached for 86400s = 1 day
    self.response.headers['Cache-Control'] = 'max-age=86400' 
    self.response.out.write(your_css)

0voto

Steve Gury Punkte 14228

Sie müssen nur Ihr gesamtes CSS in ein "statisches Verzeichnis" legen und in der app.yaml-Datei eine Ablauffrist angeben.

Hier ist die app.yaml von einem meiner Projekte:

application: <my_app_id>
version: 1
runtime: python
api_version: 1
skip_files: |
    ^(.*/)?(
    (app\.yaml)|
    (index\.yaml)|
    (\..*)|
    (.*\.pyc)|
    (.*\.bat)|
    (.*\.svn/.*)|
    (.*\.lnk)|
    (datastore/.*)|
    (img/src_img/.*)|
    )$

handlers:  
- url: /favicon\.ico
  static_files: img/favicon.ico
  upload: img/favicon.ico
  expiration: 180d

- url: /img
  static_dir: img
  expiration: 180d

- url: /static-js
  static_dir: static-js
  expiration: 180d

- url: .*
  script: main.py

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X