外贸网站建设,外贸网站建设公司,跨境电商独立站

外贸网站中的节流方案

时间:2026-10-06   访问量:1001

由于外贸站一般放在国外,国内访问的速度一般会比较慢。所以我们在做站的时候,需要对网站进行一些优化和节流操作。

1:图片节流。

图片是影响网站速度的最大凶手之一,所以在上传图片的时候,尺寸压缩小一些,然后压缩成.webp后缀的格式。

同时在响应式网站开发中,有一些比如说首页BANNER图片,需要设计两张不同尺寸图片的时候,可以使用以下代码,方便在PC端和手机端上单独加载

  <picture>
                <source srcset="大图路径" media="(min-width: 768px)"> 
                <img src="小图路径" class="d-block w-100" alt="标题" fetchpriority="high">
              </picture>

上面代码的意思是在小屏时加载src中的图片,当大于768像素的时候就加载大图。

如果需要单独使用不同的模块展示方式,也就是PC和WAP使用不同的代码模块来展示时,那么需要单独写代码时,这时候,PC端不加载一些图片,WAP不加载另一些图片时可用以下代码 :以下是手机端,表示在电脑端时不显示一个无用的小图

  <picture>
     <source srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" media="(min-width: 768px)">
       <img src="[list:ico]" class="w-100" alt="[list:title]" style="display: block;">
 </picture>

如果相反,我们需要在大于768上显示,小于768的时候不显示。

<picture>
    <source srcset="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" media="(max-width: 767px)">
    <source srcset="medium.jpg" media="(min-width: 768px) and (max-width: 1024px)">
    <source srcset="large.jpg" media="(min-width: 1025px)">    
    <img src="large.jpg" ...>
</picture>



2:SEO优化中的MORE按钮

在网页中我们经常需要使用按钮,比如说MORE,同一个页面会有多个MORE这样的按钮,但是搜索引擎在获取这些按钮的时候,发现是相同的文字内容,对SEO并不友好,我们需要添加aria-label和一个隐藏的文字说明,例如:

<a href="" class="More-btn-black" aria-label="不同的文字说明,比如说不同的标题">MORE<span class="visually-hidden">不同的文字说明,比如说不同的标题</span><i class="bi bi-arrow-right-short"></i></a>

其中visually-hidden类是BOOTSTRAP自带的类,大概意思是写了一个宽和高是1PX的或者0PX的SPAN,然后使用absolute将他浮动起来,这样就不会占用原来的空间,其实也就相当于隐藏了。但是给搜索了一个不同的标题。


3:表格在手机端的优化。

在发布新闻的时候,常常会复制一些表格到内容中,正常在PC端显示是正常的,比如说表格很宽,内容很多。但是到了移动端的时候,表格因为太大,而手机尺寸太小无法查看,如果限制强制100%的话,宽度又太小,导致看着不清楚, 这个时候我们可以用JS强制新闻详情中带有table的表格参加响应反应。

<script type="text/javascript" charset="utf-8">
document.querySelectorAll('table').forEach(function(table) {
    // 避免重复包裹
    if (!table.parentElement.classList.contains('table-responsive')) {

        // 创建提示文字
        const tip = document.createElement('div');
        tip.className = 'd-block d-md-none my-1';
        tip.textContent = ' '; // 创建提示文字

        // 创建包裹容器
        const wrapper = document.createElement('div');
        wrapper.className = 'table-responsive';

        // 插入提示文字(在 table-responsive 上方)
        table.parentNode.insertBefore(tip, table);

        // 插入 table-responsive 容器
        table.parentNode.insertBefore(wrapper, table);

        // 把 table 放进 wrapper
        wrapper.appendChild(table);
    }
});
</script>

上面代码的意思是检测网页中慧table,就添加一个外包裹的bootstap框架自带的table-responsive类的div,让他成为可以左右拖动的表格,如果你用的不是bootstap框架,那可以自定义一下CSS就可以了。


4: 网页中的视频优化。

如果首页存在视频,加载速度会非常慢。

方案:利用 preload="none"(最简单,推荐),这种情况 下一定要添加封面图。

<video controls preload="none" poster="cover-image.jpg">
    <source src="your-video.mp4" type="video/mp4">
    您的浏览器不支持 HTML5 视频。
</video>


考虑到一些手机极端的情况下,虽然写了 preload="none",但在某些移动端浏览器下,只要 src 存在,浏览器有时仍会尝试握手获取视频头部信息。最高级的做法是将真实的地址放在 data-src 中,点击时再交给 src:

