前端页面优化(前端页面优化有哪些)

skyadmin 37 2023-02-01

本文目录一览:

前端优化-LCP

LCP是最大内容绘制的简称。LCP是用来测量感知加载速度。感知加载速度是以用户为中心的重要指标。因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的LCP有助于让用户确信页面时有效的。以前的指标测量比如load(加载)或者DOMContentLoad(DOM内容加载完毕)并不是很好,因为这些指标并不一定与用户看到的内容相对应。而向First Contentful Paint 首次内容的绘制(FCP)这类以用户为中心的新指标只会捕获加载最开始的部分。如果某个页面显示时一段启动动画或者加载之时,那么这些时刻与用户的关联性并不大。First Meaningful Paint 首次有效绘制(FMP)和Speed Index速度指数(SI),这些指标能够捕获到更多初始后的加载速度,但是这些指标复杂,难以理解,而且容易出错。

LCP指标会根据页面首次开始加载的时间点来报告可视区域可见的最大图像或者文本完成渲染的相对时间.良好的LCP的时间时2.5,较差的值为4.0s.最大内容的绘制考量的元素类型为

报告给最大内容绘制的元素大小通常时用户在可视区域可见的大小,如果元素延伸到可视区域之外,或者任何元素被剪裁或者包含不可见的溢出,那么这部分不计入元素的带线啊哦。对于在原始尺寸之上经过调整的图像元素,报告给指标的元素大小为可见尺寸或者原始尺寸。

网页通常时分阶段加载的,因此,页面上最大元素也可能会发生变化。为了应对这种潜在的变化,浏览器会绘制第一帧立即发送一个largest-contentful-paint类型的PerformanceEntry,用于识别最大内容元素,但是,在渲染后续帧之后,浏览器会在最大内容元素发生变化时候分发另一个PerfornacneFanceEntry。需要主要的是,一个元素只能在渲染完成并且对用户可见之后才视为最大元素,尚未加载点额元素不能视为渲染完成。在字体阻塞期使用网页字体的文本节点也是这样。在这种情况下,较小的元素可能会被报告称最大元素,但一旦更大的元素完成渲染,就会通过另外一个PerformanceEntry对象进行报告

为了使计算和分发新性能条目的性能开销保持在较低的水平,对元素大小或者位置的更改不会生成新的LCP候选对象,只有元素在可视区域的初始化大小和位置会纳入考量范围。也就是说,最初在屏幕外完成渲染,然后过滤到屏幕上的图像可能不会得到报告,这也意味着最初可视区域内进行渲染,然后被推出到可视区域外的元素人讲报告其在可视区域的初始化大小

LCP主要受四个因素影响

如何进行前端优化

1.减少 HTTP 请求....

2.使用 HTTP2

3.使用服务端渲染

4.静态资源使用 CDN

5.将 CSS 放在文件头部,JavaScript 文件放 ...

6.使用字体图标 iconfont 代替图片图标

7.善用缓存,不重复加载相同的资源

8.压缩文件

9.图片优化

(1).图片延迟加载

(2). 响应式图片

(3). 调整图片大小

(4). 降低图片质量

(5). 尽可能利用 CSS3 效果代替图片

(6). 使用 webp 格式的图片

10. 通过 webpack 按需加载代码,提取第三库代码,减少 ES6 转为 ES5 的冗余代码

11. 减少重绘重排

12. 使用事件委托

13. 注意程序的局部性

14. if-else 对比 switch

15. 查找表

16. 避免页面卡顿

17. 使用 requestAnimationFrame 来实现视觉变化

18. 使用 Web Workers

19. 使用位操作

20. 不要覆盖原生方法

21. 降低 CSS 选择器的复杂性

(1). 浏览器读取选择器,遵循的原则是从选择器的右边到左边读取。

(2). CSS 选择器优先级

22. 使用 flexbox 而不是较早的布局模型

23. 使用 transform 和 opacity 属性更改来实现动画

24. 合理使用规则,避免过度优化

性能优化主要分为两类:

加载时优化

运行时优化

Web前端性能优化的实用技巧汇总

今天小编要跟大家分享的文章是关于Web前端性能优化的实用技巧汇总。javascript在浏览器中运行的性能,可以认为是开发者所面临的最严重的可用性问题。这个问题因为javascript的阻塞性而变得复杂,事实上,多数浏览器使用单一进程来处理用户界面和js脚本执行,所以同一时刻只能做一件事。js执行过程耗时越久,浏览器等待响应的时间越长。

一.提高加载性能

1.IE8,FF,3.5,Safari4和Chrome都允许并行下载js文件,当script下载资源时不会阻塞其他script的下载。但是js下载仍然会阻塞其他资源的下载,如图片。尽管脚本下载不会互相影响,但页面仍然必须等待所有js代码下载并执行完才能继续。因此仍然存在脚本阻塞问题.推荐将所有js文件放在body标签底部以减少对整个页面的影响。

