2022
我们一起努力

优化网页性能的方法(优化网页方案)

目录:

  • 1、Web前端性能优化的实用技巧汇总
  • 2、前端性能优化有哪些方法
  • 3、网站优化方法有哪些?
  • 4、网站优化有哪些技巧和方法呢?
  • 5、如何优化web网站的性能

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

前端性能优化有哪些方法

前端性能优化的方法有:

一、减少http请求数

常用的减少http请求数有以下几种:

1、合并图片。当图片较多时,可以合并为一张大图,从而减少http请求数。经常变化的图片可能不太合适,变化相对稳定的就可以考虑。合并大图除了能减少http请求数外,还可以充分利用缓存来提升性能。

2、合并压缩css样式表和js脚本,他们的共同目的都是为了减少http连接数。

3、去掉不必要的请求。开发写代码或者系统升级之后残留的无效请求连接。

4、充分利用缓存。这里说的缓存是客户端侧缓存或者说浏览器缓存。Expires头信息是客户端侧缓存的重要依据,格式类似于Expires:sun ,20 Dec 2017 23:00:00 GMT。

如果当前时间小于Expires指定的时间,浏览器就会从缓存中直接获取相关的数据信息或html文件,如果当前时间大于Expires指定的时间,浏览器会向服务器发送请求来获取相关数据信息。

以Apache为例,可在Apache的配置文件httpd.conf中设置Expires。

二、图片优化

优化方法:

1、尽可能的使用PNG格式的图片,它相对来说体积较小。

2、对于不同格式的图片,在上线之前最好进行一定的优化。

3、图片的延迟加载,也叫做赖加载。

三、使用CDN

CDN即内容分发网络,可以使用户就近取得所需内容,解决网络拥挤的状况,提高用户访问网站的响应速度。

四、开启GZIP

GZIP即数据压缩,用于压缩使用Internet传输的所有文本资源。开启GZIP的方法很简单,到对应的web服务配置文件中设置一下即可。以Apache为例,在配置文件httpd.conf中添加。

五、样式表和JS文件的优化

一般我们会把css样式表文件放到文件的头部。比如,放到<head标签中,这样可以让CSS样式表尽早地完成下载。对应js脚本文件,一般我们把他放到页面的尾部。

六、使用无cookie域名

无cookie域名的概念:当发送一个请求时,同时还要请求一张静态的图片和发送cookie时,服务器对于这些cookie不会做任何使用,也就是说这些cookie没什么用,没不要随请求一同发送。

网站优化方法有哪些?

其实从我个人经验角度来讲主要是进行:定位、布局、推广、运营

1:定位

关键词的数量是很多的,随便用个扩词工具都能做出成千上万的关键词表,一般来说要选具备搜索指数的关键词,同时要对关键词进行需求分析,因为其实对于网站来说首页只能有3个指数词重点优化,栏目页每个栏目1个,长尾词不限制,因此你需要选择具备转化能力的关键词进行优化才能有效果。

我曾经在一家水处理设备公司做网络营销,通过关键词分析和市场需求分析发现“纯化水设备”这个词需求相对准确,并且产品单价高,利润空间大,于是立即建议公司转型主做纯化水设备。

目前这家公司50%的订单来自网络推广,SEO能带来的营业额一年也有个200-300万左右,整体通过推广能有500-800万左右。

2:布局

首页刚开始的时候肯定集中做1个词,这样比较快,后期最多逐步增加到3个。加微,前面是180,中间是4627,最后是9049

3:推广、运营

这方面其实没有太多要说的,因为很基础,内容建设、客户需求把握、页面优化这些都是SEO非常基础的操作,一个网站的SEO难点不在于每天做了什么,而在于每天做的内容是有目的、有计划的进行,通过页面元素建设实现网站公信力打造、实力塑造、成交转化。

网站优化有哪些技巧和方法呢?

高效的优化策略

1、关键词策略。挖掘、分析、筛选关键词,整理关键词列表。

这也是重中之重,关键词选好了,优化的根基也算打稳了,挖掘分析长尾关键词,优化好长尾词对核心词有非常大的帮助。

利用挖词工具,如5118关键词挖掘工具,挖出大量相关长尾词找到合适的词后,它具有导出功能,一键到位。

2、架构策略。针对关键词设计网站架构,这个阶段很重要,因为设计的网站架构、URL架构、内容架构取决了后面的一些SEO工作是否难易度。

3、内容策略。要做好调查分析什么样的题材和文章是用户想要的、最喜欢的?这时可以不考虑SEO,单纯的从用户角度考虑内容。

