3

Ich habe eine Rails-Anwendung, die Google Cloud Storage für Bilder verwendet. Jede Ansicht enthält ungefähr 8 Bilder. Wenn ein Benutzer versucht, die Seite zu laden, dauert es aufgrund von Anforderungen an GCS mehr als 5 Sekunden.Google Cloud Storage-Anforderungen sind langsam mit Paperclip und Rails

Anfragen werden von Büroklammer mit folgenden Konfiguration vorgenommen:

config.paperclip_defaults = { 
    storage: :fog, 
    fog_credentials: { 
    google_storage_access_key_id: myAccessKey, 
    google_storage_secret_access_key: mySecretKey, 
    provider: 'Google' 
    }, 
    fog_public: true, 
    fog_directory: 'mybucket' 
} 

Meiner Ansicht nenne ich jedes Bild so aus:

<%= image_tag myAsset.image.url %> 

Gibt es einen schnelleren Weg, um das gleiche Ergebnis zu erreichen?

Lazy Load scheint mir ein Workaround eher als eine Lösung, ich bin ich falsch?

Hier New Relic berüchtigte Analyse (grün gehört Google Cloud Storage-Anforderungen)

enter image description here

+0

Wie groß ist die GCS-Ressource? Ist es nur ein Bild? Ist der Klassenstandard des Buckets, DRA oder Nearline? –

+0

Jede Ansicht hat ungefähr 8 Bilder von ungefähr 300kb jeder. Dann ist der Eimer ein _standard_ one. –

+0

Also, wenn es dauert 5 Sekunden, um die Bilder zu laden, und es gibt 8 300kb Bilder auf der Seite, das ist etwa 480kbps. Es gibt viele Internetnutzer, deren Internetgeschwindigkeit darauf beschränkt ist. Wissen Sie, wie langsam das Internet des Benutzers in Frage ist? –

Antwort

1

die Bilder für eine bestimmte Anforderung werden jedes Mal aus dem Backend gezogen? Wenn dies der Fall ist, verwenden Sie einen Cache für die Bilder, so dass Sie nur die Zeit für die erste Anfrage verwenden. möglicherweise fangen Sie sogar an, Bilder in einen Cache zu ziehen, nachdem Benutzerauthen in - lazy loading, wie Sie vorgeschlagen haben.

+1

Hallo @melgart, ich habe herausgefunden, dass die Langsamkeit auf Paperclip zurückzuführen ist und auf die Art wie URLs generiert werden. Sie können mehr hier finden: https://github.com/thoughtbot/paperclip/issues/2337 –

+0

nett! Danke, dass Sie dieses Wissen hier zurückbringen, wo jeder Ihre Lösung sehen kann. Sie werden wahrscheinlich jemanden später Stunden sparen. –

0

Ich kann nicht sagen, dass dies alles aussortiert, aber zumindest beschleunigt es.

fog_host scheint die Netzwerkanforderung zu vermeiden.

# config/application.rb 
module Parasite 
    class Application < Rails::Application 

    config.paperclip_defaults = { 
     fog_host: 'http://mybucektname.storage.googleapis.com', 
     # ... other options 
    } 

    end 
end 

Wenn Sie mehr überprüfen the code oder diesen Thread ich auf dem Paperclip Github Page geöffnet graben.