首先要确定,一般的Web应用或者网站,完全用JavaScript开发也是可行的。但是主流Web开发很少采用全JS的方案。
原因大体有以下几点:
01
注重考虑那些无法运行JS的用户代理
毕竟还是有很多的用户还在用比较老的手机浏览器,再或者说被禁用脚本。当然,这部分人也不是不可以舍弃,毕竟时代在进步,迭代更新是不可避免的。
02
注重HTML/CSS本身的优点
诚然JS本身也可以通过精心设计的框架和库来实现分离等所有HTML/CSS模型的优点。但是存在许多不确定因素:
1) 有足够好的框架和库吗?要考虑是否能满足你的业务需求,还可能要考虑性能、可扩展性、之前提到的accessibility、学习曲线、工具链,乃至此框架和库的长久的生存。关键是,理论上说JavaScript具有更高的弹性,但是更大的自由度未必能得到更好的
2) 框架和库给出的抽象模型和HTML/CSS模型的阻抗是否匹配?假如该框架或库本质上仍然使用HTML/CSS模型,只是改变了语法,那么其提供的好处在哪里?仅仅是语法统一?如果该框架或库有自己独立的抽象层,比如widget/component等,那么它是建筑在HTML/CSS之上的额外抽象层(即最终映射到HTML/CSS),还是仅仅以HTML/CSS为纯粹实现工具?对于前者,实际上最终会回归HTML/CSS模型。而后者,可以参考的经验教训就是http://ASP.NET Web Form和JSF。
3) 框架和库所设定的约束能否在开发中一以贯之的执行?无论是理论或者现实,HTML/CSS模型都算不上完美。但是至少是清晰和较容易被一致的执行的。但是单一语言即使提供分层机制,也容易被绕过——尤其是框架和库本身不够好的情况下,可能由于不能满足需求、有bug等情况而倾向于hack之,更不要说deadline紧迫时
03
注重性能
Web应用、页面是在浏览器中执行,而浏览器完全是按照HTML/CSS所设计。抛开Canvas不论,纯JS的实现最终还是要生成DOM。从性能的角度看,纯JS生成DOM自然赶不上直接的markup。同样的道理,就算用CSS预处理器也都会在部署时预先编译——尽管在运行时可以做出更牛逼的特性,再如HTML/CSS是按照渐进显示优化的,而纯JS的架构没有精心设计是很难做到的。
04
注重Web开发的独特特点
1) HTML/CSS 都是声明式的,也就是其本身并不希望是程序员来编程。
2) HTML/CSS是基于标准的。
3) Web开发和一般应用开发有个重大区别是,Web应用、网页的最终表现和行为,或者说Web的用户体验,并不是完全由开发者决定的,而是开发者和用户共同决定的。用户选择不同的设备、不同的浏览器、不同的浏览器设置、不同的浏览器扩展等,都能影响结果。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.