有 网友 提到 :

“复杂的页面,一个页面加载的模块多,各种异步请求,页面渲染,jquery链式编程操作dom数过于频繁。现在的前台越来越复杂,逻辑臃肿。”

哎, 所以 我说, 要改成用 同步调用 。

什么是 同步调用, 就是 后端代码 里 调用 数据库 那样 。

如若不然, 还沉浸 在 “回调” 带来的 光辉的技术感 里的 话,  回调地狱  无法解决 。

现在 大家 都 以 “回调” 为荣,  以 “异步” 为荣, 以此 为 潮流, 以此 为 高效, 以此 为 进步, 以此 为 先进 。

这是 错误 的 。

前端 Js 里采用 AJAX 异步回调 的 方式 是 被迫 的, 事实上 当年 前端 Js 开发人员 很羡慕 其它语言 比如 Java C# 这样 可以 同步调用数据库 。

而 Js 没有这个能力 。

这大概是因为 Javascript 是 单线程 模型 吧 !  不能 Sleep() , 也不能 Wait()  。

我强调一点, 程序员 要对 程序 有 控制感 。

太多的 回调 把 程序 切割 的 支离破碎, 这样的 代码 是 病态 的 代码 。

当然大家可能会说  “异步回调 提升了效率  ……    某某框架 是 回调 的 架构, 所以 速度 如何如何 的快, 可以支持 多大多大 的 并发量  ……”,

对此 我不想多说, 我今天在 QQ 群 里说了很多 。

总之, 且 不论 “异步回调” 是否 真的 提升了 效率,  我想引用 大家经常 引用的 一句话   “代码是写给人看的”,

还有 一句话 是   “能用硬件解决的事不要让软件来解决”,

还有一句话 是   “硬件是最廉价的”,

说了 那么多效率,  有没考虑一下   “代码是写给人看的”    好伐   ?!

而且 异步回调 是否真的能带来 效率 提升 这个 还 值得怀疑,   我只是觉得, 把 架构 搞得 很复杂, 效率 肯定 好不到哪去 。

关于 异步回调 是否能 提升性能, 可以参考 《后线程时代 的 应用程序 架构》  https://www.cnblogs.com/KSongKing/p/10228842.html

不过 Js 现在 学 C# , 搞了个 await 关键字, 看起来能实现一个  “伪同步”,  至少 代码 不再是 异步回调, 是 顺序 的 。

还行,  这问题就先过了吧 。

接下来要说 第二个问题,  就是 页面 模型, 或者说 页面开发架构, 或者说 页面控件模型, 或者说 页面控件架构 。

业界 已经被 各种 “前端框架” 荼毒多年 。

前端界 已经被 各种 “前端框架” 荼毒多年 。

这是 现实,  也是 事实 。

可以看看我写的    jlet    https://www.cnblogs.com/KSongKing/p/9455238.html

jlet 是一个 简单 的 前端 Js 库,   重要的是 提出了 “库” 的 思想,  为 前端架构 指出了一个 方向 。

我不赞同 MVVM ,   MVVM  同样是一种 过度封装 的 思想,

我认为 好的做法是,  提供 一个一个  封装  好的 控件,  用 代码 调用  控件 的 属性 和 方法 。

不要 用 各种 “UI 框架” 来 绑架 开发方式,

也 不要 用  MVVM  等方式   把  控制逻辑  绑架 到 控件 里,

程序 就是 程序,

程序员 应该 对 程序 有 控制感,

过度 的 控制反转 会 使 程序员 极大 的 丧失 对 程序 的 控制感 。

少搞框架,  少搞声明式 。

jQuery 和 一些 前端框架  会用 “声明式” 的 方式 来 做 用户输入校验,  比如 通过 Html 标签 或者 控件 的 属性 来 声明 这个 控件(如文本框) 要 作 什么样的 输入校验(如 数字格式、日期格式) , 然后 在 点击按钮 或者 Form 提交 的 时候, 由 框架 统一校验 。

这种方式, 看起来 高端, 维护的时候 蛋疼 。

好的方式 应该是, 提供一些 Util 方法, 如 Util.CheckNumber(),   Util.CheckDate()  ,

然后 在 按钮点击 事件函数 里 直接写  if  代码判断,  如:

if (  !  Util.CheckNumber(  …… ))

