Shopify Theme 开发 —— 性能优化
一、概述
关于 Shopify Theme 的性能优化,通常有以下几点:
1、卸载未使用的应用程序
有些 app 会在 theme 里面插入一些代码,即使 app 未被使用,也可能会加载一些脚本文件,影响页面渲染速度,所以建议不使用的 app 都卸载掉。
2、适当埋点,太多的埋点上报会影响网站速度
添加过多的埋点,也会影响网页加载速度,所以要适当添加必要的埋点。
3、为不同的设备提供最适合的图片
在下文中细说。
4、保持主题的版本最新
主题的更新经常会涉及到性能的优化,所以如果使用的是 Shopify 主题商店中的主题,最好保持主题的版本最新;如果是基于 dawn 主题自主开发的,也应该随时关注官方代码更新。
二、如何提供最适合的图片
1、目标
- 图片质量高
- 图片文件大小较小
- 图片以最佳方式加载,页面呈现快
2、image_url 和 image_tag 过滤器
shopify 提供了image_url 和 image_tag 过滤器来帮助生成响应式图像。
① image_url
用来生成图片在 Shopify CDN 的地址。它可以调整大小、裁剪、添加填充以及生成多种文件格式。
<!-- Input -->
{{ section.settings.image | image_url: width: 300 }} <!-- Output -->
//cdn.shopify.../files/dog.jpg?width=300
② image_tag
用来生成 HTML 的 img 标签,默认图片懒加载。
<!-- Input -->
{{ section.settings.image | image_url: width: 300 | image_tag }} <!-- Output -->
<img src="//cdn.shopify.../files/dog.jpg?width=300" width="300" height="393" />
3、关于图片格式
推荐 JPEG 或 JPG,如果浏览器兼容性允许,可以考虑 WEBP、AVIF、JPEG XL 等新的文件格式
不使用GIF,如果需要动图,也选择MP4
小 icon 之类的选择 svg 格式
️ 使用 image_url 过滤器,Shopify image API 会自动选择最合适的图片格式,可能是 WEBP、AVIF,在不支持新文件格式的浏览器,也会选择合适的格式
4、根据宽度设置不同尺寸图片
这里需要用到 img 标签的 srcset 和 sizes 属性。
<!-- Input -->
{{ section.settings.image |
image_url: width: 600 |
image_tag:
widths: '300, 600',
sizes: '(min-width: 400px) 298px, 78.75vw',
style: 'width: 300px' }}
<!-- Output -->
<img
src="//cdn.shopify.../files/dog.jpg?width=600"
srcset="
//cdn.shopify.../files/dog.jpg?width=300 300w,
//cdn.shopify.../files/dog.jpg?width=600 600w"
width="600"
height="785"
sizes="(min-width: 400px) 298px, 78.75vw"
style="width: 300px">
在上面的代码中,给浏览器提供了 2 个候选文件 - 一个为 300 像素宽,另一个为 600 像素宽,浏览器将根据用户的屏幕尺寸和设备像素比 (DPR) 来最终决定下载哪个。
️ 注意不要过度使用 srcset,尤其是网站流量不高的情况下,用户访问的图片可能还没有在 CDN 中缓存,这样加载时间会更长。
如果没有多尺寸图片,那么建议选择 2x 图。
5、<picture> 标签
<picture> 标签是一个比较新的 HTML 标签,可以根据浏览器支持的类型、屏幕尺寸等提供合适的图片。
① 根据浏览器选择合适的图片类型(<source>的type属性)
<picture>
<source type="image/avif" srcset="pug_life.avif" />
<source type="image/webp" srcset="pug_life.webp" />
<img src="pug_life.jpg" alt="pug wearing a striped t-shirt like a boss" />
</picture>
浏览器会按顺序读取<picture>里面<source>的类型,提供第一个匹配到的图片源,都不支持,则选择<img>保底。(在 liquid 中使用 image_url 过滤器可以达到一样的效果)
②根据屏幕尺寸提供不同的图片(<source>的media属性)
<picture>
<source
media="(min-width: 800px)"
srcset="wide_800.jpg 800w, wide_1600.jpg 1600w"
/>
<source
media="(min-width: 400px)"
srcset="narrow_400.jpg 400w, narrow_800.jpg 800w"
/>
<img src="wide_800.jpg" alt="Woman with dog looking at Grand Canyon" />
</picture>
③避免手机端图片过大
<picture>
<source
media="(max-width: 800px)"
srcset="
{{ section.settings.image | image_url: width: 300 }} 1x,
{{ section.settings.image | image_url: width: 600 }} 2x,
">
{{ section.settings.image |
image_url: width: 2000 |
image_tag:
widths: '1000, 2000',
sizes: '(min-width: 1000px) 760px, (min-width: 800px) calc(100vw - 380px), (min-width: 400px) 298px, 78.75vw',
class: 'mobile-size-fix' }}
</picture>
这个例子中800px以下的屏幕,只提供1x和2x的图,不会因为手机分辨率过高提供的图片太大。(1x的屏现在也很少了,这个1x可以按需保留)
6、结论
为了更好的加载图片,在写的时候,至少要用上 image_url 和 image_tag 过滤器,这样 Shopify image API 会帮你选择最合适的图片格式,还能懒加载。
{{ section.settings.image | image_url: width: 300 | image_tag }}
其次,如果同一张图,想在不同尺寸的设备上,加载不同尺寸的图,可以用 image_tag 的 sizes 和 widths。
{{ section.settings.image |
image_url: width: 600 |
image_tag:
widths: '300, 600',
sizes: '(min-width: 400px) 298px, 78.75vw',
style: 'width: 300px' }}
如果还希望不同尺寸使用不同的图片,那就可以试试使用 <picture> 标签。(具体看5,感觉 image_url 和 image_tag 基本上够用了)。
END--------------------------------
风是透明的河流,雨是冰凉的流星。
Shopify Theme 开发 —— 性能优化的更多相关文章
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
- 深入理解MySQL开发性能优化.pptx
深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.
- Android开发性能优化总结(一)
安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...
- Web项目开发性能优化解决方案
web开发性能优化---安全篇 1.ip验证 2.操作日志.安全日志.登录日志 3.SQL注入校验 4.权限管理 5.验证规范(前端.后端.数据库约束) 2014-10-29 08:04 2773 ...
- U3D开发性能优化笔记(待增加版本.x)
http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...
- (转) Android开发性能优化简介
作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...
随机推荐
- 学习Source Generators之IncrementalValueProvider
前面我们使用了IIncrementalGenerator来生成代码,接下来我们来详细了解下IIncrementalGenerator的核心部分IncrementalValueProvider. 介绍 ...
- Postman模拟浏览器网页请求并获取网页数据
本文介绍在浏览器中,获取网页中的某一个请求信息,并将其导入到Postman软件,并进行API请求测试的方法. Postman是一款流行的API开发和测试工具,它提供了一个用户友好的界面,用于创 ...
- #dp#JZOJ 1281 旅行
分析 考虑每次都是取出一个连续段置换一下, 可以预处理出相邻差的绝对值的前缀和, 但是如果正序无法知道上一段是从哪个终止的 所以倒序就可以了 代码 #include <cstdio> #i ...
- 中文GPTS,字节中文扣子Coze使用全教程
字节出自己的GPTS了,名字英文名叫coze,中文名叫"扣子".和OpenAI的GPTS类似.具有可定制性和完成特定任务的强大功能,它提供了一种新的GPT方式,可以让用户根据自己的 ...
- netty系列之:给ThreadLocal插上梦想的翅膀,详解FastThreadLocal
目录 简介 从ThreadLocalMap中获取数据 FastThreadLocal 总结 简介 JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值.而这些值是存储在Threa ...
- 小师妹学JavaIO之:文件写入那些事
目录 简介 字符输出和字节输出 格式化输出 输出其他对象 在特定的位置写入 给文件加锁 总结 简介 小师妹又对F师兄提了一大堆奇奇怪怪的需求,要格式化输出,要特定的编码输出,要自己定位输出,什么?还要 ...
- 2. Solving Linear Equations
2.1 Linear Equations Picture Row Picture 2 by 2 equations Two equations, Two unknowns \[\begin{matri ...
- 为 Hugging Face 用户带来无服务器 GPU 推理服务
今天,我们非常兴奋地宣布 部署到 Cloudflare Workers AI 功能正式上线,这是 Hugging Face Hub 平台上的一项新服务,它使得通过 Cloudflare 边缘数据中心部 ...
- HarmonyOS:Neural Network Runtime对接AI推理框架开发指导
场景介绍 Neural Network Runtime作为AI推理引擎和加速芯片的桥梁,为AI推理引擎提供精简的Native接口,满足推理引擎通过加速芯片执行端到端推理的需求. 本文以图1展示的A ...
- 重新点亮linux 命令树————文件权限和目录权限[九]
前言 简单整理一下文件权限和目录权限. 正文 当打开ls -al的时候会出现相关的权限信息. 那么上面文件类型包括: 普通文件 d 目录文件 b 块特殊文件 (设备,比如u盘) c 字符特殊文件 (终 ...