利用一些用户分析的工具,在大数据中分析出用户最关心,最需要的有哪些,获取了这些词,就是你需要去做内容和文案的词,也是目标群体最想看到的东西。

4、内链策略。做好了第2个步骤,内链方面就容易解决多了。

这时候的重点就是要考虑每一个关键词需要多少内链支持,主要可以通过面包屑导航、自动内链、全站链接等方面提供内链。

5、外链策略。做好内链后,接下来就要考虑外链,从原则上看,外链做得好的话,关键词的排名不会太差。

外链主要通过友情链接(包括首页和内页)、商业合作(例如在门户网站投放广告考虑合作,添加链接)、软文(各大平台投放的软文,加上链接)、自然外链(用户的转发,自然成了外链曝光宣传)来解决。

6、监控策略。后期的话,就要做好监控,像我每天会在一些工具平台上监控大量网站,除了自己的网站,同行或竞争对手的都要及时监控留意动态,对方做得好的地方,还是值得我们去学习参考的。

如何优化web网站的性能

一、删除功能:重要数据伪删除,删除校验用户(避免A用户可以删除任何人数据)。文件上传预览删除功能不能做服务器文件删除,不要为了节省服务器资源给用户留下接口。如果要资源有限,那么在删除的时候也需要做用户校验(文件命名或文件路径关联用户ID等)

二、发短信:基本上没有人愿意自己和短信运营商直接对接短信业务,一般都是通过第三方短信服务商购买短信。在用户主动获取短信的时候前端做图片验证码校验,后端做发送量,发送间隔校验(图片验证码是可以被机识别的)。做短信日志记录,这些日志可以为前面的后台校验提供数据,系统运行期间的各种好处就不一一举例了。重要功能做语音验证码,比如注册送现金的活动,短信验证码可以被识别

三、页面数据获取:用户平凡的刷新数据会加大服务器压力,当然谁也挡不住用户刷新是吧,但是减少主动刷新次数也是一个减小服务器压力的方法,咱不能自己坑自己吧,(Table页切换做校验,有数据就不再拉取等等)

四、前端静态资源做CDN,可以提高用户访问速度,减少服务器压力

五、用户输入做SQL注入,javascript脚本注入

六、用到的Ajax请求:做ajax加拦截器,通过消息头过滤掉非ajax的地址栏访问,(谁然不一定能全部拦截,但是拦掉一部分小白还是可以得,总不能是个人就能攻击吧)

七、用户输入数据校验,输入文字长度,数字输入大小,int 、long等数据类型合理使用,(积分兑换的时候用户只有1积分,你让他输入兑换积分,你输入21000000000,int 接收的时候,超出了范围成了负数1永远大于负数),还有一点很重要,你的任何校验都不要依靠前端,毕竟前端是为用户的体验而生的,为了自己的安全还是多写点后台校验吧,

八、异常捕获:不要将异常信息抛给用户,首先不美观,其次这些错误信息中可能含有SQL错误,通过这些sql可以了解到你的数据库结构

九、前端数据获取的时候减少不必要字段输出,java面向对象,表数据面向对象,本来页面只需要两个数据,结果你返回了一个实体,前端可已查看到你数据库表结构,多看几个页面那么你的数据库设计就给了人家了呢

十、用户信息加密传输,一定不要把重要数据留在客户端,泄密重要信息的责任是要你承担的哦

十一、 现在越来越多人使用阿里云服务器,做客户项目的时候服务器是客户购买的,当然阿里云账户客户也有,你的配置文件不加密客户就能看见你的系统配置,结合上面的搞搞你的数据库,那你的产品还有什么秘密,至于代码,你觉得他值钱么

十二、 前端JS 脚本 和页面分离,压缩或加密,不要你的团队幸幸苦苦开发的唯美的页面和效果,被人家一个ctrl+s拿去回家研究了,何况你的js中还有大量的逻辑

十三、 线程安全:

1、synchronized同步 (有序性、可见性),

2、使用生产者消费者模式,(唤醒notify(),等待wait())

3、volatile同步(可见性,非有序性,只在无基础数据的赋值操作,直接操作主内存,减少主内存**到工作内存的cpu消耗)

十四、 数据库读写分离的时候要注意个别业务读也要读在主库上(避免主从同步失败或延时)

赞(0)
文章名称:《优化网页性能的方法(优化网页方案)》
文章链接:https://www.fzvps.com/244820.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!