{

Util.Alert("xx 应 输入 数字 。");

return;
}

这种做法,  看起来代码多了,  但 简单直接, 清楚明了,  尤其 有利于 维护 。

我在 《Web-Business-Application-Solution》 https://www.cnblogs.com/KSongKing/p/9455047.html    中 提出过:

少搞一点 封装, 少搞一点 控制反转(Ioc), 少搞一点 AOP, 少搞一些 “声明式”。

不要隐藏太多代码,让 代码 回归 代码。

是 找回 80 年代 写 Basic 的 那种感觉 的 时候了。 ^ ^

我对 前端 Js 开发方式 架构方向 的 一些看法的更多相关文章

  1. 前端Js框架汇总

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  2. 闲聊——浅谈前端js模块化演变

    function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...

  3. Web前端发展前景及就业方向

    Web前端发展前景及就业方向 HTML5技术已经日趋成熟 Html5是移动互联网前端的主流开发语言,目前还没有一个前端的开发语言能取代 html5的位置,所以说,无论你是做手机网站还是在手机app应用 ...

  4. 2015 前端[JS]工程师必知必会

    2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以 ...

  5. Parallax.js – 自适应智能设备方向的视差效果插件

    Parallax.js 是一个简单的,轻量级的的视差引擎,能够对智能设备的方向作出反应.在没有没有陀螺仪或运动检测硬件可用的时候,使用光标的位置来代替.有很多的行为,你就可以设置为任何给定的视差实例. ...

  6. 前端Js框架 UI框架汇总 特性 适用范围 选择

    身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...

  7. 【你的职业规划】web前端的职业发展方向及学习攻略【转载】

    web前端的职业发展方向有哪些?本文献给正在迷茫中,准备入坑web前端的初学者以及知海匠库web前端培训班的准前端工程师们:   一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在 ...

  8. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计

    目录:   1. 架构选型     2. 架构目录介绍     3. 架构说明     4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...

  9. 前端Js框架汇总【转】

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

随机推荐

  1. ios初识UITableView及简单用法二(模型数据)

    // // ViewController.m // ZQRTableViewTest // // Created by zzqqrr on 17/8/24. // Copyright (c) 2017 ...

  2. Python基础2--Python简单数据类型

    python简单数据类型 1 list list的创建,使用[] a_list = [‘a’, ’b’, ‘c’] print a_list print a_list[0] #a 如果去list的最后 ...

  3. 在使用MyCat和MySqL时的错误总结

    在mysql中,无法连接虚拟机中的mysql. 原因:防火墙没有关闭 解决方案:service iptables stop 在mycat中,无法打开数据库的表, 原因:mycat在配置文件中设置的是自 ...

  4. 2.26 js解决click失效问题

    2.26 js解决click失效问题 前言有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应.这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了.本篇用2种方法解决这种诡 ...

  5. Java 容器的使用及数组、List、Set 的相互转换

    0. Utils 字符串数组的排序: Set<String> set = new TreeSet<String>(); Collections.addAll(set, args ...

  6. 精确率、召回率、准确率与ROC曲线

    精确率表示的是预测为某类样本(例如正样本)中有多少是真正的该类样本,一般用来评价分类任务模型. 比如对于一个分类模型,预测结果为A类的所有样本中包含A0个真正的A样本,和A1个不是A样本的其他类样本, ...

  7. C++和C在linux下 和在windows下有什么区别?

    一.函数库的区别 linux下的C函数库和windows下的函数库系统调用的机制不一样,Glibc包含了主要的C库.这个库提供了基本例程,用于分配内存.搜索目录.打开关闭文件.读写文件.字串处理.模式 ...

  8. vsftp管理脚本(CentOS6用)

    #!/bin/bash # ### BEGIN INIT INFO # Provides: vsftpd # Required-Start: $local_fs $network $named $re ...

  9. Python之路,第十二篇:Python入门与基础12

    python3 函数3 装饰器 decorator   *** 概念:装饰器是一个函数,主要作用是用来包装另一个函数或类: 包装的目的:是在不改变原函数名的情况下,改变被包装函数(对象)的行为. 装饰 ...

  10. guling code细节

    detect_hand.py 分水岭算法: 任何一幅灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷.我们向每一个山谷中灌不同颜色的水,随着水的位的升高,不 ...