美文网首页
[Notes] Perfomance

[Notes] Perfomance

作者: JellyL | 来源:发表于2020-04-04 15:41 被阅读0次

Perfomance

Optimize JavaScript Execution

  • Avoid setTimeout or setInterval for visual updates;
    always use requestAnimationFrame instead.
    The only way to guarantee that your JavaScript will run at the start of
    a frame is to use requestAnimationFrame.
  • Move long-running JavaScript off the main thread to Web Workers.
  • Use micro-tasks to make DOM changes over several frames.
  • Use Chrome DevTools’ Timeline and JavaScript Profiler to assess the impact of JavaScript.
/**
 * If run as a requestAnimationFrame callback, this
 * will be run at the start of the frame.
 */
function updateScreen(time) {
  // Make visual updates here.
}

requestAnimationFrame(updateScreen);
var dataSortWorker = new Worker("sort-worker.js");
dataSortWorker.postMesssage(dataToSort);

// The main thread is now free to continue working on other things...
// ***Web Worker do NOT have access to DOM.***

dataSortWorker.addEventListener('message', function(evt) {
   var sortedData = evt.data;
   // Update data on screen...
});
// must be on the main thread
// segment the larger task into micro-tasks, each taking no longer than a few
// milliseconds, and run inside of requestAnimationFrame handlers across each frame.
var taskList = breakBigTaskIntoMicroTasks(monsterTaskList);
requestAnimationFrame(processTaskList);

function processTaskList(taskStartTime) {
  var taskFinishTime;

  do {
    // Assume the next task is pushed onto a stack.
    var nextTask = taskList.pop();

    // Process nextTask.
    processTask(nextTask);

    // Go again if there’s enough time to do the next task.
    taskFinishTime = window.performance.now();
  } while (taskFinishTime - taskStartTime < 3);

  if (taskList.length > 0)
    requestAnimationFrame(processTaskList);

}

ensure that the user knows that a task is being processed, either by using a
progress or activity indicator.

Optimize JavaScript Execution

Reduce the Scope and Complexity of Style Calculations

  • Reduce the complexity of your selectors; use a class-centric methodology like BEM.
  • Reduce the number of elements on which style calculation must be calculated.
// bad example
.box:nth-last-child(-n+1) .title {
  /* styles */
}
// good example
.final-box-title {
  /* styles */
}

BEM (Block, Element, Modifier)
Style Invalidation in Blink

相关文章

网友评论

      本文标题:[Notes] Perfomance

      本文链接:https://www.haomeiwen.com/subject/ozsjphtx.html