有 网友 提到 :

“复杂的页面,一个页面加载的模块多,各种异步请求,页面渲染,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. 第三节 java 数组(循环遍历、获取数组的最值(最大值和最小值)、选择排序、冒泡排序、练习控制台输出大写的A)

    获取数组的最值(最大值和最小值) 思路: 1.获取最值需要进行比较,每一次比较都会有一个较大的值,因为该 值不确定,需要一个变量进行临储. 2.让数组中的每一个元素都和这个变量中的值进行比较,如果大于 ...

  2. spingmvc 访问静态文件,比如css,img等

    这里我来引用一段别人的原话 url-pattern有5种配置模式: (1)/xxx:完全匹配/xxx的路径 (2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx. (3)/*:匹配/下的 ...

  3. [Paper] Selection and replacement algorithm for memory performance improvement in Spark

    Summary Spark does not have a good mechanism to select reasonable RDDs to cache their partitions in ...

  4. L248 词汇题 2006

    The audience, hostile at first, were greatly impressed by her excellent performance. He wanted to st ...

  5. Linux:Apache安装与启动

    Apache安装与启动 1.查看是否安装:rpm -qa| grep httpd2.挂载系统 mount /dev/cdrom /mnt/cdrom3.进入软件包 cd /mnt/cdrom/Pack ...

  6. kbmMWLog同时输出日志到多个日志管理器

    kbmMWLog日志框架,针对不同的业务情况,提供了多种日志管理器: TkbmMWStreamLogManager TkbmMWLocalFileLogManager TkbmMWSystemLogM ...

  7. Python中替换敏感字

    敏感词在文本文件document.txt中,当用户输入敏感词语时,用*号代替并打印出来 document.txt中的文件内容如下: 北京 上海 广州 深圳 领导 test.py content=inp ...

  8. 【Python】unittest-4

    #练习1: import random import unittest from TestCalc import TestCalcFunctions class TestSequenceFunctio ...

  9. 第76课 最小生成树(Prim)

    图解: 添加prim函数: #ifndef GRAPH_H #define GRAPH_H #include "Object.h" #include "SharedPoi ...

  10. Redis分布式锁实现

    redis分布式锁的一个简单直接的实现方法就是用 SET NX 命令设置一个设定了存活周期 TTL 的 Key 来获取锁,通过删除 Key 来释放锁,通过存活周期来避免死锁.不过这个方法存在单点故障风 ...