Performance optimization method for Ajax non-refresh paging
This article mainly introduces the relevant information on the performance optimization method of Ajax non-refresh paging. Friends who need it can refer to it
Ajax non-refresh paging is already a thing that everyone is familiar with, probably There is a js method on the web front-end page, which requests the server-side paging data interface through Ajax. After getting the data, it creates an html structure on the page and displays it to the user, similar to the following:
<script type=”text/javascript”> function getPage(pageIndex){ ajax({ url:” RemoteInterface.cgi”, method:”get”, data:{pageIndex:pageIndex}, callback:callback }); } function callback(datalist){ //todo:根据返回的datalist数据创建html结构展现给用户。 } </script>
Among them, RemoteInterface.cgi is a server-side interface. We are limited in space here, and the example codes involved may not be complete, just to express the meaning clearly.
On the UI, there may be various styles of paging controls, which everyone is familiar with, such as:
#But it is nothing more than the user clicking on the control to trigger the getPage(pageIndex) method here. This getPage method may not be that simple.
If you follow the way code snippet 1 is written, we can imagine that every time the user clicks to turn the page, RemoteInterface.cgi will be requested once, ignoring the possible update of the data, except for the first time, and later The remote interface requests triggered by each getPage(1), getPage(2), getPage(3), etc. and the data traffic to and from the network are actually repetitive and unnecessary. This data can be cached on the page in some form when each page is requested for the first time. If the user is interested in looking back at the page he has turned before, the getPage method should first check whether the local cache contains the page data. If If yes, it will be directly re-presented to the user instead of calling the remote interface. According to this idea, we can modify the code snippet 1 as follows:
<script type=”text/javascript”> var pageDatalist={}; function getPage(pageIndex){ if(pageDatalist[pageIndex]){ //如果本地的数据列表中包含当前请求页码的数据 showPage(pageDatalist[pageIndex])//直接展现当前数据 } else { ajax({ url:” RemoteInterface.cgi”, method:”get”, data:{pageIndex:pageIndex}, callback:callback }); } } function callback(pageIndex,datalist){ pageDatalist[pageIndex]= datalist; //缓存数据 showPage(datalist);//展现数据 } function showPage(datalist){ //todo:根据返回的datalist数据创建html结构展现给用户。 } </script>
This will save the round trip time of network requests, and more importantly The purpose is to save valuable network traffic and reduce the burden on the interface server. In low network speed environments or when the operating pressure of the interface server is already relatively high, this necessary improvement can show obvious optimization effects. The first of the famous 34 Yahoo rules is to minimize the number of HTTP requests. Ajax asynchronous requests are undoubtedly within the scope of http requests. Web applications with low traffic may feel unnecessary, but imagine if there is a page like this: 10 million visits per day, users turn an average of 5 pages, and one page is viewed repeatedly. Then such a page, according to the way code snippet 1 is written, will trigger an average of 50 million data requests per day, and according to the way code snippet 2 is written, it can reduce at least 10 million requests per day on average. If the amount of data requested each time is 20kb, you can save 10 million * 20kb = 200,000,000kb, which is approximately 190G of network traffic. The resources saved in this way are quite considerable.
If you want to continue to delve deeper, the data caching method in code snippet 2 is worth discussing. We previously assumed that the timeliness of paging data can be ignored, but in actual applications, timeliness is an unavoidable issue. Caching will undoubtedly lead to a reduction in timeliness. A real caching solution should also rely on the analysis and trade-offs of the application's timeliness requirements.
For content that generally does not emphasize timeliness, the cache on the page should still be acceptable. First, the user will not stay on one page all the time. When there is a jump between pages and reloading, it can Get updated data. In addition, if the user has the habit of refreshing the page, he can choose to refresh the page when he particularly wants to see whether there is any data update in the list. If you are pursuing perfection, you can also consider setting a time range, such as 5 minutes. If the user has stayed on the current page for more than 5 minutes, then his page turning within 5 minutes will first read the cache on the page, and page turning after 5 minutes will request the server data again.
In some cases, if we can predict the frequency of data update, such as how many days there may be a data update, we can even consider using local storage to trigger a request for server data after a certain period of time, so that the request The savings in data and traffic are even more thorough. Of course, what kind of caching method is suitable ultimately depends on the timeliness requirements of the product, but the principle is to save requests and traffic as much as possible, especially for pages with a large number of visits.
For a type of data with high timeliness requirements, is caching completely inappropriate? Of course not, but the overall idea needs to change. Generally speaking, the so-called changes may mainly mean that the data in the list has been increased, decreased, or changed, but the vast majority of the data remains unchanged. In most cases, the settings mentioned above are still applicable for caching within a certain period of time.
If there is a requirement close to real-time update of data, you may easily think of using a timer, such as executing the getPage(pageIndex) method and redrawing the list every 20 seconds. But as long as you think of the previous assumption of 10 million page visits, you will find that this is undoubtedly a super scary thing. With this number of visits and the frequency of retries, the server is under great pressure. Regarding how to deal with this situation, I would like to ask everyone to take a look at how Gmail, 163 Mailbox and Sina Mailbox handle mailing list pages. They almost simultaneously satisfied our previous assumptions: extremely large daily visits, real-time update of data requirements, etc. It is not difficult to analyze with a network packet capture tool and find that they will not make a request to the server when the user repeatedly requests data for the same page number. In order to ensure that users are notified in time and the mailing list is updated when there is a message update, a scheduled and repeated asynchronous request can be used, but this request is only for a status query, rather than refreshing the list. Only when the status with message updates is obtained will a request be initiated to obtain updated data, or the status query interface will directly return the updated data when an update is found. In fact, the scheduled status query interval of 163 mailbox is set relatively long, about once every two minutes. The interval of Sina mailbox is longer, about once every 5 minutes. It can be understood that they are trying their best to reduce the number of requests. However, this kind of processing method may not be done by the front-end alone. The implementation plan needs to be considered as a whole with the back-end interface.
Now let’s go back and look at the data caching method in code snippet 2. Now we no longer discuss the number of requests and traffic savings, let’s take a look at the front-end implementation to see if there is anything worth delving into. According to the processing method shown in code snippet 2, the original data is stored. When called again, showPage(datalist) needs to reconstruct the html structure based on the data again to display to the user, but we have done this process of creating the structure before. , is it possible to consider saving the structure directly when creating the structure for the first time? This can reduce the repeated calculations of js, especially when the structure is more complex, it is worth considering. Think about it again, this structure has been created on the page before. Destroying it and creating a new structure when turning the page also consumes resources. Can you create it for the first time and not destroy it when turning the page? Just pass it. Control the CSS style to hide it, and when you turn the page repeatedly, you can only control the display or hiding of each other between these created structures?
Finally, the method discussed here may not be applicable to all scenarios, but either There will be some inspiration, you can try one or two of them at the appropriate time. At the same time, if the ideas are spread out, it may not only be applied to refresh-free paging. Let’s discuss it together here.
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Ajax image upload based on firefox
Ajax loading external page pop-up layer effect implementation method
Ajax cross-domain (same basic domain name) form submission method
The above is the detailed content of Performance optimization method for Ajax non-refresh paging. For more information, please follow other related articles on the PHP Chinese website!

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

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

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



Performance comparison of different Java frameworks: REST API request processing: Vert.x is the best, with a request rate of 2 times SpringBoot and 3 times Dropwizard. Database query: SpringBoot's HibernateORM is better than Vert.x and Dropwizard's ORM. Caching operations: Vert.x's Hazelcast client is superior to SpringBoot and Dropwizard's caching mechanisms. Suitable framework: Choose according to application requirements. Vert.x is suitable for high-performance web services, SpringBoot is suitable for data-intensive applications, and Dropwizard is suitable for microservice architecture.

The performance comparison of PHP array key value flipping methods shows that the array_flip() function performs better than the for loop in large arrays (more than 1 million elements) and takes less time. The for loop method of manually flipping key values takes a relatively long time.

Build an autocomplete suggestion engine using PHP and Ajax: Server-side script: handles Ajax requests and returns suggestions (autocomplete.php). Client script: Send Ajax request and display suggestions (autocomplete.js). Practical case: Include script in HTML page and specify search-input element identifier.

Time complexity measures the execution time of an algorithm relative to the size of the input. Tips for reducing the time complexity of C++ programs include: choosing appropriate containers (such as vector, list) to optimize data storage and management. Utilize efficient algorithms such as quick sort to reduce computation time. Eliminate multiple operations to reduce double counting. Use conditional branches to avoid unnecessary calculations. Optimize linear search by using faster algorithms such as binary search.

Effective techniques for optimizing C++ multi-threaded performance include limiting the number of threads to avoid resource contention. Use lightweight mutex locks to reduce contention. Optimize the scope of the lock and minimize the waiting time. Use lock-free data structures to improve concurrency. Avoid busy waiting and notify threads of resource availability through events.

Ajax (Asynchronous JavaScript and XML) allows adding dynamic content without reloading the page. Using PHP and Ajax, you can dynamically load a product list: HTML creates a page with a container element, and the Ajax request adds the data to that element after loading it. JavaScript uses Ajax to send a request to the server through XMLHttpRequest to obtain product data in JSON format from the server. PHP uses MySQL to query product data from the database and encode it into JSON format. JavaScript parses the JSON data and displays it in the page container. Clicking the button triggers an Ajax request to load the product list.

In PHP, the conversion of arrays to objects will have an impact on performance, mainly affected by factors such as array size, complexity, object class, etc. To optimize performance, consider using custom iterators, avoiding unnecessary conversions, batch converting arrays, and other techniques.

According to benchmarks, for small, high-performance applications, Quarkus (fast startup, low memory) or Micronaut (TechEmpower excellent) are ideal choices. SpringBoot is suitable for large, full-stack applications, but has slightly slower startup times and memory usage.
