I have too little exposure to front-end optimization. It usually feels normal on the PC side, but when it comes to the mobile side, it doesn't work over time. Today I will talk about the optimization problem of UL in HTML. I have given a traditional way of writing (time-consuming) and an optimized way of writing.
Let’s simulate a business process, similar to a message wall. After everyone leaves a message, you need to Display the message on the message wall.
Let’s start writing our code
If I would write like this in normal times, but if I receive one million pieces of data, the code is as follows:
nbsp;html> <meta> <title>没有进行性能优化的案例</title> <p></p> <script> var List = function(container,items,itemHeight){ this.container = container; this.items = items; this.itemHeight = itemHeight; this.init(); this.update(); } List.prototype.init = function(){ //创建一个ul this.ul = document.createElement("ul"); this.ul.style.position = "relative"; //将元素添加到p中 this.container.appendChild(this.ul); } List.prototype.update = function(){ for(var i = 0; i < this.items.length; i++){ var liTag = document.createElement("li"); liTag.textContent = this.items[i] this.ul.appendChild(liTag); } } //模拟数据 var array = []; for(var i = 0; i < 1000000; i++){ array.push(i) } new List(document.getElementById("pElement"),array,16); </script>
I used it for about a minute. Oh my god, I think everyone has dispersed. You can see that all the time is spent in Rendering, and it will not be displayed until all li are rendered. The user experience is very good. Bad.
The optimization solution is to reduce Rendering. Set an appropriate number of li tags, and adjust the content and style of li according to the position
nbsp;html> <meta> <title>性能优化</title> <p>List的性能优化</p><br> <br> <br> <p></p> <script> var List = function(container,items,itemHeight){ this.container = container; this.items = items; this.itemHeight = itemHeight; this.init(); this.update(); } List.prototype.init = function(){ //创建一个ul标签 this.ul = document.createElement("ul"); this.ul.style.position = "relative"; //获取的显示的高度内可以最多显示多少条数据 var len = this._maxLength(); var html = ""; for(var i = 0; i < len; i++){ html += "<li>" + this.items[i] + ""; } this.ul.innerHTML = html this.container.appendChild(this.ul); var self = this; this.container.addEventListener("scroll",function(){ self.update() }) } List.prototype._maxLength = function(){ var h = this.container.offsetHeight; return Math.min(Math.ceil(h / this.itemHeight),this.itemHeight); } List.prototype.update = function(){ //计算出ul的高度 this.ul.style.height = this.items.length * this.itemHeight + "px"; this.ul.style.margin = 0; //计算出滑动条目前位置前有多少个li标签 var start = Math.floor(this.container.scrollTop / this.itemHeight); console.log("start:",start) //获得所有的子节点 var items = this.ul.children; //获得长度 var len = this._maxLength(); for(var i = 0; i < len; i++){ var item = items[i]; if(!item){ item = items[i] || document.createElement("li"); this.ul.appendChild(item); } var index = start + i; item.innerHTML = this.items[index]; item.style.top = this.itemHeight * (index) + "px"; item.style.position = "absolute"; } } //模拟数据 var array = []; for(var i = 0; i < 1000000; i ++){ array.push(i) } var list = new List(document.getElementById("pElement"),array,16); </script>
Take another look at the performance chart
The same writing method directly increases the speed by 20 times.
For more articles related to the optimization of ul tags in HTML, please pay attention to the PHP Chinese website!

The article discusses the HTML <datalist> element, which enhances forms by providing autocomplete suggestions, improving user experience and reducing errors.Character count: 159

The article discusses the HTML <progress> element, its purpose, styling, and differences from the <meter> element. The main focus is on using <progress> for task completion and <meter> for stati

The article discusses the HTML <meter> element, used for displaying scalar or fractional values within a range, and its common applications in web development. It differentiates <meter> from <progress> and ex

The article discusses the <iframe> tag's purpose in embedding external content into webpages, its common uses, security risks, and alternatives like object tags and APIs.

The article discusses using HTML5 form validation attributes like required, pattern, min, max, and length limits to validate user input directly in the browser.

The article discusses the viewport meta tag, essential for responsive web design on mobile devices. It explains how proper use ensures optimal content scaling and user interaction, while misuse can lead to design and accessibility issues.

Article discusses best practices for ensuring HTML5 cross-browser compatibility, focusing on feature detection, progressive enhancement, and testing methods.

This article explains the HTML5 <time> element for semantic date/time representation. It emphasizes the importance of the datetime attribute for machine readability (ISO 8601 format) alongside human-readable text, boosting accessibilit


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

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

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

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
