关于 Swiper 的坑——只有3.3.1的非压缩版正常,非常奇怪

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/79013455 前一段时间,为了遵守《高性能网站建设指南》的约定——压缩JavaScript,我把swiper的版本由swiper.jquery.js改成了swiper.jquery.min.js,结果奇怪的事情发生了——安卓版的微信加载网页超级慢,而非微信版的浏览器访问网站均正常,这个问题,我还特意在网络上搜了搜,还真有人遇到这样的问题。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/79013455

前一段时间,为了遵守《高性能网站建设指南》的约定——压缩JavaScript,我把swiper的版本由swiper.jquery.js改成了swiper.jquery.min.js,结果奇怪的事情发生了——安卓版的微信加载网页超级慢,而非微信版的浏览器访问网站均正常,这个问题,我还特意在网络上搜了搜,还真有人遇到这样的问题。但解决办法没有。

这就奇了怪了,最初,我的怀疑对象肯定不是swiper,我怀疑是微信安卓版的签名问题。因为在使用 https://github.com/wechat-group/weixin-java-tools 进行签名的时候有这样一段代码:

  @Override
  public String getJsapiTicket(boolean forceRefresh) throws WxErrorException {
    Lock lock = this.getWxMpConfigStorage().getJsapiTicketLock();
    try {
      lock.lock();

      if (forceRefresh) {
        this.getWxMpConfigStorage().expireJsapiTicket();
      }

      if (this.getWxMpConfigStorage().isJsapiTicketExpired()) {
        String responseContent = execute(SimpleGetRequestExecutor.create(this), WxMpService.GET_JSAPI_TICKET_URL, null);
        JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent);
        JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject();
        String jsapiTicket = tmpJsonObject.get("ticket").getAsString();
        int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt();
        this.getWxMpConfigStorage().updateJsapiTicket(jsapiTicket, expiresInSeconds);
      }
    } finally {
      lock.unlock();
    }
    return this.getWxMpConfigStorage().getJsapiTicket();
  }

怀疑这段代码的原因就是它有一个lock,但时候证明原因不在于此。这个方法请求得响应结果特别的快。

后来,折腾了一天,实在是没招了,就只能回滚项目源码的版本,一次次试错,最后在临近晚上7点的时候才把问题确定在swiper上。

当时页面引用的swiper是这样的:

<script src="https://cdn.bootcss.com/Swiper/3.3.1/js/swiper.jquery.min.js"></script>

最初代码部署在阿里云的服务器上时,我手机是iPhone6,微信订阅号访问的时候速度特别正常。但是老板的手机是华为的安卓,微信访问慢得要人崩溃,这期间我一直认为不是代码的问题,而是他手机的问题,最后老板被客户逼急了,还刷了机(悲催的是数据还丢了),结果访问速度依然很慢。后来,他就来逼我,这™没有一点错误信息啊,我手机正常啊,非微信的安卓浏览器也访问正常啊。代码绝对是没有问题的。

后来没办法,别人的安卓手机微信访问网站也是慢,问题总要解决啊。

我必须要在本地重现这个问题了,使用微信提供的微信web开发者工具没有问题,Google Chrome浏览器没有问题。

然后开启ngrok,奇怪的现象发生了,我的手机iPhone6:

这里写图片描述

微信浏览器的进度条一直停留在大概这个位置!

现在我确信代码是在某个地方出现了bug!,确定无疑了!

回滚历史版本是必须的,这是一项重复性特别高的工作,一行一行代码的瞧啊,就像是在拾麦子一样。最后,问题终于找到是在swiper的应用上面!!!!!!!!!

把压缩版换成开发版:

<script src="https://cdn.bootcss.com/Swiper/3.3.1/js/swiper.jquery.js"></script>

这个时候,访问竟然正常了!!!!!!!!!!!!!!神奇的swiper!!!!!!!!!!!!

把swiper切换成3.4.2的开发版还是压缩版,都依然有问题。

<script src="https://cdn.bootcss.com/Swiper/3.4.2/js/swiper.jquery.js"></script>

是不是使用swiper的时候出错了呢?
这问题我也考虑过,试验过。

new Swiper('.recom-container', {
    pagination : '.recom-pagination',
    lazyLoading : true,
    slidesPerView : 1,
    paginationClickable : true,
});
// 热点新闻
new Swiper('.index-new-list', {
    autoplay : 3000,
    direction : 'vertical',
    loop : true,
    paginationClickable : true
});

// 导航
new Swiper('.index-nav', {
    scrollbarHide : true,
    slidesPerView : 'auto',
    centeredSlides : false,
    grabCursor : true
});

使用方法应该是没有问题的,应该就是swiper版本的问题,当然这问题的发生也特别的奇怪,它阻碍页面的呈现。并且看浏览器的脸色。

问题的结果,也只能是说swiper在版本更新的时候忽略了某些浏览器的兼容,导致内部的某些地方阻塞。

解决的方案,其实也很简单,只能将就使用3.3.1的开发版。也就是

<script src="https://cdn.bootcss.com/Swiper/3.3.1/js/swiper.jquery.js"></script>

如果你遇到和我类似的问题,还希望和你进行沟通!

相关文章
|
搜索推荐 Java 开发者
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
【5月更文挑战第14天】org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
5140 1
【亲测】cgi-bin/user/info获取用户信息接口部分用户unionId获取不到?
【亲测】cgi-bin/user/info获取用户信息接口部分用户unionId获取不到?
443 0
|
Kubernetes 负载均衡 网络安全
【K8S系列】深入解析k8s网络
【K8S系列】深入解析k8s网络
2230 0
|
缓存 资源调度 Kubernetes
详解 Flink 容器化环境下的 OOM Killed
本文将解析 JVM 和 Flink 的内存模型,并总结在工作中遇到和在社区交流中了解到的造成 Flink 内存使用超出容器限制的常见原因。由于 Flink 内存使用与用户代码、部署环境、各种依赖版本等因素都有紧密关系,本文主要讨论 on YARN 部署、Oracle JDK/OpenJDK 8、Flink 1.10+ 的情况。
详解 Flink 容器化环境下的 OOM Killed
|
Java Apache Maven
【异常解决】Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: org/apache/common
【异常解决】Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: org/apache/common
9682 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
586 212