


JavaScript Loop to Improve Running Speed Translation_Javascript Skills
This article focuses on the first reason. Finally, a development model is given to replace the traditional loop structure, which can completely avoid the situation where the script is out of control.
Original title: Speed up your JavaScript, Part 1
Original author: Nicholas C. Zakas
In my last post (translation), I talked about the circumstances under which each browser will pop up a script out of control prompt. For Internet Explorer, when the browser executes too many statement will stop executing the script, while other browsers will give a prompt when the script continues to be executed for more than a certain period of time. The core issue we want to discuss is not how these browsers detect runaway scripts, but how we can make the scripts run faster to avoid these warnings.
There are basically four reasons why the script is out of control:
Too many operations are performed in the loop.
Bloated function body
Too much recursion
Too many DOM calls
In this post, I will focus on the first one: too many operations in loops. Loops operate synchronously, so the time it takes to execute a loop depends entirely on the number of loops. Therefore, there are two situations that will cause the loop execution time to be too long and directly cause the browser to be locked. One is that the loop body contains too many operations, and the other is that the number of loops is too many. Both of these situations can directly cause the browser to lock up and display a message indicating that the script is out of control.
The trick to solving this problem is to evaluate each loop with the following two questions:
Does this loop have to be executed synchronously?
Does the data in the loop have to be executed in order?
If the answer to both questions is no, you can choose to decompose the operations in the loop. The key is to determine the answers to the above two questions based on the specific context of your code. A typical loop might look like this:
for( var i=0; i < items.length; i ){
process(items[i]);
}
At first glance, there is not much problem with this loop , whether it will run for a long time depends entirely on the number of loops. If there is no other code immediately following the loop that needs to depend on the result of the loop, then the answer to the first question is "no". You can also find that the loop only processes one value at a time and does not depend on the result of the previous loop, so the answer to the second question is also no. This means that the loop can be broken down in a way that doesn't lock the browser with a runaway script message.
In the book "Professional JavaScript, Second Edition", I recommend the following method for handling illusions with very large execution times:
function chunk(array, process, context){
setTimeout(function(){
var item = array.shift ();
process.call(context, item);
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100 );
}
The purpose of the chunk() function is to divide an array into small pieces for processing (this is also the origin of the name). We can pass three parameters. The array object to be processed, the processing function, and an optional context variable used to set the corresponding this object in the process() function. The first timer is used to handle the delay between operations (here it is set to 100 milliseconds, you can modify it according to actual needs). Each time this function is executed, the first object in the array will be taken out and passed to the process() function for operation. If there are still unprocessed objects in process() at this time, another timer will be started, using Waiting repeatedly. The loop mentioned above can use this function in the following method:
chunk(items, process);
It should be noted that the array here takes the form of a queue, and during the loop process , modifications will occur every time. If you want to modify the original state of the array, here are two ways: one is to use the concat() function to create a copy of the current array before passing it:
chunk(items.concat(), process);
Another option is to directly modify the chunk() function and modify it directly inside the function:
function chunk(array, process, context){
var items = array.concat(); //clone the array
setTimeout(function(){
var item = items. shift();
process.call(context, item);
if (items.length > 0){
setTimeout(arguments.callee, 100);
}
}, 100);
}
Note that this method is much safer than just saving an index, because the contents of the array may change before the next timer takes effect.
The chunk() function mentioned here is just a starting point for optimizing loop performance. You can keep improving it to have more features as needed. For example, after all objects in the array have been processed, a function callback can be added. Regardless of whether you will modify the function in this way, this is just a JavaScript code development pattern that can help optimize array processing performance and avoid the warning that the script is out of control.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Lambda expression breaks out of the loop, specific code examples are needed. In programming, the loop structure is an important syntax that is often used. However, in certain circumstances, we may want to break out of the entire loop when a certain condition is met within the loop body, rather than just terminating the current loop iteration. At this time, the characteristics of lambda expressions can help us achieve the goal of jumping out of the loop. Lambda expression is a way to declare an anonymous function, which can define simple function logic internally. It is different from an ordinary function declaration,

Note: This article compares loops and recursion from the perspective of Go language. When writing programs, you often encounter situations where a series of data or operations need to be processed repeatedly. To achieve this we need to use loops or recursion. Loops and recursions are both commonly used processing methods, but in practical applications, they each have advantages and disadvantages, so the actual situation needs to be considered when choosing which method to use. This article will conduct a comparative study of loops and recursion in the Go language. 1. Loops A loop is a mechanism that repeatedly executes a certain piece of code. There are three main types of Go language

Replacement of recursive calls in Java functions with iteration In Java, recursion is a powerful tool used to solve various problems. However, in some cases, using iteration may be a better option because it is more efficient and less prone to stack overflows. Here are the advantages of iteration: More efficient since it does not require the creation of a new stack frame for each recursive call. Stack overflows are less likely to occur because stack space usage is limited. Iterative methods as an alternative to recursive calls: There are several methods in Java to convert recursive functions into iterative functions. 1. Use the stack Using the stack is the easiest way to convert a recursive function into an iterative function. The stack is a last-in-first-out (LIFO) data structure, similar to a function call stack. publicintfa

In this article, we will learn why C code runs faster than Python. Guido Van Rossum developed Python, one of the most famous programming languages. Python is popular among developers because of its clear syntax and simple code, even for novices. Learning Python is highly beneficial for those who are just starting their programming career. They can use Python programming training, blogs, videos, modules, and thousands of other resources to learn all aspects of this popular language. Upon completion, you will be able to perform modern development activities such as GUI development, web design, system administration, complex financial transactions or calculations, data science, visualization, and more.

Iterator interface The Iterator interface is an interface used to traverse collections. It provides several methods, including hasNext(), next() and remove(). The hasNext() method returns a Boolean value indicating whether there is a next element in the collection. The next() method returns the next element in the collection and removes it from the collection. The remove() method removes the current element from the collection. The following code example demonstrates how to use the Iterator interface to iterate over a collection: Listnames=Arrays.asList("John","Mary","Bob");Iterator

This article will explain in detail how PHP returns all the values of an array to form an array. The editor thinks it is quite practical, so I share it with you as a reference. I hope you can gain something after reading this article. Using the array_values() function The array_values() function returns an array of all the values in an array. It does not preserve the keys of the original array. $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values will be ["bar","qux"]Using a loop can Use a loop to manually get all the values of the array and add them to a new

How to adjust virtual memory in win10 system to improve running speed? As the usage of computers becomes higher and higher, we may sometimes encounter the situation of adjusting the virtual memory of the win10 system to improve the running speed. If we need to adjust the virtual memory of the win10 system to improve the running speed, how should we deal with win10? Does the system adjust virtual memory to improve running speed? Fix solution for adjusting virtual memory in win10 system to improve running speed 1. Click Start Menu – All Applications – Windows System – This Computer, right-click this computer, click “Properties” to proceed to the next step. 2. In the system window that opens, click "Advanced System Settings" on the left to proceed to the next step. 3. In

All programming languages are inseparable from loops. So, by default, we start executing a loop whenever there is a repeating operation. But when we are dealing with large number of iterations (millions/billions of rows), using loops is a crime. You might be stuck for a few hours, only to realize later that it doesn't work. This is where implementing vectorization in python becomes very critical. What is vectorization? Vectorization is a technique for implementing (NumPy) array operations on data sets. Behind the scenes, it applies the operation to all elements of the array or series at once (unlike a "for" loop that operates one row at a time). Next we use some use cases to demonstrate what vectorization is. Find the sum of numbers##Use the loop importtimestart
