【问题标题】:Strange functions when profiling Javascript in Chrome在 Chrome 中分析 Javascript 时出现奇怪的功能
【发布时间】:2016-04-12 22:07:49
【问题描述】:

我目前正在优化我的 HTML/Javascript 游戏。我正在使用谷歌浏览器上的分析器来获取一些关于哪些函数使用时间最多的信息。一切似乎都很好。除非游戏卡顿/滞后,否则我可以在分析器中看到一个不属于我的代码的函数。我看起来像this

这样的功能多次出现。有时它们需要长达 100 毫秒,这导致我的游戏卡顿很多。如何找到这些函数的来源?

编辑:我的游戏包含很多这样的功能:

socket.on('1', function (data) {
    ...
});

我的 Gameloop 看起来像这样:

var lastTime = 0;
function prepareUpdate(callback) {
    var now = Date.now();
    var nextTime = mathMax(lastTime + (1000 / targetFPS), now);
    return setTimeout(function() { 
        callback(lastTime = nextTime); 
    }, nextTime - now);
};
function callUpdate() {
    prepareUpdate(callUpdate);
    updateGameLoop();
};
callUpdate();

这些被认为是有害的吗?

【问题讨论】:

  • 你怎么能确定它不是你游戏的一部分?
  • 你在代码中使用了匿名函数吗?
  • 回调函数通常是匿名的,因此可能是其中之一,只需命名所有回调,您应该能够更清楚地了解被调用的内容。它还有助于在压缩代码库之前对其进行概要分析,以便您获得完整的函数名称而不是 1 个字符的函数名称。
  • 也可以是 IIFE...
  • 它不在我的代码中。我可能是我的代码所引用的东西:库或类似的东西。我的问题是;我怎么知道它来自哪里?

标签: javascript google-chrome


【解决方案1】:

根据 GilliesC 的建议,可以这样命名您的匿名函数:

socket.on('1', function onOne(data) {
    ...
});

其中 onOne 只是函数的一些随机名称(未在其他任何地方定义)

【讨论】:

  • 再次检查后。好像是从runtime.js调用的函数那是什么?那是我编译的代码吗?
  • 如果它不是你的代码库的一部分,它可能是一个 chrome 扩展
  • 它被称为 swiffy 运行时。我认为这与闪存有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2023-03-16
  • 2011-03-03
相关资源
最近更新 更多