A discussion on function.apply () second------improve JavaScript program performance _javascript skills by using the parameter array of apply

Source: Internet
Author: User

Let's talk about function.apply () skills in improving program performance.

Let's start with the Math.max () function, Math.max can be followed by any argument, and finally return the maximum value in all parameters.

Like what
Alert (Math.max (5,8))//8
Alert (Math.max (5,7,9,3,1,6))//9

But in many cases, we need to find the largest element in the array.
var arr=[5,7,9,1]
Alert (Math.max (ARR))//This is not the case. Be sure to write like this

function Getmax (arr) {
var arrlen=arr.length;
for (Var i=0,ret=arr[0];i<arrlen;i++) {
Ret=math.max (Ret,arr[i]);
}
return ret;
}
This is a cumbersome and inefficient way to write. If you apply it, look at the code:
function GetMax2 (arr) {
Return Math.max.apply (Null,arr)
}
The two pieces of code achieve the same goal, but GETMAX2 is elegant, efficient, and much simpler.

See Performance test:
Getmax Performance Test

<script>
var myarr=new Array ()

function Fillrnd (Arrlen) {//fill in a random number of Arrlen 1-10 to an array
for (Var i=0,arr=[];i<arrlen;i++) {
Arr[i]=math.ceil (Math.random () *10)
}
Return arr
}

function Getmax (arr) {
var arrlen=arr.length;
for (Var i=0,ret=arr[0];i<arrlen;i++) {
Ret=math.max (Ret,arr[i]);
}
return ret;
}

function GetMax2 (arr) {
Return Math.max.apply (Null,arr)
}


Myarr=fillrnd (20*10000)//Generate 200,000 random numbers fill in array

var t1=new Date ()
var Max1=getmax (Myarr)
var t2=new Date ()
var max2=getmax2 (Myarr)
var t3=new Date ()

if (MAX1!==MAX2) alert ("Error")
alert ([T3-T2,T2-T1])//On my machine 96,464. Different machines, the results may vary

</script>


By comparison of 200,000 data, the GETMAX2 time is 96ms and Getmax time is 464. 5 times times the difference.


Another example is the push method of an array.
var arr1=[1,3,4];
var arr2=[3,4,5];
If we want to expand the arr2, and then one by one append to the arr1, finally let arr1=[1,3,4,3,4,5]
Arr1.push (ARR2) is clearly not a good one. Because doing so will get [1,3,4, [3,4,5]]

We can only use one loop to go one push (of course we can also use Arr1.concat (ARR2) But concat method does not change arr1 itself)
var arrlen=arr2.length
for (Var i=0;i<arrlen;i++) {
Arr1.push (Arr2[i])
}

It's been so easy ever since the Apply

Array.prototype.push.apply (ARR1,ARR2)

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.