Javascript 加速

Javascript 加速,javascript,html,css,velocity.js,Javascript,Html,Css,Velocity.js,我正在尝试击败此页面上的垃圾:。Jank只在手机上使用&基本上在所有手机上使用,甚至在三星Galaxy 6上也是如此。当页面被“加载”时,我用速度隐藏初始的蓝色屏幕。下面是执行此操作的代码: function fn_siteLoader() { var $siteLoader = $('.site-loader'); $siteLoader.velocity({ translateZ: 0, translateY: '-100%' }, {

我正在尝试击败此页面上的垃圾:。Jank只在手机上使用&基本上在所有手机上使用,甚至在三星Galaxy 6上也是如此。当页面被“加载”时,我用速度隐藏初始的蓝色屏幕。下面是执行此操作的代码:

  function fn_siteLoader() {
    var $siteLoader = $('.site-loader');

    $siteLoader.velocity({
      translateZ: 0,
      translateY: '-100%'
    }, {
      queue: false,
      delay: 500,
      duration: 1500,
      easing: [0.710, 0.100, 0.3, 1.000],
      complete: function() {
        $(this).remove();
        $body.addClass('is-loaded');
      }
    });
  }
  $(window).on('load', function() {
    fn_siteLoader();
  });

我尝试了很多黑客,比如wain中的
will change
。此外,我也没有从谷歌的时间表中获得任何见解。你知道为什么这部简单的动画如此刺耳吗?我已上载页面的非最小化版本以进行调试。

请尝试在window.onload事件中使用0秒的setInterval()。这可能看起来有点骇人,但在过去它被用来解决一些其他的加载问题。它将创建一个单独的线程,在多核CPU中,当另一个渲染发生时,该线程不会冻结动画。但是,这可能不起作用,但很难测试,因为我无法在自己的服务器上重现问题,而且我甚至不确定其主观影响有多大。

如果性能是一个问题,我会尝试在没有Velocity的情况下执行此操作,甚至jQuery:

function whichTransitionEvent(){
  var t; var el = document.createElement('fakeelement');
  var transitions = {
    'transition':'transitionend',
    'OTransition':'oTransitionEnd',
    'MozTransition':'transitionend',
    'WebkitTransition':'webkitTransitionEnd'
  }
  for(t in transitions){
    if( el.style[t] !== undefined ){
      return transitions[t];
    } 
  } 
}

function fn_siteLoader() {
  var siteLoader = document.querySelector('.site-loader');
  siteLoader.classList.add('animating');

  var transitionEvent = whichTransitionEvent();
  transitionEvent && e.addEventListener(transitionEvent, function() {
    siteLoader.parentNode.removeChild(siteLoader);
    document.body.classList.add('is-loaded');
  });
}

document.addEventListener('DOMContentLoaded', fn_site loader);
然后,在CSS中,您只需要为“.site loader”添加样式(显然可以使用您想要的任何缓和或计时功能):

以及对于“.site loader.animating”:

transform: translateY(-100%);
对于生产,您需要确保并添加CSS所需的任何浏览器前缀…如果需要,可以使用大量工具和资源来自动化该过程


这应该是非常免费的,因为我们正在使用支持GPU的CSS3动画,并且我们已经消除了jQuery和Velocity中大约65kb的依赖项。

这是在第一次发布(iPhone chrome)之后发生的。这可能是因为宽松导致了较大的浮动吗?@skobaljic页面加载后,蓝色屏幕略微向上缓和,冻结,然后快速向上缓和,变慢,然后移出屏幕。我猜提问者指的是冻结。看起来和桌面火狐上的一样。我建议使用CSS动画和JS来添加类。不需要使用Javascript制作动画。放松也可以在CSS中定义。事实上,一旦页面被缓存,放松冻结()就会消失。此时必须渲染图像或复杂的内容(图像在启动window.onload之前加载并调整大小,但在启动window.onload之后渲染)。也可能是谷歌地图。哇,谷歌地图是罪魁祸首——我把它的初始化代码放在setTimeout中(2秒后),垃圾就消失了。如果你把这个作为答案,我会投赞成票。谢谢你的建议。很棒的片段,我一定会用的。
transform: translateY(-100%);