<div class="myvideo">
             <video  id="myVideo"  data-src="/static/video/1.mp4"   poster="[content:ico]"  preload="none" muted   loop playsinline  class="w-100"  data-aos="fade-in" data-aos-duration="1000" ></video>            
             <a  id="palyvideo"><i class="bi bi-play-circle-fill fs-100 fs-sm-40"></i><div class="fs-40 fs-sm-20 mt-1 colorfff">Play Video</div></a>
            </div>

再使用JS,加载的时候再当视频载入。

// 在 playBtn 的点击事件里
playBtn.addEventListener('click', function () {
    if (!video.src || video.src === "") {
        // 这一步才真正开始触发网络下载
        video.src = video.getAttribute('data-src'); 
        video.load(); 
    }
    hasStartedPlaying = true;
    video.muted = false;
    video.play();
    playBtn.style.display = 'none';
});

同时还可以优化一下当点击播放视频了,往上滑或者往下滑的时候,我们明明没有看到视频,但是视频还在播放,声音也还在,优化一下就是视频滑离视窗时,暂停播放,回来之后,继续播放。

<!------视频----->
<script>
document.addEventListener('DOMContentLoaded', function () {
    const video = document.getElementById('myVideo');
    const playBtn = document.getElementById('palyvideo');
    let hasStartedPlaying = false;

    // 播放逻辑封装
    function startVideo() {
        if (!hasStartedPlaying) {
            const realSrc = video.getAttribute('data-src');
            if (realSrc) {
                video.src = realSrc;
                video.load();
            }
            hasStartedPlaying = true;
        }
        video.muted = false;
        video.volume = 1.0;
        video.play().catch(e => console.log("播放失败:", e));
        playBtn.style.display = 'none';
    }

    // 1. 点击播放按钮
    playBtn.addEventListener('click', startVideo);

    // 2. 点击视频本身切换暂停/播放
    video.addEventListener('click', function () {
        if (!video.paused) {
            video.pause();
            playBtn.style.display = 'block';
        } else {
            startVideo();
        }
    });

    // 3. 检测视野(续播/暂停)
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                // 只有手动点过播放,回到视野才自动续播
                if (hasStartedPlaying) {
                    video.play();
                    playBtn.style.display = 'none';
                }
            } else {
                // 只有正在播放时,离开视野才暂停
                if (hasStartedPlaying && !video.paused) {
                    video.pause();
                    playBtn.style.display = 'block';
                }
            }
        });
    }, { threshold: 0.1 });

    observer.observe(video);
});
</script>



5: 产品详情中的多图优化。

如果我们的产品详情像电商详情一样多张图片,那么我们可以使用懒加载的方式来加载。

例如:

 <div class="info-pics mt-1">
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"   data-src="图片真实地址"  class="w-100 lazy-load-img">                  
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"   data-src="图片真实地址"  class="w-100 lazy-load-img">
     ................几十张图片                       
</div>

为了让他显示得优雅一些,CSS中必须加入以下代码,一开始loading的时候加载的是一个loading.svg,且这个svg的尺寸是:40px,避免太大不好看,然后加载成功后,移除去loading.svg

.info-pics img {
    width: 100%;
    min-height: 250px; /* 必须有,否则透明图没高度,用户看不见 loading */
    background-color: #f8f9fa;
    background-image: url('/static/images/loading.svg'); /* 将 loading 设为背景 */
    background-repeat: no-repeat;
    background-position: center;
    background-size: 40px; /* 控制 loading 图标大小 */
    
    object-fit: cover; /* 真实图加载后充满 */
    opacity: 0; /* 初始隐藏,加载完再显现 */
    transition: opacity 0.3s;
}

.info-pics img.loaded {
    opacity: 1;
    background-image: none; /* 加载完移除 loading 图标 */
}


然后只需要写上以下的JS加载。

<script type="text/javascript" charset="utf-8">

/***********************
 *  图片懒加载
 ***********************/ 

document.addEventListener("DOMContentLoaded", function() {
    const infoPics = document.querySelectorAll(".info-pics img");
    if (infoPics.length === 0) return;

    const ua = navigator.userAgent;
    const isIOSBaidu = /iPhone|iPad|iPod/i.test(ua) && /baiduboxapp/i.test(ua);

    // 处理加载完成后的类名切换(新增封装)
    function handleImageLoaded(img) {
        img.classList.add('loaded'); // 关键:加载完添加 loaded 类,改变 object-fit
        img.removeAttribute('data-src');
        img.style.opacity = "1";
    }
  // -------------------------------
    // ① 针对 iOS 百度 APP 的处理:直接加载
    // -------------------------------
    if (isIOSBaidu) {
        infoPics.forEach(img => {
            if (img.dataset.src) {
                img.src = img.dataset.src;
                // iOS 百度也需要监听加载完成
                img.onload = () => handleImageLoaded(img);
            }
        });
        return;
    }
  // -------------------------------
    // ② 针对其他现代浏览器的处理:懒加载
    // -------------------------------
    if ('IntersectionObserver' in window) {
        const observer = new IntersectionObserver((entries) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    const img = entry.target;
                    const realSrc = img.dataset.src;
                    if (realSrc) {
                        img.src = realSrc;
                        // 图片加载成功后切换样式
                        img.onload = () => handleImageLoaded(img);
                    }
                    observer.unobserve(img);
                }
            });
        }, { rootMargin: "300px 0px" });

        infoPics.forEach(img => observer.observe(img));
    } else {
        infoPics.forEach(img => {
            if (img.dataset.src) {
                img.src = img.dataset.src;
                img.onload = () => handleImageLoaded(img);
            }
        });
    }
});
</script>

