网站首页 > 开源技术 正文
JavaScript ( JS ) 是一种具有函数优先的轻量级解释型或即时编译型的编程语言。它是作为开发Web 页面的脚本语言而出名的,是构建Web页面的首选。当然它也被用到了很多非浏览器环境中,例如 Node.js、 Apache CouchDB 和 Adobe Acrobat。JavaScript 是一种基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。本章节介绍在JavaScript部署过程中如何精简JavaScript和CSS。
根据雅虎前端性能测试团队给出的数据,40%到60%的雅虎用户拥有空的缓存体验,所有页面浏览量中约有20%是使用空缓存完成的,所以我们必须尽可能的保证页面的轻量化。
精简JavaScript和CSS通常有以下几种方式:
1) 精简(Minificaton)
精简的目的是减少JS文件的大小,从代码中移除不必要的字符,所有的注释以及不必要的空白字符(空格、换行和制表符)都需要移除。缩小JS文件可以减小下载文件的时间,这样可以改善响应时间。
2) 混淆(Obfuscation)
混淆是一种可应用于源代码的替代的优化方式,和精简一样,混淆也可以移除注释和空白,当然混淆同时还会改写代码,混淆会将函数和变量的名字转换为更短的字符串,这样代码更加精炼,当然代码也就变的更加难阅读了,如以下实例:
源代码如下:
var a = document.getElementById('a');
a.innerHTML = 'hello world';
混淆后的代码如下:
(function(a, b, c, d, e, f){
a[d] = a[b][c](d);
a[d][e]=f;
})(this, 'document', 'getElementById', 'a', 'innerHTML', 'hello world');
混淆比缩小更复杂,因此更容易因迷惑步骤本身而产生错误。在对美国十大网站的调查中,缩小比例达到了21%,而混淆的比例为25%。尽管模糊处理的尺寸减小了很多,但缩小JavaScript风险较小。
js混淆器正常有两种:
a) 通过正则替换实现的混淆器;
b) 通过语法树替换实现的混淆器。
3) 工具精简
两种用于缩小JavaScript代码的流行工具是JSMin和YUI Compressor。YUI压缩机还可以缩小CSS。
JSMin是一个过滤器,可以从JavaScript 文件中删除注释和不必要的空格。它通常会将文件大小减少一半,从而加快下载速度。
下面是使用JSMIN压缩的一个实例:
获得选定的商品属性源代码如下:
function getSelectedAttributes(formBuy)
{
var spec_arr = new Array();
var j = 0;
for (i = 0; i < formBuy.elements.length; i ++ )
{
var prefix = formBuy.elements[i].name.substr(0, 5);
if (prefix == 'spec_' && (
((formBuy.elements[i].type == 'radio' || formBuy.elements[i].type == 'checkbox') && formBuy.elements[i].checked) ||
formBuy.elements[i].tagName == 'SELECT'))
{
spec_arr[j] = formBuy.elements[i].value;
j++ ;
}
}
return spec_arr;
}
使用JSMIN压缩后的代码如下:
function getSelectedAttributes(formBuy){var spec_arr=new Array();var j=0;for(i=0;i<formBuy.elements.length;i++){var prefix=formBuy.elements[i].name.substr(0,5);if(prefix=='spec_'&&(((formBuy.elements[i].type=='radio'||formBuy.elements[i].type=='checkbox')&&formBuy.elements[i].checked)||formBuy.elements[i].tagName=='SELECT')){spec_arr[j]=formBuy.elements[i].value;j++;}}return spec_arr;}
YUI Compressor设计为100%安全,并且比大多数其他工具产生更高的压缩率。与JSMin相比,YUI库的测试节省了20%以上(在HTTP压缩后变为10%)。YUI Compressor还能够通过使用Isaac Schlueter基于正则表达式的CSS缩小器的端口来压缩CSS文件。
以上面获得选定的商品属性源代码为例,使用YUI Compressor压缩后的代码如下:
function getSelectedAttributes(a){var b=[],c=0;for(i=0;i<a.elements.length;i++){var d=a.elements[i].name.substr(0,5);'spec_'==d&&(('radio'==a.elements[i].type||'checkbox'==a.elements[i].type)&&a.elements[i].checked||'SELECT'==a.elements[i].tagName)&&(b[c]=a.elements[i].value,c++)}return b}
4) 压缩和精简(Gzip and Minification)
上面介绍的是使用JSMIN和YUI Compressor工具对内容进行压缩,我们除了可以对文件内容压缩外,也可以对JS和CSS文件本身进行压缩,通常使用最多的是Gzip的压缩方式对文件进行压缩,这样通常可以使用文件大小缩小70%左右。
Gzip对Web系统中的.js和.css文件进行压缩,保存成.jsgz和.cssgz的文件,同时将web系统中引用js、css文件的地方转换为引用jsgz 、cssgz文件,客户端请求jsgz、cssgz文件时,服务器通过过滤器设置header,将所有以jsgz、cssgz结尾的文件的请求增加设置“header Content-Encoding=gzip”的响应头。
5) 精简CSS(Minifying CSS)
对CSS的精简通常会小于JavaScript的精简,因为通常CSS中的注释和空白比JavaScript少,以CSS优化最多的是合并相同的类、移除不使用的等。当然也有很多工具可以用于优化CSS,类似于JavaScript的优化方式。常见的CSS优化工具有:TestMyCSS、Stylelint和CSS Triggers等。
猜你喜欢
- 2024-10-07 前端进阶,提高技能(前端如何快速提升自己)
- 2024-10-07 性能测试YSLOW前端调优23大规则(七)——避免使用CSS表达式
- 2024-10-07 著名ARPG伊苏系列的新作《伊苏8》
- 2024-10-07 「优化连载三」前端优化(前端优化是做什么的)
- 2024-10-07 大型网站Web前端优化最佳实践,以及最全优化工具集锦
- 2024-10-07 史上最全java架构师技能图谱(上)(java架构师进阶之路)
- 2024-10-07 入门学习web前端的一点小建议(web前端怎么学好)
- 2024-10-07 前端学习路线(前端怎么学)
- 2024-10-07 零基础学前端看哪些书?(零基础学前端书籍推荐)
- 2024-10-07 YSLOW性能测试前端调优23大规则(十六):减少DOM数
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)