2009-06-10 3 views
2

Jedes Mal, wenn es einen Beitrag von Seite gibt, wird der gesamte Haufen von CSS neu geladen. Kann man ihnen sagen, dass sie nicht immer wieder reinkommen? Es gibt eine Reihe von GET, die gefeuert werden. Können wir in irgendeiner Weise optimieren oder ist es normales Verhalten?Statische Stylesheets werden mit jeder Post-Anfrage neu geladen

Die Umgebung ist Google Apps in Python.

+0

Ich habe die folgenden Zeilen in meinem app.yaml und noch neu lädt es mit jeder Anfrage, habe ich nicht die Exspirationsleitung obwohl haben, thx jeder für die Antwort. Handler: - URL:/Stylesheets static_dir: Stylesheets – dhaval

Antwort

2

Auschecken Verwenden Static Files und Handlers for Static Files. Da die letztere Verbindung sich auf die Cache-Dauer von statischen Dateien bezieht, glaube ich, dass die Caching-Funktionalität möglich ist.

Im Gegensatz zu einem herkömmlichen Web-Hosting- Umgebung, Google App Engine hat keine Dateien dienen direkt aus Ihrem Quellverzeichnis der Anwendung, es sei denn entsprechend konfiguriert. Wir haben unsere Vorlagendatei index.html genannt, aber diese stellt die Datei nicht automatisch unter der URL /index.html zur Verfügung.

Aber es gibt viele Fälle, in denen Sie statische Dateien direkt an den Webbrowser liefern möchten. Bilder, CSS Stylesheets, JavaScript-Code, Filme und Flash-Animationen sind alle in der Regel mit einer Web-Anwendung gespeichert und direkt an den Browser geliefert. Sie können App Engine anweisen, bestimmte Dateien direkt zu bedienen, ohne dass Sie Ihren eigenen Handler codieren müssen.

0

Sie müssen nur alle Ihre CSS in einem "statischen Verzeichnis" und geben Sie einen Ablauf in der app.Yaml-Datei. Hier

ist die app.yaml eines meines Projektes:

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 
1

Wenn Ihr CSS aus einer statischen Datei kommt, dann als Steve erwähnte Sie wollen, um es in einem statischen Verzeichnis, und geben Sie es in Ihrem app.yaml Datei. wenn Sie Ihre CSS-Dateien in einem Verzeichnis namens Sheets sind zum Beispiel:

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

Die kritische Sache damit zu erinnern ist, dass, wenn Sie eine neue Version Ihrer CSS-Datei laden, müssen Sie die Dateinamen ändern, weil sonst die Besucher auf Ihrer Website wird immer noch die alte zwischengespeicherte Version anstelle Ihres glänzenden neuen verwendet. Einfach eine Zahl am Ende inkrementieren funktioniert gut.

Wenn Ihr CSS dynamisch generiert wird, möchten Sie beim Eintreffen der Anfrage das Caching in den Kopfzeilen des Antwortobjekts festlegen. Zum Beispiel könnten Sie in Ihren Request-Handler etwas wie diese:

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)