perf: add defer to scripts and lazy loading to images
Some checks failed
Some checks failed
Add defer attribute to 145 <script> tags across 103 template files (PERF-067) and loading="lazy" to 22 <img> tags across 13 template files (PERF-058). Both improve page load performance. Validator totals: 0 errors, 2 warnings, 1360 info (down from 1527). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -234,5 +234,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/admin-user-detail.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/admin-user-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -268,5 +268,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/admin-user-edit.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/admin-user-edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -258,5 +258,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/admin-users.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/admin-users.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -106,16 +106,16 @@
|
||||
<!-- Scripts - ORDER MATTERS! -->
|
||||
|
||||
<!-- 1. Log Configuration -->
|
||||
<script src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
|
||||
<!-- 2. Icons -->
|
||||
<script src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
|
||||
<!-- 3. Utils -->
|
||||
<script src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
|
||||
<!-- 4. API Client -->
|
||||
<script src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
|
||||
<!-- 5. Alpine.js v3 with CDN fallback -->
|
||||
<script>
|
||||
@@ -135,6 +135,6 @@
|
||||
</script>
|
||||
|
||||
<!-- 6. Login Logic -->
|
||||
<script src="{{ url_for('core_static', path='admin/js/login.js') }}"></script>
|
||||
<script defer src="{{ url_for('core_static', path='admin/js/login.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -452,5 +452,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/merchant-detail.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/merchant-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -445,5 +445,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/merchant-edit.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/merchant-edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -247,5 +247,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/merchant-user-detail.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/merchant-user-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -226,5 +226,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/merchant-users.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/merchant-users.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -245,5 +245,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/merchants.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/merchants.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -144,5 +144,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('static', path='admin/js/module-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='admin/js/module-config.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -270,5 +270,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('static', path='admin/js/module-info.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='admin/js/module-info.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -297,5 +297,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/platform-detail.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/platform-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -320,5 +320,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/platform-edit.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/platform-edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -196,5 +196,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/platform-menu-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/platform-menu-config.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -278,5 +278,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/platform-modules.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/platform-modules.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -158,5 +158,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/platforms.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/platforms.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -111,11 +111,11 @@
|
||||
</div>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
<script src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
<script src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
<script src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/select-platform.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/select-platform.js') }}"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.13.3/dist/cdn.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -279,5 +279,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/store-create.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/store-create.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<div class="grid gap-6 mb-8 md:grid-cols-4">
|
||||
<!-- Verification Status -->
|
||||
<div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
|
||||
<div class="p-3 mr-4 rounded-full"
|
||||
<div class="p-3 mr-4 rounded-full"
|
||||
:class="store?.is_verified ? 'text-green-500 bg-green-100 dark:text-green-100 dark:bg-green-500' : 'text-orange-500 bg-orange-100 dark:text-orange-100 dark:bg-orange-500'">
|
||||
<span x-html="$icon(store?.is_verified ? 'badge-check' : 'clock', 'w-5 h-5')"></span>
|
||||
</div>
|
||||
@@ -268,11 +268,11 @@
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase">Website</p>
|
||||
<a
|
||||
<a
|
||||
x-show="store?.website"
|
||||
:href="store?.website"
|
||||
:href="store?.website"
|
||||
target="_blank"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400"
|
||||
x-text="store?.website">
|
||||
</a>
|
||||
<span x-show="!store?.website" class="text-sm text-gray-700 dark:text-gray-300">-</span>
|
||||
@@ -327,28 +327,28 @@
|
||||
<div class="space-y-3">
|
||||
<div x-show="store?.letzshop_csv_url_fr">
|
||||
<p class="text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase mb-1">French (FR)</p>
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_fr"
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_fr"
|
||||
target="_blank"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
x-text="store?.letzshop_csv_url_fr">
|
||||
</a>
|
||||
</div>
|
||||
<div x-show="store?.letzshop_csv_url_en">
|
||||
<p class="text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase mb-1">English (EN)</p>
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_en"
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_en"
|
||||
target="_blank"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
x-text="store?.letzshop_csv_url_en">
|
||||
</a>
|
||||
</div>
|
||||
<div x-show="store?.letzshop_csv_url_de">
|
||||
<p class="text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase mb-1">German (DE)</p>
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_de"
|
||||
<a
|
||||
:href="store?.letzshop_csv_url_de"
|
||||
target="_blank"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
class="text-sm text-purple-600 hover:text-purple-700 dark:text-purple-400 break-all"
|
||||
x-text="store?.letzshop_csv_url_de">
|
||||
</a>
|
||||
</div>
|
||||
@@ -389,5 +389,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/store-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/store-detail.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -428,5 +428,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/store-edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/store-edit.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -446,5 +446,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/store-theme.js') }}"></script>
|
||||
{% endblock %}
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/store-theme.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -124,6 +124,6 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/store-themes.js') }}"></script>
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/tom-select@2.3.1/dist/js/tom-select.complete.min.js"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/store-themes.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -228,5 +228,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/stores.js') }}"></script>
|
||||
{% endblock %}
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/stores.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -189,5 +189,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='admin/js/user-create.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='admin/js/user-create.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -107,16 +107,16 @@
|
||||
<!-- Scripts - ORDER MATTERS! -->
|
||||
|
||||
<!-- 1. Log Configuration -->
|
||||
<script src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
|
||||
<!-- 2. Icons -->
|
||||
<script src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
|
||||
<!-- 3. Utils -->
|
||||
<script src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
|
||||
<!-- 4. API Client -->
|
||||
<script src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
|
||||
<!-- 5. Alpine.js v3 with CDN fallback -->
|
||||
<script>
|
||||
@@ -136,6 +136,6 @@
|
||||
</script>
|
||||
|
||||
<!-- 6. Merchant Login Logic -->
|
||||
<script src="{{ url_for('core_static', path='merchant/js/login.js') }}"></script>
|
||||
<script defer src="{{ url_for('core_static', path='merchant/js/login.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -140,21 +140,21 @@
|
||||
<!-- Scripts - ORDER MATTERS! -->
|
||||
|
||||
<!-- 1. Log Configuration -->
|
||||
<script src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/log-config.js') }}"></script>
|
||||
|
||||
<!-- 2. Icons -->
|
||||
<script src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/icons.js') }}"></script>
|
||||
|
||||
<!-- 3. Utils -->
|
||||
<script src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/utils.js') }}"></script>
|
||||
|
||||
<!-- 4. API Client -->
|
||||
<script src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
<script defer src="{{ url_for('static', path='shared/js/api-client.js') }}"></script>
|
||||
|
||||
<!-- 5. Alpine.js v3 -->
|
||||
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.14.0/dist/cdn.min.js"></script>
|
||||
|
||||
<!-- 6. Login Logic -->
|
||||
<script src="{{ url_for('tenancy_static', path='store/js/login.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='store/js/login.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -202,5 +202,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='store/js/profile.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='store/js/profile.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1402,5 +1402,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='store/js/settings.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='store/js/settings.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -289,5 +289,5 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts %}
|
||||
<script src="{{ url_for('tenancy_static', path='store/js/team.js') }}"></script>
|
||||
<script defer src="{{ url_for('tenancy_static', path='store/js/team.js') }}"></script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user