Procházet zdrojové kódy

improve: cache tool icons by setting max-age HTTP header and enable gzip compression SVG icons from backend (#2971)

Bowen Liang před 1 rokem
rodič
revize
1f98a4fff3

+ 3 - 1
api/config.py

@@ -59,7 +59,8 @@ DEFAULTS = {
     'CAN_REPLACE_LOGO': 'False',
     'ETL_TYPE': 'dify',
     'KEYWORD_STORE': 'jieba',
-    'BATCH_UPLOAD_LIMIT': 20
+    'BATCH_UPLOAD_LIMIT': 20,
+    'TOOL_ICON_CACHE_MAX_AGE': 3600,
 }
 
 
@@ -298,6 +299,7 @@ class Config:
         self.BATCH_UPLOAD_LIMIT = get_env('BATCH_UPLOAD_LIMIT')
 
         self.API_COMPRESSION_ENABLED = get_bool_env('API_COMPRESSION_ENABLED')
+        self.TOOL_ICON_CACHE_MAX_AGE = get_env('TOOL_ICON_CACHE_MAX_AGE')
 
 
 class CloudEditionConfig(Config):

+ 3 - 2
api/controllers/console/workspace/tool_providers.py

@@ -1,6 +1,6 @@
 import io
 
-from flask import send_file
+from flask import current_app, send_file
 from flask_login import current_user
 from flask_restful import Resource, reqparse
 from werkzeug.exceptions import Forbidden
@@ -80,7 +80,8 @@ class ToolBuiltinProviderIconApi(Resource):
     @setup_required
     def get(self, provider):
         icon_bytes, minetype = ToolManageService.get_builtin_tool_provider_icon(provider)
-        return send_file(io.BytesIO(icon_bytes), mimetype=minetype)
+        icon_cache_max_age = int(current_app.config.get('TOOL_ICON_CACHE_MAX_AGE'))
+        return send_file(io.BytesIO(icon_bytes), mimetype=minetype, max_age=icon_cache_max_age)
 
 class ToolModelProviderIconApi(Resource):
     @setup_required

+ 6 - 0
api/extensions/ext_compress.py

@@ -5,6 +5,12 @@ def init_app(app: Flask):
     if app.config.get('API_COMPRESSION_ENABLED', False):
         from flask_compress import Compress
 
+        app.config['COMPRESS_MIMETYPES'] = [
+            'application/json',
+            'image/svg+xml',
+            'text/html',
+        ]
+
         compress = Compress()
         compress.init_app(app)