[关闭]
@fengfeng 2014-10-11T08:51:02.000000Z 字数 1806 阅读 1123

前端开发建议

前端规范 开发建议 dev 开发约定


html

  1. doctype采用html5的doctype
  1. <!DOCTYPE html>
  1. 页面编码,尽量使用utf8编码,head中显示注明编码
  1. <meta charset="utf-8" />
  1. IE条件注释约定,在所有的css之前写一个空的条件注释来规避条件注释引起的性能阻塞问题
  1. <!DOCTYPE html>
  2. <!--[if IE]><![endif]-->
  3. <html>
  4. <head>
  5. <link type="text/css" rel="stylesheet href="1.css">
  6. <!‐‐[if IE 6 ]>
  7. <link type="text/css" rel="stylesheet" href="ie.css">
  8. <![endif]‐‐>
  9. </head>
  10. ...

通过class来进行ie css hack时,条件注释加到html上

  1. <!DOCTYPE html>
  2. <!--[if IE6]><html class="ie6"><![endif] -->
  3. <!--[if !IE]><!--><html><!--<![endif]-->
  4. <head>
  5. ...
  6. </head>
  7. <body>
  8. ...
  1. JS Hook:
    Hook 仅出现在 id 和 class 中, 命名规则:J_UpperCamelCase
  2. data-属性
    使用 HTML 元素的自定义属性:data-xxxx ( HTML5 中新增的属性)

js

外链js

  1. 上线前合并多个 JS 文件,压缩
  2. 将 JS 文件移至页面的底部

inlinejs的使用要根据实际情况,减少inlinejs 的使用

编码

  1. 避免使用全局变量
  2. 变量声明一定用var
  3. 模块化定义或自执行模块定义

    1. //自执行模块定义
    2. ;(function(){
    3. var var1,var2;
    4. //do something
    5. })();
    6. //cmd 模块定义
    7. define([dep1,dep2],function(var_dep1,var_dep2,...){
    8. var var1,var2;
    9. //do something
    10. //return {...};
    11. //return function(){};
    12. // no return
    13. });
    14. //避免在模块定义中使用window.xxx = xxx;
  4. 任何字面量值、全局变量或者属性名被使用超过 2 次(包括2次),都应该用局部变量存储代替

  5. 使用数组和对象的字面量

    1. var arr = [];
    2. var o = {};
  6. 使用局部变量(读写最快的标识符)
  7. 减少DOM的操作(DOM最耗时)
  8. 使用匈牙利命名法
  9. 请使用’On’
  10. 链式操作
  11. JSON
    11.1.

    JSON 的“名”规定为任何字符串
    JSON 字符串必须使用双引号包围
    JSON 数字整数的首位不允许为 0


11.2.
推荐使用JSON.parse/JSON.stringify,IE<=7用json2 进行shim支持
12. 给多个元素绑定同一个handle时,尽量使用事件代理;
13. 变化的东西配置化。对于经常变换的class,url,img,能配置化的尽量配置化。
14. 繁重的操作中分离元素,使用子查询缓存的父元素

  1. // 糟糕
  2. var
  3. $container = $("#container"),
  4. $containerLi = $("#container li"),
  5. $element = null;
  6. $element = $containerLi.first();
  7. //... 许多复杂的操作
  8. // better
  9. var
  10. $container = $("#container"),
  11. $containerLi = $container.find("li"),
  12. $element = null;
  13. $element = $containerLi.first().detach();
  14. //... 许多复杂的操作
  15. $container.append($element);
必要时组合jQuery和javascript原生代码 15. 代码精简
  1. $myVar = $myVar || $('#selector');
  2. // 糟糕
  3. if(collection.length > 0){..}
  4. // 建议
  5. if(collection.length){..}
  1. 维持代码的可读性

css

  1. 宽度尽可能由布局结构控制
  2. 大部分情况下不是需要定高度的
  3. 定义宽度的时候要同时关注是否定义了内边距
  4. ie6大部分的BUG可由haslayout解决
  5. 所有的margin统一一种方式,如所有的上边距由兄结点定义下边距的方式实现,可有效避免遇到边界重叠的问题。
  6. 内边距尽可能的由父级定义

其他

  1. 静态资源更新后一定要修改版本号 file?version=版本号
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注