在学校敲代码的时候,考虑的可能是怎么实现这个功能,怎么样把功能做的酷一点,可是当你进入了公司,你就会发现可能代码把功能实现是一方面的,你代码还需要良好的代码风格,命名规范,可读性易于维护,以及性能等等,so出现了下面这篇文章(欢迎大家指出错误,侵删)

1命名规则

按照惯例,ECMAScript标识符采用驼峰大小写格式
标识符:就是指变量,函数,属性的名字,或者是函数的参数
小驼峰式:第一个单词首字母小写,后面其他单词首字母大写;

eg:textHeight

大驼峰式:每一个单词字母都大写;

eg:TextHeigh

1.1变量

命名方法:小驼峰式命名
命名规范: 前缀名词

eg: let minCount = 10  let price = 100

注:全局变量单词全部大写

eg:var PRICE = 100

1.2常量

命名方法:单词全部大写

eg: const PRICE = 100

1.3 函数

函数的命名应该能描绘出函数的作用和功能
命名方法:小驼峰式命名
命名规范: 前缀动词

Eg: function getHeight(){};
function setHeight(){};

1.4 类与构造函数

命名方法: 大驼峰式命名
命名规范: 前缀名称

eg: class Person{constructor(name){this.name = name;}
}
var person = new Person('dadan');
eg:function Person(name){this.name = name;
}
var  person = new Person('dadan');

2 注释

2.1单行注释

说明:单行注释//
使用 :与注释代码(文字)代码之间保留一个空格

2.2多行注释

说明:多行注释以 /* 开头, */ 结尾
使用:若开始 /* 和结束*/都在一行,推荐采用单行注释。若至少三行注释时,第一行为 /*,最后行为 */

3 松散耦合

3.1html/js

虽然html和js天生就需要交互,但是有些方法将其过于紧密的耦合在了一起,如下

<button onClick="doSomething()">点击</button>

如上事件处理程序属性值的紧密耦合如果出现了js问题,就要判断是出现在html部分上还是js文件,因此影响了可维护性,或者在js中创建大量的Dom结构

body.innerHTML = '<div><ul><li></li><li></li></ul></div>';

如上代码出现问题。定位到这个错误很困难,因为你首先需要看页面源代码查找插入的这段HTML,但是找不到,因为它是动态生成,如果你对数据或者布局更改也会要求更改js,所以html呈现应该‘尽可能’的与js分离。

3.2 css/js

有的时候css对js的过于紧密的耦合
eg:触发焦点时,改变style

element.style.color = ‘red’;

如果未来需要改变样式表,css和js文件可能都需要修改,这就不利于开发人员维护了,所以两个层次之间需要有清晰的划分,让耦合变得松散一些所以如下所示

element.className = ‘edit’;

只修改某个元素的css类,这样js可以更改样式类,但不会直接影响到元素的样式,任何显示问题都可以追溯到css而不是js,这样会不会好很多

3.3应用逻辑/事件处理程序耦合

  document.addEventListener('keypress', function (event) {if (event.keyCode === 13) {var value = (Math.random() + 1) * 5;if (value < 7) {console.log(value);}}});

这个事件处理程序除了应用逻辑还有事件处理,这样方式的问题有其双重性,首先除了通过这个事件之外没有别的方法执行此应用逻辑,如果代码出了问题,那么是在调用之前出了问题还是在应用逻辑中出现的问题?那就会使得调试变得困难,其次如果后续事件需要同样的逻辑,你就需要把代码在copy一遍,so我们需要一个好的解决方法
解决办法:将应用逻辑和事件处理程序相分离,将应用逻辑单独封装成一个函数