如此便非常优雅了。

我们可以使用谷歌浏览器中的低速4G来测试一下加载过程。

外贸网站中的节流方案


6:首页BANNER的优化。

假如我们首页BANNER图片有多张,比如三张,五张,那么网站第一屏打开的时候,如下图,虽然其他的速度都非常快,但是在谷歌的测试中,如果不做特殊处理,LCP 依然会很高。主要问题出在:浏览器分不清哪一张才是真正的“首屏大图”。

外贸网站中的节流方案

解决方案:给第一张图片添加 fetchpriority="high",其他的图片添加懒加载loading="lazy"。

    <div class="swiper-wrapper">
        {hmcms:slide num=10 gid=1}
        <div class="swiper-slide">
            <a href="[slide:link]">              
               <picture>
                <source srcset="[slide:src]" media="(min-width: 768px)"> 
                <img src="[slide:ico]" class="d-block w-100" alt="[slide:title]"   {hmcms:if('[slide:i]'=='1')} fetchpriority="high" {else}loading="lazy" {/hmcms:if}>
              </picture>
            </a>
            <div class="container-xl">
                <div class="position-relativeition-absolute text-light" style="top:30%;">
                    <h1 class="fs-20 fs-sm-32 "   data-aos="fade-up" data-aos-duration="1000" >[slide:title]</h1>
                    <h4 class="fs-14 fs-sm-20 "   data-aos="fade-up" data-aos-duration="1000" >[slide:subtitle]</h4>
                </div>
            </div>
        </div>
        {/hmcms:slide}
    </div>

配合SWIPER中自带的懒加载:

  lazy: true, // 开启 Swiper 的懒加载功能
    watchSlidesProgress: true, // 开启这个能让 Swiper 更好地配合原生加载

同时我们可以在</head>之前添加上预加载图片:

   {hmcms:if(0=='{sort:scode}')}{hmcms:slide num=1 gid=1}<link rel="preload" as="image" href="[slide:src]" media="(min-width: 768px)">
    <link rel="preload" as="image" href="[slide:ico]" media="(max-width: 767px)">{/hmcms:slide}{/hmcms:if}   
</head>



7: css 和JS的顺序。

请一定要记得,JS不要在HEAD中引入,一定要放在网页尾部。除非你有什么JS非用在顶部引入之外。否则在谷歌SPEED测试的时候,在一开始渲染JS的时候会需要很长时间,虽然PC端感觉不出来,但是由于他的手机端是在低速4G的极端模式下测试的,这个时候如果JS在头部,会严重影响加载速度。


8: 字体的引入。

英文网站为了美观,通常需要引入专用字体。但是如果直接在服务器上存放字体引入,既然你的字体只有40KB,100KB,你使用谷歌检测工具在检测的时候,性能也会变得非常弱,特别是:Largest Contentful Paint的渲染会变得非常慢。

解决方案,统一调用谷歌字体,谷歌提供了非常丰富的字体供大家使用。

方案:在HEAD中引入:

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Tapestry&display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Tapestry&display=swap" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&family=Tapestry&display=swap"></noscript>

然后CSS中可引入:

html,body{
  font-family: 'Roboto',"PingFangSC-Regular", "PingFang SC", "Microsoft Yahei", Arial !important; 
}
.Roboto{
  font-family: 'Roboto', sans-serif!important;;
}
.Roboto-bold{
  font-family: 'Roboto', sans-serif!important;;
    font-weight: 700;
}

.Tapestry{
  font-family: 'Tapestry', cursive!important;
}


谷歌字体选择网址:提供了大量的字体供大家选择。

https://fonts.google.com/?preview.script=Latn&categoryFilters=Feeling:%2FExpressive%2FVintage

外贸网站中的节流方案

通过以上优化,我们可以看到效果。

外贸网站中的节流方案


