zoukankan      html  css  js  c++  java
  • 前端程序员容易忽视的一些基础知识

    #切身体会,从项目中小结出 前端程序员容易忽视的一些基础知识
    
    
    ##基础数据结构与算法
    现在有两个不同的JSON,比较复杂,可以参考[这里](http://www.cnblogs.com/p2227/p/3546725.html)的DEMO中返回的JSON。要比较它们的差异,除了用现成的工具如`beyond compare`以外,如果我们的机器上没有安装这个工具,能如何较快解决?作为一个程序员,一个个对比是不可行的,对比完也不会有什么收获。我会把之放进Excel中(如果你机器连这个都没有,那忽视我),先排序,再用`二分法`去快速定位找到有差异的JSON属性,即使是1024个字段的大数据,也最多10次的定位即可找到。其实算法这东西,并不是给你一道题目然后把死记下来的内容背出来,而是当你遇到相应的情景时,能想到用这个方法去解决。
    
    ##HTML/CSS
    ###DOCTYPE
    曾经项目中遇到这样一个问题,用其他浏览器打开页面是好的,唯独是IE8打开时出奇地慢。我注意到IE8打开时慢但CPU消耗并不高,只是网页空白很久没渲染出来,可以排除JS算法上的问题。经过细心研读代码发现,有人把一部分**script**、 **link**等标签放到了`DOCTYPE`的前面。`DOCTYPE`是用来告诉浏览器解释整个文档的一套法则的,一定要放在HTML部分的最前面,先有**script**标签,那就意味着浏览器已经开始解释了,后面再有`DOCTYPE`也是没有意义的了。把`DOCTYPE`放到HTML部分的最前面,一开始提及的问题就解决了。
    
    ###块状元素/内联元素,盒子模型
    HTML/CSS有一个特征,不会报错,只会有*浏览器渲染出来的结果不符合设计的逻辑*这个问题,所以遇到问题时也很难拿到网上去搜索答案。所以要把HTML/CSS写好,首先要自己理解当中的一些基础原理,要说HTML布局,`块状元素/内联元素`之间的关系我认为是最基础的,延伸出去,就是CSS`盒子模型`。另外,HTML中元素的嵌套组合关系也是十分重要的,CSS中很多属性,如position,z-index,都是**基于父对象而言**的,撇开HTML去谈CSS是无意义的。换而言之,要`在结构(Structure)之下谈论表现(Presentation)`。充分理解HTML/CSS中的这些基础,然后制定出适用的[一套规范方案](http://www.cnblogs.com/p2227/p/3541162.html),绝对让团队的工作效率提高,事半功倍。
    
    ###HTML/CSS就能做到的事情,无必要把它交给javascript去做
    HTML5中一个较大的改进是表单项、多了很多实用属性如required,date控件等,但是表单的一些很基础的用法,还是不能忘记的。曾经遇到过有人想要实现点击radio旁边的文字时也要选中radio,于是就用jQuery去选择,写事件。其实,这个功能,只需要用一个label标签把input包含在里面就可以实现了([参考](http://www.cnblogs.com/p2227/p/3537537.html))。还有一些例子,如IE的条件注释,CSS hack,这些功能我也见过去用javascript去实现
    ```javascript
    if(isIE() && IE.Verson == 7){//这些是人有封装好的方法
        $(".something").css({"700px"})
    }
    ```
    这样的代码只会白白耗费浏览器的性能。`HTML/CSS就能做到的事情,无必要把它交给javascript去做`。
    
    ##HTTP协议
    现在很多项目中都是用ajax去提交JSON到后台了,原始的那种HTTP提交已经比较少见(至少在我的项目中是这样),但是我们也不能忘记设置form的method、action的原始提交方式,因为这个才是表单提交的原型,有助于我们理解HTTP协议,例如[POST和GET的区别](http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html),理解数据是怎么样从前端到达后端的,又是怎么样从后端返回到前端。当你理解了这个,就可以更好地跟后端进行沟通,遇到数据上的问题也能较快地定位解决。
    
    
    ##javascript
    ###作用域
    学过好几种的编程语言,作用域问题都是老生常谈了。在javascript中更是有函数的作用域这一基础知识。关于这个,推荐《javascript权威指南》。当时我是把中文的读去再去读英文,把英文的读完去找[图解](http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html),才感觉到把这一点理解清楚的。
    
    ##JQuery
    ###选择器
    在一个HTML DOM 树中,我要进行一个比较复杂的元素选择,*不包含某些文字的带有某某类名的元素的邻居的父元素的……*然后怎么做?写一个很复杂的`jQuery`选择器?打住。jquery选择器原理是用[正则表达式](http://www.cnblogs.com/p2227/p/3537160.html)去分解你的选择器字符串(这一部分叫做`Sizzle`),然后再用内置的一些遍历函数如prev,next等(其实这些函数也是基于DOM提供的方法),去找到你想要的元素。我会不去盲目地进行Sizzle的语义歧义测试,而是自己根据自己的逻辑去用prev,next等去找到自己的元素;而且退一万步来说,我也会尽量避免使用复杂的选择器(之前的[方案](http://www.cnblogs.com/p2227/p/3541162.html)也有提及),单位个元素用ID,多个元素用类,绝对高效准确。
    
    以上是本人在实际项目中小结的部分容易忽视的基础,还有更多的,还要在以后一步步积累,归纳基础知识,避免这些问题。希望能帮助到大家,也能抛砖引玉。
    
  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/p2227/p/3556652.html
Copyright © 2011-2022 走看看