怎么合理管理、提高Javascript的性能

JSON 2016-08-22 18:32:05 3708

我随便去复制一段代码来:

J_valcho = function(w){
	var l = w.find('b'), r = w.find('i'), p = w.find('input'), a = ['spring', 'summer', 'fall','winter'];
	l.click(function(event) {
		var i = parseInt(p.attr('data-season')), y = parseInt(p.attr('data-year'));
		if(i == 1){i = 4;y--;p.attr('data-year',y);}else{i--;}
		p.val(y + a[i-1]).attr('data-season', i);
	});
	r.click(function(event) {
		var i = parseInt(p.attr('data-season')), y = parseInt(p.attr('data-year'));
		if(i == 4){i = 1;y++;p.attr('data-year',y);}else{i++;}
		p.val(y + ' ' + a[i-1]).attr('data-season', i);
	});
};

相信一眼看过去,就觉得很乱。

我在《SegmentFault》网站上看到了这个回复,我觉得不错,就信手拈来了。

我在大概一年前也有同样的困扰,你可以看到,大家的回复都很重肯,很多老司机。
其中这个回答非常棒,体现了很清晰的良好的设计思想,可以说一下点醒了我:

如何在绑定事件的时候,不用关心具体绑定给谁?

事实上,当你开始思考这个问题的时候,说明你开始走起了前端之路。

从jQuery解脱

你需要改变现有类似$('.class1')这种方式,有计划的用事件委派来绑定,这样你的问题解决了,也是第一步迈出了。想想看为什么你看到的牛逼的代码感觉很牛逼?
你需要抽离jQuery的部分和真正逻辑部分,相信我,我理解DOM操作复杂度,我也理解业务复杂度,所以你才需要拆分,不要再看到$('.class').parent().next().next()这种的。

面向对象

记得大学的课程吗,之所以叫面向对象思想,因为这是一种思考方式。你需要将代码颗粒、分散成小而美满足面向对象思想的结构,比如可复用性、适度的封装、善用继承等。
接下来对项目目录和文件结构,甚至命名有要求。简单说不再是一个页面一个js或者一个功能一个js,而是一个对象一个js。

沉淀代码

开始尝试比如React,AngularJS等,看看为什么这些框架写出来的和你现在业务代码不一样。推荐React。
这时候在回来思考你的代码,封装自己的DOM操作方式,形成自己的框架,和完整的前端工程体系。

最后

我总结了下这个路程:

  1. 开始有计划的用事件委派来绑定

  2. 开始抽离jQuery的部分和真正逻辑部分

  3. 开始将代码颗粒、分散成小而美满足面向对象思想的(比如可复用性、适度的封装、善用继承等)结构

  4. 开始对项目目录和文件结构,甚至命名有要求

  5. 善用技巧,摆脱类似$('.class1')这种方式

  6. 开始尝试比如React,AngularJS等。

  7. 封装自己的DOM操作方式

  8. 形成自己的框架

  9. 形成完整的前端工程体系

我觉得回答的不错。其实有的时候确实需要静下心来,考虑怎么提高自己的某个部分。Javascript 有很多争议,我记得看过国外的几片文章,一个作者说Javascript是屎(shi),而另外一个大牛又说Javascript是世界上最伟大的语言。

所以我经常一句话就是:一个语言的存在,只要它存在,那就有它存在的道理和价值。如果它真的很屎(shi),怎么可能能活那么久。

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/28.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
JavaScript怎么识别360浏览器?JS识别360急速模式方案,360流氓浏览器
日期计算器怎么使用
dns污染怎么解决?为什会出现这种情况?
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解
是Referer?Referer的作用?空Referer是怎么回事?
JS加密,JS在线混淆加密,JavaScript在线加密
JavaScript function 类型的使用说明
Javascript 加密/压缩后运行不了,JavaScript报错排查讲解
Autojs怎么安全加密?Autojs在线加密工具注意事项。
jpg怎么转bmp?三步教你搞定还免费使用!
最新文章
Java面向对象编程概念 2
PHP回显语句 85
Linux—文件树 102
C语言while循环和do while循环 127
Python元组剖析 190
MySQL触发器教程 278
sql使用布尔运算符和关系运算符 235
C语言的变量和常量 296
PostgreSQL:数据库角色 123
NumPy:数组操作例程 134
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 681817
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674712
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 601745
免费天气API,天气JSON API,不限次数获取十五天的天气预报 575938
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 552774
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509328
Elasticsearch教程(四) elasticsearch head 插件安装和使用 479919
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 264298
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244246
Elasticsearch教程(一),全程直播(小白级别) 225511
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...