Skip to content

WEB前端编码变迁记

方跃明 2016-12-19

话说天下大势,分久必合,合久必分。 —— 《三国演义》

参禅之初,看山是山,看水是水;禅有悟时,看山不是山,看水不是水;禅中彻悟,看山仍然山,看水仍然是水。—— 行思

一、逐鹿中原

HTML、CSS、JS 无关联堆砌

特点

  • 代码杂糅HTML、CSS、JS
  • 无规范可循,缩进、引号一团糟,必要标签缺失是常态
  • 各种硬编码,width、height、px满天飞
  • HTML标签内置javascript、style随处可见
  • 兼容性极差,不同系统、不同浏览器、不同终端展现结果不可预期
  • 难以维护,甚至写代码的本人过一段时间后都搞不明白当初写的是什么
  • 需求变更导致大量改编甚至重写

目录

├── index.htm
├── po.html
├── css.css
├── img
│   ├── 订单20161219.jpg
│   ├── 工单截图.jpeg
│   └── logo.GIF
└── js
    └── jquery.js

代码

html
<title>进度跟踪表</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/function.js"></script>
<body style="margin:0; padding:0; background-color:#FFFFFF; ">
<TABLE id='jdtrth' class='tablehkled' cellspacing='0' cellpadding='0' width='1094px' >
<tr align='center' class='jdtrth' >
<th style='width:40px;'>序号</th>
<th style='width:100px;' onclick='javascript:openpo();'>订单</th>
<th style='width:100px;'>工单</th>
<th style='width:200px;'>产品</th>
<th style='width:80px;'>要求交期</th>
<th style='width:60px;'>订单数量</th>
<th style='width:60px;'>入库数量</th>
<th style='width:60px;'>销货数量</th>
</tr></table>

二、三分天下

《网站重构》倡导的结构、表现、行为分离

特点

  • 目录结构清晰,HTML(结构)、CSS(表现)、JS(行为)各司其职
  • 遵循某种编码规范,缩进、引号、标签高度统一
  • JS文件引入,容易引起全局变量污染
  • JS、CSS、HTML分离,耦合度高,修改某一文件可能引起关联文件功能失效
  • 编码需同时查看编写多个文件,影响效率

目录

├── index.html
├── css
│   └── css.css
├── js
│   ├── app.js
│   └── page.js
├── html
│   ├── blog.html
│   └── about.html
└── img
    ├── logo.png
    ├── favicon.ico
    └── apple-icon.png

代码

html
<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <h1>你好,世界!</h1>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>

三、分久必合

React、Vue.js的WEB组件化

特点

  • 遵循编码规范的“HTML、CSS、JS”组合体,请注意引号
  • 共同实现某一项特定功能、提供外界通信接口
  • 可重复利用,模块化、组件化
  • 请特别注意与“看山是山看水是水”的区别

目录结构(典型情况)

├── index.html
├── src
│   ├── main.js
│   ├── App.vue
│   └── components
│       └── home.vue
├── dist
│   ├── build.js
│   └── assets
│       └── logo.png
└── node_modules
    ├── vue
    └── webpack

代码

jsx
// React
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);
vue
// Vue.js
<template>
  <div id="home">
    <h3>Home</h3>
    <div>
      Here maybe a silder, but nothing ...
    </div>
    <div>
      Here maybe a news lists, but nothing ...
    </div>
  </div>
</template>

<script>
  export default {
    name: 'home'
  }
</script>

<style scoped>
</style>
WEB