[关闭]
@kungfuboy 2017-02-15T10:22:46.000000Z 字数 3231 阅读 985

代码review

代码review


H5 奇酷消息盒子 flight.js

使用格式化写渲染数据的过程

  1. function setJingTing(flightContent, flightObj) {
  2. flightContent += '<section class="introduce flightdetail">';
  3. flightContent += '<div class="bottom1px fs14"><img src="../images/pass.png" />';
  4. flightContent += checkAirport(flightObj['FlightDepAirport']);// 珠海金湾机场 26℃ 小雨
  5. flightContent += '</div>';
  6. flightContent += '<table cellpadding="0" cellspacing="0">';
  7. flightContent += '<tr>';
  8. flightContent += '<td>航站楼</td>';
  9. flightContent += '<td>停留</td>';
  10. flightContent += '<td>登机口</td>';
  11. flightContent += '</tr>';
  12. flightContent += '<tr>';
  13. flightContent += '<td><p>';
  14. flightContent += flightObj['FlightHTerminal'].trim() == "" ? "--"
  15. : flightObj['FlightHTerminal'];
  16. flightContent += '</p></td>';
  17. flightContent += '<td><p>';
  18. flightContent += getResidenceTime(flightObj);
  19. flightContent += '</p></td>';
  20. flightContent += '<td><p>';
  21. flightContent += flightObj['BoardGate'].trim() == "" ? "--"
  22. : flightObj['BoardGate'];
  23. flightContent += '</p></td>';
  24. flightContent += '</tr>';
  25. flightContent += '</table>';
  26. flightContent += '</section>';
  27. $("#flightContent").append(flightContent)
  28. }

优化后:

  1. function setJingTing(flightContent, flightObj) {
  2. flightContent = '<section class="introduce flightdetail">' +
  3. '<div class="bottom1px fs14"> +
  4. '<img src="../images/pass.png" />' +
  5. checkAirport(flightObj['FlightDepAirport']) +
  6. '</div>'+
  7. '<table cellpadding="0" cellspacing="0">' +
  8. '<tr>'+
  9. '<td>航站楼</td>'+
  10. '<td>停留</td>'+
  11. '<td>登机口</td>'+
  12. '</tr>'+
  13. '<tr>'+
  14. '<td>'+
  15. '<p>'+
  16. flightObj['FlightHTerminal'].trim() == "" ? "--" : flightObj['FlightHTerminal'] +
  17. '</p>'+
  18. '</td>'+
  19. '<td>'+
  20. '<p>' +
  21. getResidenceTime(flightObj)+
  22. '</p>'+
  23. '</td>'+
  24. '<td>'+
  25. '<p>'+
  26. flightObj['BoardGate'].trim() == "" ? "--"
  27. : flightObj['BoardGate']+
  28. '</p>'+
  29. </td>'+
  30. '</tr>'+
  31. '</table>'+
  32. '</section>';
  33. $("#flightContent").append(flightContent)
  34. }

去掉table,重构后:

  1. function setJingTing(flightContent, flightObj) {
  2. flightContent += '<section class="introduce flightdetail">' +
  3. '<div class="bottom1px fs14"> +
  4. '<img src="../images/pass.png" />' +
  5. checkAirport(flightObj['FlightDepAirport']) +
  6. '</div>'+
  7. '<div>'+
  8. '<span>航站楼</span>'+
  9. '<span>停留</span>'+
  10. '<span>登机口</span>'+
  11. '</div>'+
  12. '<div>'+
  13. '<span>flightObj["FlightHTerminal"].trim() == "" ? "--" : flightObj["FlightHTerminal"]</span>'+
  14. '<span>getResidenceTime(flightObj)</span>'+
  15. '<span>flightObj["BoardGate"].trim() == "" ? "--"
  16. : flightObj["BoardGate"]</span>'+
  17. '</div>'+
  18. '</section>';
  19. $("#flightContent").append(flightContent)
  20. }

截图:
image_1b8h19bfiju41nuk10bmq5l1peh9.png-93.2kB

简单的if可以用三目元算符代替:

  1. function isNull(str) {
  2. if (typeof str != "undefined" && str != null && str.length > 0) {
  3. return false;
  4. } else {
  5. return true;
  6. }
  7. }
  8. function defaultData(){
  9. if(isNull(cfcz)){cfcz="" ; }// 出发时间
  10. if(isNull(dds)){dds="" ; }
  11. if(isNull(ddTime)){ddTime="";}
  12. if(isNull(cfTime)){cfTime="";}
  13. if(isNull(seat)){seat="";$("#seatId").hide();}
  14. }
  15. // if当然是写成这样比较好读:
  16. if(condition) {
  17. // code
  18. } else {
  19. // todo
  20. }
  21. // 所以……
  22. function defaultData(){
  23. isNull(cfcz) ? cfcz="" : null; // 出发时间
  24. isNull(dds) ? dds="" : null;
  25. isNull(ddTime) ? ddTime="" : null;
  26. isNull(cfTime) ? cfTime="" : null;
  27. isNull(seat) ? seat="" : $("#seatId").hide();
  28. }
  29. // 用优先级更高的&&代替只有一个执行语句的三目元算符
  30. function defaultData(){
  31. isNull(cfcz) && cfcz=""; // 出发时间
  32. isNull(dds) && dds="";
  33. isNull(ddTime) && ddTime="";
  34. isNull(cfTime) && cfTime="";
  35. isNull(seat) ? seat="" : $("#seatId").hide();
  36. }
  37. // 例子:
  38. var a = 6;
  39. if(a > 5) {
  40. console.log('ok');
  41. }
  42. a > 5 && console.log('ok');

能用变量的尽量用变量

  1. /* sdkVersion */
  2. var str = checkActionAndVersion(actionDataType, "201604051432");
  3. // 优化后
  4. var versionCode = '201604051432';
  5. var str = checkActionAndVersion(actionDataType, versionCode);

jquery源码压缩前
image_1b8h4nke71i0o1no21n2lrie1th113.png-10.9kB

jquery源码压缩后
image_1b8h4mfkcddt1k191v6j1l2r1b8lm.png-11.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注