Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为不同的窗口大小启动不同功能的最佳方式_Jquery_Performance_If Statement - Fatal编程技术网

Jquery 为不同的窗口大小启动不同功能的最佳方式

Jquery 为不同的窗口大小启动不同功能的最佳方式,jquery,performance,if-statement,Jquery,Performance,If Statement,我有一个网站,在移动设备和桌面设备上有不同的行为方式。我可以使用此选择器选择是否启动功能: if($(window).width < 768) { // fire functions for mobile } else { // fire functions for desktop } 简而言之,最好的答案是:首先编写代码以保持干净和可维护性,如果需要加快速度,则在编写代码之后对其进行分析和测量 这就是说,我认为你在关注那些永远不会出现在探查器中的区域。如果您担心一个跨越

我有一个网站,在移动设备和桌面设备上有不同的行为方式。我可以使用此选择器选择是否启动功能:

if($(window).width < 768) {
    // fire functions for mobile
} else {
    // fire functions for desktop
}

简而言之,最好的答案是:首先编写代码以保持干净和可维护性,如果需要加快速度,则在编写代码之后对其进行分析和测量

这就是说,我认为你在关注那些永远不会出现在探查器中的区域。如果您担心一个跨越200行代码的函数调用的成本,那么这就像担心赛车上的一点灰尘会使它变慢,因为当您可以调整引擎时,它会变重一克

微观层面的事情可能值得担心(在测量之后),比如缓存友好型内存访问和有时(很少)分支预测。在调整微效率时,您通常还希望寻找大循环,例如在循环中执行一百万次的小代码段

至于if语句的性质,这通常将接近于免费。我们现在使用的硬件试图预测您的指令将要执行的操作。当预测正确时,分支的成本下降到零或接近。在您的情况下,移动设备永远不会成为桌面,并且在应用程序运行时,桌面也永远不会成为移动设备,因此它完全是在按照分支预测器进行操作

关于函数调用,一般来说,你不应该认为它们有代价,尤其是在你分析了你的代码之后。但有时拥有更多的函数实际上可以加快代码的速度,这听起来是违反直觉的。如果在单个单片函数中嵌入大量代码,则可能会增加icache未命中(有点像C或C++等语言中的过度内联),从而影响性能


这都是特定于编译器的,如果您的JIT是跟踪编译器,那么情况就大不相同了。但特别是因为编译器在这个世界上变化很大,所以性能的最佳机会通常取决于以更正常的方式编写代码(而不是将数百行代码转储到一个函数中以避免函数调用)。这应该是您的基线,默认的代码编写方式,直到您的度量告诉您可以有选择地调优特定区域。简单地说,即使从纯粹的性能角度来看,您也最好选择一种更易于维护的编写代码的方式,而不是基于对性能的先入为主的预感,即缺乏任何度量来混淆代码。

谢谢您的回答。我可能会想,javascript比它实际要重。
// Is this one better?
if ($(window).width() < 768) {

    // $('something').something();
    // var another = $('another');
    // another.something();
    // lets guess lots of stuff to do here
    // like 200 lines of code

} else { 

    // $('something').something();
    // var another = $('another');
    // another.something();
    // lets guess lots of stuff to do here
    // like 200 lines of code
}

// Or this one?
var mobileFunctions = function() {

    // $('something').something();
    // var another = $('another');
    // another.something();
    // lets guess lots of stuff to do here
    // like 200 lines of code
}
var desktopFunctions = function() {
    // $('something').something();
    // var another = $('another');
    // another.something();
    // lets guess lots of stuff to do here
    // like 200 lines of code
}
if ($(window).width() < 768) { 
    mobileFunctions();
} else { 
    desktopFunctions();
}