2.减少页面外链脚本文件的数量将会提高页面性能:

http请求会带来额外的开销,因此下载单个300k的文件将比下载10个30k的文件效率更高。

3.动态脚本加载技术:

无论何时启动下载,文件的下载和执行都不会阻塞页面其他进程。

functionlaodScript(url,callback){

varscript=document.createElement('script');_

_cript.type='text/javascript';

__f(script.readyState){//ie

____cript.onreadystatechange=function(){_____

if(script.readyState=='loaded'||script.readyState=='complete'){_______

_cript.onreadystatechange=null;_______

callback()_____

____

__

}else{//其他浏览器___

script.onload=function(){_____

_allback()

___}_

}_

script.src=url;_

document.getElementsByTagName('head')[0].appendChild(script);

}

//使用

loadScript('./a.js',function(){_

loadScript('./b.js',function(){___

loadScript('./c.js',function(){_____

console.log('加载完成')___

})_

})

})

4.无阻塞加载类库——LABjs,使用方法如下:

//链式调用时文件逐个下载,.wait()用来指定文件下载并执行完毕后所调用的函数

$LAB.script('./a.js')_

.script('./b.js')_

.wait(function(){__

_pp.init();

})

//为了保证执行顺序,可以这么做,此时a必定在b前执行

$LAB.script('./a.js').wait()_

.script('./b.js')_

.wait(function(){___

_pp.init();

})

二.数据存取与JS性能

1.在js中,数据存储的位置会对代码整体性能产生重大影响。数据存储共有4种方式:字面量,变量,数组项,对象成员。他们有着各自的性能特点。

2.访问字面量和局部变量的速度最快,相反,访问数组和对象相对较慢

3.由于局部变量存在于作用域链的起始位置,因此访问局部变量的比访问跨域作用变量更快

4.嵌套的对象成员会明显影响性能,应尽量避免

5.属性和方法在原型链位置越深,访问他的速度越慢

6.通常我们可以把需要多次使用的对象成员,数组元素,跨域变量保存在局部变量中来改善js性能

三.DOM编程

1.访问DOM会影响浏览器性能,修改DOM则更耗费性能,因为他会导致浏览器重新计算页面的几何变化。

注:如过在一个对性能要求比较高的操作中更新一段HTML,推荐使用innerHTML,因为它在绝大多数浏览器中运行的都很快。但对于大多数日常操作而言,并没有太大区别,所以你更应该根据可读性,稳定性,团队习惯,代码风格来综合决定使用innerHTML还是createElement()

2.HTML集合优化

HTML集合包含了DOM节点引用的类数组对象,一直与文档保持连接,每次你需要最新的信息时,都会重复执行查询操作,哪怕只是获取集合里元素的个数。

①_优化一——集合转数组collToArr

functioncollToArr(coll){_

for(vari=0,a=[],len=coll.length;i

a._ush(coll[i]);

__

returna

}

②缓存集合length

③访问集合元素时使用局部变量(即将重复的集合访问缓存到局部变量中,用局部变量来操作)

3.遍历DOM

①使用只返回元素节点的API遍历DOM,因为这些API的执行效率比自己实现的效率更高:

td{border:1pxsolid#ccc;padding:5px;margin:auto;}

tdp{text-align:left;}

tdpspan{text-align:center;display:block;}

属性名

被替代属性

children

childNodes

childElementCount

childNodes.length

firstElementChild

firstChild

lastElementChild

lastChild

nextElementSibling

nextSibling

previousElementSibling

previousSibling

_谘≡衿_PI——querySelectorAll()

querySelectorAll()方法使用css选择器作为参数并返回一个NodeList——包含着匹配节点的类数组对象,该方法不会返回HTML集合,因此返回的节点不会对应实时文档结构,着也避免了HTML集合引起的性能问题。

let_rr=_ocument.querySelectorAll('div.warning,_iv.notice_')

4.重绘和重排

浏览器在下载完页面的所有组件——html,js,css,图片等之后,会解析并生成两个内部数据结构——_OM树,渲染树.一旦DOM树和渲染树构建完成,浏览器就开始绘制页面元素(paint).

①重排发生的条件:

添加或删除可见的DOM元素位置变化元素尺寸改变内容改变页面渲染器初始化浏览器窗口尺寸变化出现滚动条时会触发整个页面的重排_嘏疟囟ㄖ鼗

5.渲染树变化的排列和刷新

大多数浏览器通过队列化修改并批量执行来优化重排过程,然而获取布局信息的操作会导致队列强制刷新。

offsetTop,offsetWidth...

scrollTop,scrollHeight...

clientTop,clientHeight...

getComputedStyle()

一些优化建议:将设置样式的操作和获取样式的操作分开:

//设置样式

body.style.color='red';

body.style.fontSize='24px'

//读取样式

letcolor=body.style.color

let_ontSize=_ody.style.fontSize

另外,获取计算属性的兼容写法:

functiongetComputedStyle(el){_

varcomputed=(document.body.currentStyle?el.currentStyle:document.defaultView.getComputedStyle(el,'');_

returncomputed

}

6.最小化重绘和重排

①.批量改变样式

/*使用cssText

*/el.style.cssText='border-left:1px;_order-right:2px;_adding:20px';

②.批量修改dom的优化方案——使元素脱离文档流-对其应用多重改变-把元素带回文档

functionappendDataToEl(option){

vartargetEl=option.target||document.body,___

createEl,___

data=option.data||[];_//让容器脱离文档流,减少重绘重排_

vartargetEl_display=targetEl.style.display;_

targetEl.style.display='none';

_

//*****创建文档片段来优化Dom操作****_

varfragment=document.createDocumentFragment();_//给元素填充数据_

for(vari=0,max=data.length;i

createEl=

document.createElement(option.createEl);___

for(varitemindata[i]){_____

if(item.toString()==='text'){_______

createEl.appendChild(document.createTextNode(data[i][item]));________ontinue;___________

_f(item.toString()==='html'){_______

createEl.innerHTML=item,data[i][item];_______

continue;_____

}_____

_reateEl.setAttribute(item,data[i][item]);_______

//****将填充好的node插入文档片段****___

fragment.appendChild(createEl);___

//****将文档片段统一插入目标容器****_

targetEl.appendChild(fragment);_

//显示容器,完成数据填充_

targetEl.style.display=

targetEl_display;

}

//使用

varwrap=document.querySelectorAll('.wrap')[0];

vardata=[_

_name:'xujaing',text:'选景',title:'xuanfij'},_

{name:'xujaing',text:'选景',title:'xuanfij'},_

{name:'xujaing',text:'选景',title:'xuanfij'}];

appendDataToEl({_

target:wrap,_

createEl:'div',

_ata:data

});

上面的优化方法使用了文档片段:_蔽颐前盐牡灯尾迦氲浇诘阒惺保导噬媳惶砑拥闹皇歉闷蔚淖咏诘悖皇瞧伪旧怼?梢允沟_om操作更有效率。

②.缓存布局信息

//缓存布局信息

letcurrent=el.offsetLeft;

current++;

el.style.left=current+'px';

if(current300){_

stop();

}

④.慎用:hover

如果有大量元素使用:hover,那么会降低相应速度,CPU升高

⑤.使用事件委托(通过事件冒泡实现)来减少事件处理器的数量,减少内存和处理时间

functiondelegation(e,selector,callback){_

e=e||window.event;_

vartarget=e.target||e.srcElement;

_if(target.nodeName!==selector||

target.className!==selector||target.id!==selector){___

return;

_}_

if(typeofe.preventDefault==='function'){__

_.preventDefault();___

e.stopPropagation();

}else{___

e.returnValue=false;

e.cancelBubble=true;_

}

__allback()}

四.算法和流程控制

1.循环中减少属性查找并反转(可以提升50%-60%的性能)

//for循环

for(vari=item.length;i--){_

process(item[i]);

}

//while循环

varj=item.length;

while(j--){_

process(item[i]);

}

2.使用Duff装置来优化循环(该方法在后面的文章中会详细介绍)

3.基于函数的迭代(比基于循环的迭代慢)

items.forEach(function(value,index,array){__rocess(value);})

4.通常情况下switch总比if-else快,但是不是最佳方案

五.字符串和正则表达式

1.除了IE外,其他浏览器会尝试为表达式左侧的字符串分配更多的内存,然后简单的将第二个字符串拷贝到他的末尾,如果在一个循环中,基础字符串位于最左侧,就可以避免重复拷贝一个逐渐变大的基础字符串。2.使用[\s\S]来匹配任意字符串3.去除尾部空白的常用做法:

if(!String.prototype.trim){_

String.prototype.trim=function(){___

returnthis.replace(/^\s+/,'').replace(/\s\s*$/,'')_

}

}

六.快速响应的用户界面

1.浏览器的UI线程:用于执行javascript和更新用户界面的进程。

2.在windows系统中定时器分辨率为15毫秒,因此设置小于15毫秒将会使IE锁定,延时的最小值建议为25ms.

3.用延时数组分割耗时任务:

functionmultistep(steps,args,callback){_

vartasks=steps.concat();

__etTimeout(function(){___

vartask=tasks.shift();___

task.apply(null,args||[]);_//调用Apply参数必须是数组

___

if(tasks.length0){_____

setTimeout(arguments.callee,25);

___else{_____

_allback();___

__

},25);

}

4.记录代码运行时间批处理任务:

functiontimeProcessArray(items,process,callback){_

vartodo=item.concat();

__etTimeout(function(){___

varstart=+newDate();

__o{_____

_rocess(todo.shift());___

}while(todo.length0(+newDate()-start____f(todo.length0){_____

_etTimeout(arguments.callee,25);

___else{____

_allback(items);_

}_

_,25)

}

5.使用WebWorker:它引入了一个接口,能使代码运行且不占用浏览器UI线程的时间。一个Worker由如下部分组成:

①一个navigator对象,包括app

前端网站常规优化方案

1、减少请求次数

2、减小资源大小

3、提高响应和加载速度

4、优化资源加载时机

5、优化加载方式

1、合并、压缩、混淆html/css/js文件(webpack实现,减小资源大小)

2、Nginx开启Gzip,进一步压缩资源(减小资源大小)

3、图片资源使用CDN加速(提高加载速度)

4、符合条件的图标做base64处理(减小资源大小)

5、样式表放首部,JS放尾部(JS单线程,会阻塞页面;资源加载方式)

6、设置缓存(强缓存和协商缓存,提高加载速度)

7、link或者src添加rel属性,设置prefetch或preload可预加载资源。(加载时机)

8、如果使用了UI组件库,采用按需加载(减小资源大小)

9、SPA项目,通过import或者require做路由按需(减小资源大小)加载

10、服务端渲染SSR,加快首屏渲染,利于SEO

11、页面使用骨架屏,提高首页加载速度(提高加载速度)

12、使用 JPEG 2000, JPEG XR, and WebP 的图片格式来代替现有的jpeg和png,当页面图片较多时,这点作用非常明显

13、使用图片懒加载-lazyload

Web前端开发要学习的网页优化技巧有哪些

今天小编要跟大家分享的文章是关于Web前端开发要学习的网页优化技巧有哪些?现在,有越来越多所谓的“教程”来帮助我们提高网站的易用性。小编收集了一些在Web开发中容易出错和被忽略的小问题,并且提供了参考的解决方案,以便于帮助Web开发者更好的完善网站。下面来和小编一起看一看吧!

通过避免下面这些小错误,可以使得我们的网站变得更为友好。

错误1:表单的label标签跟表单字段没有关联

利用“for”属性允许用户单击label也可以选中表单中的内容。这可以扩大复选框和单选框的点击区域,非常实用。

错误2:logo图片没有链接到主页

点击网站logo就能转到主页已经成为了网民的条件反射。此外,值得一提的是,logo是指定放于左上角的。

错误3:不能区分是否已经访问过该链接

访问过的连接状态应该与没有访问过的有所区别,以便于让用户直观地明白哪个链接已经点击过了。

错误4:没有突出当前选中激活的表单项

可以使用“focus”展现选中的文本区域处于动态中。也可以使用CSS样式,例如,突出的边框或者略有变化的背景色。

错误5:图片中没有alt图片描述信息

你可能会觉得无关紧要,但是这是必要的!请记住添加一个说明性的alt属性到你的图片上,除非这张图片很明显是用作装饰的,那么这个alt属性才可以为空(但仍然存在!)。如果是使用图片作为链接点,那么可以输入链接地址。

错误6:背景图片后面没有设置背景色

在内容文字后面使用背景图片是很普遍的,但是我们同时要考虑到如果背景图片被客户端所禁用的情况,所以最好背景图后面再设置一个相似色调的背景颜色,以免文本变得不可阅读。

错误7:不一致的界面设计

矫枉过正大概就是这个意思了。有些设计师为了提高网页水平,故而为网站中的每个网页都创建了不同的设计。但是这只会混淆用户,使他们不知所措。记住,无论一个网站有多么的优秀和有吸引力,如果它的整体外观和感觉并不一致,那么用户就很难记住它。建议如下:

1、每个页面使用标准一致的模板链接到网站的主要部分。

2、关键字要简单。设计应该美观简洁,这样用户在使用时才不会困惑。

错误8:下划线的内容并不是链接

众所周知,带有下划线的内容很容易被当成链接。不要随随便便地在文字中来一个下划线,这样会让人困惑。如果真的想强调某个单词,不妨试试加粗或者加大字体。

最后总结

通过识别这些常见的错误,web开发人员可以避免很多让其他人饱受煎熬的挫折。我们不仅需要承认错误,还应该清楚错误的影响,并采取措施避免错误,这样才能有更好的开发表现——并有信心完成任务!

以上就是小编今天为大家分享的关于Web前端开发要学习的网页优化技巧有哪些的文章,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助,想要了解更多web前端知识记得关注北大青鸟web培训官网。最后祝愿小伙伴们工作顺利!

关于前端页面优化和前端页面优化有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注云尚网络www.ysfad.net。

上一篇:搜狗指数(搜狗指数怎么查询)
下一篇:百度资源分享网页(百度分享网站)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~