function getValue(value){if(value < 7){console.log(value);}document.addEventListener('keypress', function (event) {if (event.keyCode === 13) {var value = (Math.random() + 1) * 5;getValue(value);}});

4语义化标签

语义化的意思就是从名称中一眼就能看出内容是什么,HTML标签就是通过浅显易懂的元素名和属性名一眼就能看出内容和作用是什么,这样有益于代码更好的维护。
不过说到标签对于我们这种从学校初入到公司的菜鸟们最能想到的就是div标签+span标签了,还记得刚来公司让做例子的时候,从标签的使用,到变量以及函数命名再到代码之间的规范,没有一个不让我师傅头疼,因为写代码的时候太随意了,真的是太随意了,虽然现在也有些随意哈
如果让我写一个页面我可能用的都是div标签,写成之后连标签里的id名也只会div1 或者div2,显然这样的代码是及其难维护的,这时如果把标签换成

<header>,<nav>,<article>,<sections>,<aside>,<footer>

等语义化的标签代码是不是会清晰很多,像这样如果页面的导航栏是div,侧边栏也是div,唯一对div进行区别的就是id,如果代码规范一点的程序猿,可能会

<div id="nav"></div>
<div id="aside"></div>

,如果随意一点的不太注意代码风格的程序员可能就是这样了

<div id="div1"></div>
<div id="div2"></div>

怎么样,如果是你来维护这段代码,过了一个月你还记的div1,div2,分别对应什么了么,有没有气的想撞墙,哈哈,所以这个时候如果你用了html5标签会不会好很多

<nav></nav>
<aside><span>答案略</span>
</aside>

那下面对这几个标签和用法大概的说一下

<header>:定义文档的页眉<header><h1>wecome</h1><p>My name is da dan</p></header>
<nav>:标记链接的导航<nav><a href="home.index">Home</a><a href="personal.index">Personal</a></nav>>
<article>规定独立的自包含内容(表示的是一个文档,页面,应用或是网站中的一个独立容器)
<sections>标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分,应用的典型场景(文章的章节,论文的编导,标签对话框的标签页)
注释:sections标签与article标签有点容易搞混,article代表一个的完整的相关的内容块而section只能算是整体的一部分
<article><header><h1>不要熬夜</h1><p><time pubdate datetime="2017/10/9"></time></p></header><p>内容...</p><section><h1>评论区</h1><article><header><p>评论者</p><p><time pubdate datetime="2017/10/10"></time></p></header><p>评论内容</p></article></section></article>

so看完这个例子有没有清晰一点

<aside>侧栏标签(可用作文章的侧栏,广告,相关文章,新闻的链接)<aside><h4>learn tools</h4><p>小D词典</p><p>开心词场</p></aside>
<footer>定义文档或节的页脚,页脚通常包含作者信息,版权信息,使用条款链接,联系信息等等
<footer><p>Posted by: author</p></footer>
觉得还有一个挺好用的标签<figure>,它规定独立的流内容(图像,图表,照片,代码等)<figcaption>定义figure元素的标题
<figure><figcaption>妹子</figcaption><img src="girl.jpg" width="350" height="234" />
</figure>

5性能优化

5.1减少DOM的操作

尽量不要使用循环操作DOM的方式,而是在循环结束后一次性写入。
eg:想在ul中动态的插入多个li子节点

<ul id="ul">
</ul>

1.循环操作DOM方式

 window.onload = function(){var oUl = document.getElementById("ul");
for (var i = 0; i < 5; i++) {var oLi = document.createElement(“li”);oLi.innerText = i;oUl.appendChild(oLi);
}
}

2.一次性插入

window.onload = function(){var oUl = document.getElementById("ul");
var aLi = “”;
for (var i = 0; i < 5; i++) {aLi += “li”;aLi += i;aLi += “li”;
}
oUl.innerHtml = aLi;
}

5.2运用事件代理

事件冒泡->事件不仅仅可以在时间目标上处理,目标的任何祖先节点上也可以处理。在祖先节点绑定事件,只需要操作一次DOM,可以通过事件流找到目标节点,节省了遍历子节点的时间,对于要绑定大量的子节点的时候,效率可想而知。

<ul id="ul"><li>111</li><li>222</li><li>333</li><li>444</li>
</ul>

1.遍历节点绑定事件:
window.onload = function(){

var oUl = document.getElementById("ul1");
var aLi = oUl.getElementsByTagName('li');
for(var i=0;i<aLi.length;i++){aLi[i].onclick = function(){alert(123);}
}

}
2.利用事件代理:

window.onload = function(){var oUl = document.getElementById("ul");oUl.onclick = function(ev){var ev = ev || window.event;var target = ev.target || ev.srcElement;if(target.nodeName.toLowerCase() == 'li'){alert(123);alert(target.innerHTML);}}
}

5.3文件的引用:

将css文件的引用放在头部,js文件的引用放在尾部。
浏览器在渲染的过程中,遇到js文件会暂停当前的渲染进程,优先执行js的进程,而文档渲染时至上而下的,如果把js放到文件头部,则会影响接下来的DOM的渲染。典型的,在头文件中用alert,浏览器就会在先弹出alert对话框,停止接下来的DOM渲染,会有白屏现象。还有一种情况是,js可能会改变DOM文档的结构,典型的有,document.write,这样都会造成不必要的重绘和重排。

5.4减少重绘重排

5.4.1 Repaint(重绘)就是在一个元素的外观被改变,但没有改变布局(宽高)的情况下发生,如改变visibility、outline、背景色等等。
5.4.2 Reflow(重排)就是DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受到影响的部分失效,浏览器会验证DOM树上的所有其它结点的visibility属性,这也是Reflow低效的原因。如:改变窗囗大小、改变文字大小、内容的改变、浏览器窗口变化,style属性的改变等等。如果Reflow的过于频繁,CPU使用率就会噌噌的往上涨

在下面几种情况会重排:
页面初始渲染
添加/删除可见DOM元素
改变元素位置
改变元素尺寸(宽、高、内外边距、边框等)
改变元素内容(文本或图片等)
改变窗口尺寸
2.通过设置style属性改变结点样式的话,每设置一次都会导致一次reflow,所以最好通过设置class的方式; 有动画效果的元素,它的position属性应当设为fixed或absolute,这样不会影响其它元素的布局;如果功能需求上不能设置position为fixed或absolute,那么就权衡速度的平滑性。
怎么减少重排?说一下我的方法:

1.分离读写操作
var curLeft=div.offsetLeft;
var curTop=div.offsetTop;
div.style.left=curLeft+1+'px';
div.style.top=curTop+1+'px';

2.样式集中改变 可以添加一个类,样式都在类中改变
3.可以使用absolute脱离文档流。
4.使用 display:none ,不使用 visibility,也不要改变 它的 z-index
5.能用CSS3实现的就用css3实现。

5.5 其他:

合并图片(css sprites精灵)
合并CSS和JS文件
缩小图片的分辨率
改变图片的格式(png)
降低图片的保存质量
等等


希望此篇文章对你们能有帮助啊,笔芯

程序猿小白应该注意什么 1相关推荐

  1. 分享一个程序猿小白两年工作经验的职业之路

    当程序员这一行也有两年多了,由当初的那个菜鸟小白到现在的小白,两年多感觉却只是抹掉了菜鸟二字,不是自谦也不是自嘲,只是自己对于自己的一个客观评价.回首这两年多的时光,有的不仅是感慨,一切经历的学到的都 ...

  2. 程序猿小白应该注意什么

    在学校敲代码的时候,考虑的可能是怎么实现这个功能,怎么样把功能做的酷一点,可是当你进入了公司,你就会发现可能代码把功能实现是一方面的,你代码还需要良好的代码风格,命名规范,可读性易于维护,以及性能等等 ...

  3. 做一个微信小程序给TA——程序猿小白的情人节礼物(微信小程序入门——一文学会小程序开发到发布小程序的全过程)

    # 情人节 可送给女朋友 的礼物,或者作为两人的纪念  # 效果展示:微信搜索 "王美美与曾小帅"  小程序即可查看效果 # 微信小程序入门--使用免费后端云(Bmod)搭建留言板 ...

  4. P8可以年入170万,那P10级别的程序猿,每天都在干嘛?

    "视学算法"关注&置顶 每日分享,干货速递! 本文转载自「 Python爱好者社区」 "你知道张江凌晨四点钟是什么样子吗?"能问出这个问题的人,是一位程 ...

  5. 做程序猿的老婆应该注意的一些事情

    转自:http://www.jianshu.com/p/492903fb7005 十一年前我和程序猿第一次见面,还是大一军训期间.我甚至不确定程序猿是否记得那是第一次见面.当时不小心装伪文艺参加了吉他 ...

  6. 程序猿,如果下次有人让你帮忙开发App,你就这样回答他

    无论什么公司,只要涉及IT.程序等元素,都会有这样一类人存在.首先一点,他们会编程,并且善钻研.爱挑战.还爱玩儿游戏外加茶水咖啡! 平时他们可以工作到很晚,一到周末也可以呼呼睡到自然醒.在外界看来,他 ...

  7. 程序猿的崛起,一篇文章看懂编程语言

    王国维在<人间词话>里写道:古今之成大事业.大学问者,必经过三种之境界:"昨夜西风凋碧树.独上高楼,望尽天涯路."此第一境也."衣带渐宽终不悔,为伊消得人憔悴 ...

  8. 给程序猿简历的一些建议

    近期一直郁闷投出去的简历没收到希望中的回复,自己认为自己技术也没那么不堪入目,问题可能出如今简历上,于是搜索了下,对于程序猿写简历的一些建议.希望对大家有所帮助.希望对自己也有帮助.最后让offer来 ...

  9. 【教你如何放大招】程序猿是如何一点点的吃下一个产品的

    本文宗旨 目标 : 从一个程序猿的角度来解读如何消化掉产品经理给的需求 即产品经理放一个大招 程序猿如何接大招 适读人群 : 1⃣️ 刚入行的小白:对开发的流程还不太熟悉 接到一个需求 一头乱码 一头 ...

最新文章

  1. ReadyFor4GB破解win7支持4G内存恢复到原系统
  2. Java常用类之【日期相关类】
  3. 安徽建筑大学计算机专业年新,2017年安徽建筑大学计算机技术909数据结构[专业硕士]考研题库...
  4. HDU 4917 Permutation(拓扑排序 + 状压DP + 组合数)
  5. How to deal with error message No item category could be determined
  6. P3128 [USACO15DEC]Max Flow P
  7. 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
  8. c语言++数组名【数字】_C ++程序在数组中打印所有非重复数字
  9. python fortran混合编程_python调用fortran模块
  10. 贝叶斯网的R实现( Bayesian networks in R)bnlearn(3)
  11. Centos7安装 mariadb 最新版
  12. 中国移动H1S-3光猫破解路由器桥接教程
  13. 空间点过程与随机测度(二):测度的故事
  14. 分布式异步任务神器-Celery
  15. 浮生事,何必念念不忘
  16. 影视解说短视频如何配音?三个文字转语音小技巧,配音其实也不难
  17. python高并发编程_python 并发编程
  18. 【第二十四题】逻辑闭环(北理工/北京理工大学/程序设计方法与实践/小学期 )
  19. flink中的时间属性
  20. VTK:数据动画用法实战

热门文章

  1. 浅谈搜狐云景PAAS平台
  2. SFFAI召集人蓄势待发!你准备好了吗?
  3. android 画图 出界,android:字符串索引出界
  4. np.save 和 sio.savemat 简单的比较
  5. 大人,时代变了——手游抽卡异军突起
  6. 初学者学习深度学习,不得不会的Google Colab基本操作
  7. Tanya出了新碟,这让我想起来了高中时听她的记念
  8. 郭全中:对大数据的认识该正本清源
  9. 重叠头像最简单实现(RecyclerView实现)
  10. Media Queries之Respond.js