我对 前端 Js 开发方式 架构方向 的 一些看法
有 网友 提到 :
“复杂的页面,一个页面加载的模块多,各种异步请求,页面渲染,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 开发方式 架构方向 的 一些看法的更多相关文章
- 前端Js框架汇总
概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...
- 闲聊——浅谈前端js模块化演变
function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...
- Web前端发展前景及就业方向
Web前端发展前景及就业方向 HTML5技术已经日趋成熟 Html5是移动互联网前端的主流开发语言,目前还没有一个前端的开发语言能取代 html5的位置,所以说,无论你是做手机网站还是在手机app应用 ...
- 2015 前端[JS]工程师必知必会
2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以 ...
- Parallax.js – 自适应智能设备方向的视差效果插件
Parallax.js 是一个简单的,轻量级的的视差引擎,能够对智能设备的方向作出反应.在没有没有陀螺仪或运动检测硬件可用的时候,使用光标的位置来代替.有很多的行为,你就可以设置为任何给定的视差实例. ...
- 前端Js框架 UI框架汇总 特性 适用范围 选择
身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...
- 【你的职业规划】web前端的职业发展方向及学习攻略【转载】
web前端的职业发展方向有哪些?本文献给正在迷茫中,准备入坑web前端的初学者以及知海匠库web前端培训班的准前端工程师们: 一.职业方向定位 首先,只有确定好自己的职业方向,才能做好职业规划.在 ...
- 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
目录: 1. 架构选型 2. 架构目录介绍 3. 架构说明 4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...
- 前端Js框架汇总【转】
概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...
随机推荐
- centos7安装配置zabbix4.0
zabbix01 198.8.8.211 zabbix-server4.0 zabbix02 198.8.8.212 zabbix-agent4.0 一:zabbix服务端环境 ...
- 框架:MVC
MVC 一.介绍 MVC是模型-视图-控制器的缩写,一种软件思想,强制性的把应用程序的输入.处理和输出分开.可以和任何的重定向能解耦. 三部分的任务说明: 视图:获取数据,显示数据 模型:处理数据 控 ...
- 使用zabbix-java-gateway可以通过该网关来监听多个JVM
我们知道监控主机和网络性能指标情况可以使用zabbix很好解决,分析起来也很方便,Zabbix主要功能: - 自动发现服务器与网络设备 - 分布式监视以及WEB集中管理功能 - 可以无agent监视 ...
- bootstrap --- 在 modal中的 datetimepicker 关闭 ,会造成 modal也会被关闭.
这个大概是事件冒泡造成的. 解决办法: <form id="userForm" class="form-horizontal"> <input ...
- 多路复用 阻塞/非阻塞IO模型 网络IO两个阶段
1.网络IO的两个阶段 waitdata copydata send 先经历:copydata阶段 recv 先经历:waitdata阶段 再经历 copydata阶段 2.阻塞的IO模型 之前写的都 ...
- Python Counter
from collections import Counter print(Counter("宝宝今年特别喜欢王宝强")) # 计数 lst = ["jay", ...
- web前端优化
在谈到Web优化之前,我们回到一个更原始的问题,Web前端的本质是什么.我的理解是: 将信息快速并友好的展示给用户并能够与用户进行交互.快速的意思就是在尽可能短的时间内完成页面的加载,试想一下当你在淘 ...
- 20165228 2017-2018-2 《Java程序设计》第2周学习总结
20165228 2017-2018-2 <Java程序设计>第2周学习总结 教材学习内容总结 标识符:名字 组成:字母/下划线/美元符号或数字 注意:标识符的第一个字符不能是数字字符,且 ...
- Python使用PIL模块生成随机验证码
PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...
- 获取列表中的最大的N项和最小的N项
获取列表中的最大的N项和最小的N项 #!/sur/bin/env python # -*- coding:utf-8 -*- # author:zengsf #time:2018/10/31 impo ...