相关文章推荐
怕老婆的鸵鸟  ·  汪超男·  2 月前    · 
阳光的弓箭  ·  attributeerror ...·  1 年前    · 

原文链接: https://blog.csdn.net/zhehuaxuan/article/details/78336386

1.解决javascript性能问题的本质:
在javascript中,浏览器使用单一进程来处理UI和javascript脚本,在同一个时刻只能做一件事情,所以javascript的脚本执行耗时越久,那么性能就越差
无论是外链还是内链,页面的初始化都需要在脚本初始化之后显示。浏览器从上到下解析html的DOM,当遇到script脚本时,浏览器会停止页面的解析渲染,转去解析js代码,如果js的性能很差,那么就会影响页面的渲染速度,降低用户的体验

2.如何加快页面渲染速度
1)将脚本外链,并放在body的地步:优先加载html的DOM
2)合并脚本,多个脚本合并成一个:使用脚本合并工具
注:在Athena项目中,后期将能够合并的外链js文件都合并掉

3. 无阻塞脚本
1) 延迟的脚本

<script src=”xxx.js” type=”text/javascript” defer></script> 

一般只在IE4+和FireFox 3.5+支持 带有defer的script标签可以放在文档的任何位置 对应的javascript文件将在页面解析到script标签时开始下载,并且在onload事件开始之前执行。

2)动态脚本元素

function loadScript(url,callback){
    var script = document.createElement("script");
    script.type = "text/javascript";
    if(script.readyState){
        script.onreadystatechange = function(){
            if(script.readyState=="loaded"||script.readyState=="complete"){
                script.onreadystatechange = null;
                callback();
    }else{
        script.onload = function(){
            callback();
    script.src= null;
    document.getElementsByTagName("head")[0].appendChild(script);

   使用上述的方法动态的加载脚本,文件在执行完该函数时启动下载,文件的下载和执行过程不会阻塞页面的其他进程。 
动态脚本加载因为在浏览器的兼容性和易用性的优势中,成为最通用的无阻塞加载的解决方案。

3)XMLHttpRequest脚本注入

 var xhr = new XMLHttpRequest();
    xhr.open("get","***.js",true);
    xhr.onreadystatechange = function(){
        if(xhr.status>200&&xhr.status<300||xhr.status==304){
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.text = xhr.responseText;
            document.body.appendChild(script);
    xhr.send(null);

局限性:js文件只能来自相同的域,不能从SDN下载

4. 推荐使用的无阻塞模式
1)使用3中的2)方式,在body标签结束之前loadScript(url,callback)待加载执行的js文件
2)YUI3方式:待研究
3)LazyLoad 使用LazyLoad加载js文件,用法与1)相同,源码位于http://github.com/rgrove/lazyload/中,后续可以进行研究
4)LABjs

<script type="text/javascript" src="lab.js"></script>
<script type="text/javascript">
    $LAB.script("xxx.js").script("xxx.js").wait(function(){
    $LAB.script("xxx.js").wait().script("xxx.js").wait(function(){
</script>


综合上述,个人觉得使用2)和3)都合适,推荐使用3),2)值得研究源码

总结
</body> 闭合之前,将所有的<script>标签放在页面底部,确保在执行脚本之前完成渲染
合并脚本,页面中的脚本标签越少,页面的加载也越快
使用无阻塞的javascript加载方式:使用LazyLoad或者LABjs库
本文是由《高性能JAVASCRIPT》整理而来
 

原文链接:https://blog.csdn.net/zhehuaxuan/article/details/783363861.解决javascript性能问题的本质:   在javascript中,浏览器使用单一进程来处理UI和javascript脚本,在同一个时刻只能做一件事情,所以javascript的脚本执行耗时越久,那么性能就越差   无论是外链还是内链,页面的初始化都需要... 3.22+。 xhEditor完全基于Javascript开发,您可以应用在任何的服务端语言环境下,例如:PHP、ASP、ASP.NET、JAVA等。 xhEditor可以在您的CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统实现完美的无缝衔接。 自2009年4月首个版本发布以来,凭借我们人性化的用户体验和不断持续完善的态度,越来越多的网站选择了使用xhEditor。 我们不是最好的,但是我们会努力做的更好,我们愿意倾听和接受所有用户的心声,长期坚持的开发和完善下去。 主要特点: 精简迷你:初始加载4个文件,包括:1个js(50k)+2个css(10k)+1个图片(5k),总共65k。若js和css文件进行gzip压缩传输,可以进一步缩减为24k左右。 使用简单:简单的调用方式,加一个class属性就能
simplebox.js simplebox.js是一个轻量级的lightbox插件(〜936字节),可以轻松修改或扩展以满足您的需求。 该插件旨在快速,响应Swift,高效。 这个插件背后的想法是使设置灯箱的过程变得轻松。 我在查找和设置灯箱插件方面的经验非常糟糕。 我遇到的插件几乎总是具有太多功能。 simplebox.js设计为仅具有一项功能:lightboxing。 它开箱即用,仅允许一些关键设置。 要安装simplebox,您必须在页面中包含以下资源。 JS文件应按以下规定的顺序加载。 对于CSS文件,您可以将其与网站的样式表合并,也可以通过<head>的<link>元素从
当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图), 只有当图片出现在浏览器的可视区域内时,才设置图片正真的路径,让图片显示出来。这就是图片懒加载。 2.为什么要使用懒加载? 很多页面,内容很丰富,页面很长,图片较多。比如说各种商城页面。这些页面图片数量多,而且比较大,少说百来K,多则上兆。 要是页面载入就一次性加载完毕。估计大家都会等到黄花变成黄花菜了。 3.懒加载
我们先来看一段代码,html中使用script标签引入了script1.js、script1.js和script3.js三个文件。 <!DOCTYPE html> <html lang="ja"> <meta charset="utf-8"> <title>TEST HTML</title> </head> <script src="script1.js"></sc
以下为一个名为httpUtils.js文件,里面的post方法用到了jquery,在httpUtils.js中直接引入jquery的js文件,相应的html页面就只需要引入httpUtils.js即可使用jquery。 var script = document.createElement("script"); script.language = "javascript"; script.s...
可以使用QApplication::setStyleSheet()函数来加载多个qss文件,只需要将多个文件的路径以分号分隔开即可。例如: QApplication::setStyleSheet("file1.qss;file2.qss;file3.qss"); 这样就可以同时加载三个qss文件了。