同时手机端在低速4G节流模式下,也优化到了3秒以内。虽然看着时间长,但是对于手机来说,用户体验基本上也OK了,何况我们首页的内容相当的多:

1:幻灯6张,PC端+手机端一共:12张

2: 产品列表图8张

3:视频一个9M,

4:15张小LOGO合作伙伴图。

5:案例展示大图6张,PC端和手机端一共:12张

6: 资质证书 5张图

7:新闻中心:4张图

在压缩如此巨大的情况下,这种优化已经到了极致。

外贸网站中的节流方案

很多所谓的SEO优化从业人员,总是喜欢用谷歌SPEA来测试网站性能。

然而他们并不会在乎PAGESPEED在手机端使用的是低速4G节流模式。

所以既然你在测试的时候,发现移动端的得分很低,也不必忧伤,因为这是谷歌在模板测试的时候,是在极其严格很差的状态下的效果,而如今普遍都是高速4G甚至是5G网络了,在实际的用户体验中,效果应该不会差的。


谷歌 PageSpeed Insights(PSI)在测试移动端时,默认会模拟中端手机(如 Moto G4)以及低速 4G 网络(Slow 4G)环境。许多开发者对此感到困惑:明明现在 5G 已经普及,大家也都用上了高性能旗舰机,为什么谷歌还要用这么“卡”的环境来跑测试?

谷歌这样做并非技术滞后,而是基于以下几个核心的技术与用户体验考量:


1. 悲观原则:为“最坏的网络情况”做准备

移动端网络的最大的特点是极度不稳定。

  • 物理环境的限制: 即使你使用的是 5G 手机和 5G 套餐,当你进入地下车库、电梯、密闭的高楼内部、或者坐在快速行驶的高铁/地铁上时,信号会瞬间跌落。

  • 网络降级模拟: 谷歌模拟的“低速 4G”(通常限制为吞吐量约 1.6 Mbps,延迟 150ms),就是为了模拟这种用户在日常生活中随时可能遇到的“信号变差”的场景。如果网站在低速 4G 下都能流畅打开,那么在完美的 5G 或 Wi-Fi 环境下绝对会飞快。

2. 拥抱全球化与长尾用户(包容性设计)

作为全球性的搜索引擎,谷歌制定的标准需要照顾到所有网民,而不仅仅是发达城市里拿着最新旗舰机的用户。

  • 设备与网络断层: 在全球范围内(甚至在发达国家的偏远地区),仍有海量用户使用的是千元机(低端处理器)和清退 3G 后勉强支撑的低速 4G 网络。

  • 公平性: 如果 PSI 默认用 5G 和 iPhone 15 Pro 来测试,那么开发者就会忽视网页代码冗余、图片过大的问题。这会导致低配设备和差网络下的用户完全打不开网页,造成严重的“数字鸿沟”。

3. 放大瓶颈,逼出网页的“技术硬伤”

在极高的网络带宽和桌面端超强的 CPU 性能下,很多网页底层的性能问题会被“掩盖”过去。

  • 木桶效应: 当把网络限制在低速 4G,把 CPU 性能削弱到中端机水平时,网页的劣势就会被成倍放大。例如:未压缩的重度 JavaScript 脚本、几兆大小的未优化图片、阻塞渲染的第三方插件等。

  • 倒逼优化: 这种“严苛”的测试环境能让开发者清晰地看到:到底是什么资源在网络差的时候成为了卡死网页的“罪魁祸首”(例如导致 LCP 或者是 INP 指标飙红),从而精准优化。


核心误区澄清:PSI 分数 $\neq$ 真实用户体验

很多站长因为移动端得分低而焦虑,这里需要分清 PageSpeed Insights 中的两种数据:

  1. 实验室数据(Lab Data): 也就是你点击“分析”后当场跑出来的分数。这个分数正是基于上述低速 4G 和慢 CPU 模拟出来的。它是一个固定的“压力测试”,用于指导你改代码。

  2. 实际现场数据(Field Data / CrUX): 在分数牌的上方,通常会显示“了解真实用户的体验”。这是谷歌收集的过去 28 天内,真正访问你网站的真人用户的真实数据(Chrome 浏览器用户体验报告)。

⚠️ 核心结论: > 如果你的网站核心用户全在大城市,他们普遍用着 5G 和高端机,那么你的现场数据(实际体验)可能全是绿色(优秀);但由于谷歌的“实验室模拟”非常严格,你的实验室分数可能只有 60 分。

优化时,优先保证真实用户现场数据(Core Web Vitals)达标。至于那个模拟低速 4G 的实验室分数,尽力而为即可,无需为了追求 100 分而砍掉网站的核心功能。



上一篇:谷歌SEO优化标准

下一篇:

正在加载评论…