为啥我的代码仅在 Safari 桌面上运行缓慢?

Posted

技术标签:

【中文标题】为啥我的代码仅在 Safari 桌面上运行缓慢?【英文标题】:Why is my code slow in safari desktop only?为什么我的代码仅在 Safari 桌面上运行缓慢? 【发布时间】:2021-02-08 05:02:13 【问题描述】:

我正在构建一个使用一些动画/库的网站,AOS、simpleParallax 和 slick 是主要的。该网站似乎在除 Safari 桌面之外的所有地方都可以正常运行。它在 Chrome、Firefox、Microsoft edge、Opera 中运行良好,在移动设备上的 Safari 中也运行良好,但在 Safari 桌面上运行非常缓慢且不稳定。

这是我用于“服务”和“常见问题”页面上的滑块的功能

// slider
 (function () 
        var work = $('.js-work'),
            sliderWork = work.find('.js-work-slider');

        sliderWork.slick(
            slidesToShow: 3,
            slidesToScroll: 1,
            dots: false,
            arrows: true,
            prevArrow: sliderWork.parents('.js-work').find('.js-prev'),
            nextArrow: sliderWork.parents('.js-work').find('.js-next'),
            speed: 900,
            adaptiveHeight: true,
            autoplay: true,
            autoplaySpeed: 10000,
            responsive: [
                breakpoint: 1024,
                settings: 
                    slidesToShow: 3
                
            , 
                breakpoint: 768,
                settings: 
                    slidesToShow: 3,
                    focusOnSelect: true,
                    vertical: true,
                    verticalSwiping: true
                
            ]
        );
    )();

这是整个网站使用的视差效果

// parallax effect
(function () 
    var parallax = $('.js-parallax');
    if (parallax.length) 
        parallax.each(function () 
            var _this = $(this),
                scale = _this.data('scale'),
                orientation = _this.data('orientation');

            new simpleParallax(_this[0], 
                scale: scale,
                orientation: orientation,
                overflow: true,
                delay: .6,
                transition: 'cubic-bezier(0,0,0,1)'
            );
        );
    
)();

这是网页主标题上用于 AOS 的 CSS 示例。 AOS 在整个网站上都被大量使用,但我不会说它的使用量过多。


.main__title[data-aos] p span 
  -webkit-transform: translateY(105%);
  -ms-transform: translateY(105%);
  transform: translateY(105%);
  -webkit-transition: -webkit-transform 0.8s;
  transition: -webkit-transform 0.8s;
  -o-transition: transform 0.8s;
  transition: transform 0.8s;
  transition: transform 0.8s, -webkit-transform 0.8s;


.main__title[data-aos].aos-animate p span 
  -webkit-transform: translateY(0);
  -ms-transform: translateY(0);
  transform: translateY(0);


.main__title[data-aos].aos-animate p:first-child span:first-child 
  -webkit-transition-delay: 0.2s;
  -o-transition-delay: 0.2s;
  transition-delay: 0.2s;


.main__title[data-aos].aos-animate p:first-child span:nth-child(2) 
  -webkit-transition-delay: 0.4s;
  -o-transition-delay: 0.4s;
  transition-delay: 0.4s;


.main__title[data-aos].aos-animate p:nth-child(2) span:first-child 
  -webkit-transition-delay: 0.6s;
  -o-transition-delay: 0.6s;
  transition-delay: 0.6s;


.main__title[data-aos].aos-animate p:nth-child(2) span:nth-child(2) 
  -webkit-transition-delay: 0.8s;
  -o-transition-delay: 0.8s;
  transition-delay: 0.8s;


.main__title[data-aos].aos-animate p:nth-child(3) span:first-child 
  -webkit-transition-delay: 1s;
  -o-transition-delay: 1s;
  transition-delay: 1s;
 



我几乎不知道如何解决这个问题,它在移动设备上的 safari 中运行良好,但在桌面上完全损坏,这似乎很奇怪。请记住,这个网站仍在进行中,而且我是一个初学者,但我真的很想在进一步研究之前找到这个问题的解决方案。

如果有人能够指出我可能做错了什么,或者可以解释 Safari 可能与其他浏览器不同的操作方式,我将不胜感激!

这里是项目https://secure-hollows-07774.herokuapp.com/

【问题讨论】:

我在您之前的问题的评论中解释过,这不太可能是由您的滑块引起的。我会复制粘贴到这里。 您的延迟问题是由您处理动画的方式引起的。当您滚动时,您会为每个触发的滚动事件(每个像素移动都会触发)更改翻译等。例如,您在主背景上有 0.6 秒的延迟(滚动时向左移动的绿色形状)。当您由于滚动而每 0.1 秒更改一次平移时,您会排队等待所有重叠的动画负载,这会导致延迟。如果您限制滚动速率以匹配您的动画速度,它将解决问题。我会使用 0.3 秒的油门和 0.3 秒的动画来使其流畅。 对不起,我不确定我是怎么错过你的第一条评论的,所以你是说我应该在我的代码中引入一个节流函数?然后更改我的视差函数中的“延迟”以匹配 300 的油门?谢谢你的时间,我很感激 是的,尝试一下,我的意思是不能保证是原因,但过去有过类似的问题,我有 90% 的信心是它。试一试,如果它仍然不起作用,我会为你进一步研究。 @GrahamRitchie 我尝试了 lodash 油门,但似乎并没有解决问题。我不完全确定问题出在视差上,因为我可以删除视差功能,但它仍然非常滞后,而且“关于”页面使用视差功能 6 次,并且与“服务”相比运行平稳,并且视差只使用一次的“常见问题”页面 【参考方案1】:

刚刚在 Safari 上尝试过,我觉得它很棒。也许尝试清除浏览器中的 cookie?

【讨论】:

真的吗?这很奇怪,我已经尝试清除 cookie 和缓存,但仍然没有运气。我之前也把它发给了几个朋友,他们在 Safari 上运行它并说它超级慢。我很困惑 这真的很奇怪。它不仅加载速度快,而且动画非常流畅。 如果您还没有尝试这个,也许可以试试? discussions.apple.com/thread/… 谢谢,我会试试的。这听起来像是解决我的问题的解决方案,但我仍然担心它在其他人的计算机上会很慢。我知道它对你很有效,但其他人说它很慢。如果你不介意我问,你用的是什么电脑 2016 MB Pro - 如果您愿意,我也可以在 2013 iMac 上试用它吗?

以上是关于为啥我的代码仅在 Safari 桌面上运行缓慢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Mobile Safari 缓存不会清除?

为啥我的 C 代码运行缓慢?

为啥桌面版 Safari 15 不尊重我的主题颜色设置?

为啥多线程 python 程序在 ec2 微实例上运行缓慢?

为啥地理定位在 Safari 桌面中失败?

为啥这个 OpenGL ES 代码在 iPhone 上运行缓慢?