当前位置: 首页 > news >正文

前端发展随想录

以前我们都说

PHP是世界上最好的语言
复制代码

但是现在,我们可以说

JS是世界上最好的语言
复制代码

第一阶段:

在最初的切图仔工程师,前端能做的很有限,基本就是根据UI的设计稿还原成静态页面,数据绑定也不关前端的事,由后端模板渲染输出到客户端,这个阶段也叫轻前端。

第二阶段:

随着软硬件的发展,页面层的交互和复杂度逐渐提升,单单靠后端渲染很难满足实际需求了,后来就把数据绑定和页面交互这一块移到客户端来做。

这中间扮演重要角色的就是ajax,ajax这玩意最初是微软推出的,但其它浏览器厂商不想遵循微软的这套规则,联合推出了自己的一套(w3c标准),这也是现在很多浏览器存在兼容性的原因所在。

ajax的出现让前端对界面层有了掌控的能力,也开始有着前后端分离的概念,简单说就是后端提供api,前端同学根据api玩转页面层,其实也只能说是接口处分离,你说前后端分离呢,那前端同学是不是就不需要了解http协议?不需要了解数据库逻辑关系?答案是否定的,还是需要了解的,甚至要做过后端才能更好的了解前端,设计出符合前后端的api出来。

但PC时代由于存在IE这个巨无霸,JS的很多api存在兼容性,而且由于模板绑定现在由前端做,复杂性可见一斑,这让前端界很蛋疼,于是乱世出英雄,jquery出现了,jquery的dom操作和模板的便捷性让其在前端界的地位无可替代,这个阶段也叫重前端。

第三阶段

懒,是程序员的第一生产力,由于每次绑定数据或页面交互都要去操作dom节点,能不能屏蔽底层dom节点?于是有了前端三架马车vue,react,angular,最早提出双向数据绑定应该是backone.js,MVVM开发模式让我们屏蔽dom操作,只需要关注数据层,单页应用的出现意味着前端的入口由html转向js,我们叫'all in js',但现在html、css、img等等转移到了js上,js急需一套构建工具,于是webpack出现了,由于node的横空出世,前端可以说建立了与系统层的连接,有了自己的包管理工具npm,前端由此建立了一套自己的工程化体系。

第四阶段

  • 第一个方向:html5与原生这十几年来可以说是相爱相杀,html5不如原生体验好,这是一直以来的痛点,但html5也有原生不可比拟的跨端能力,java一直梦寐以求的'编写一次,跨端运行'的目标没想到被html5实现了,随着weex,react-native的跨端实现方案的逐渐成熟,可以达到与原生媲美的能力,有统一大前端的能力。

  • 第二个方向:是微信小程序,由于微信的巨大流量入口,小程序的发展必将迅猛,

  • 第三个方向:PWA是google力推的一个方向,可以安装成app和离线储存,在国外的推特等网站已经有了实践,但由于国内IE的存在短时间内火不起来。

  • 第四个方向:webAssembly,我在一个大会上听到的,webAssembly可以运行c++等底层语言,上个月有出了个用c++写的游戏框架,通过webAssembly编译运行在浏览器,其它语言也可以用来写浏览器端了,不过webAssembly也有些问题存在,例如强类型语言怎么转弱类型语言等等;

  • 其它方向:随着越来越多终端设备的出现,终端必将诞生越来越多前端的沃土,拭目以待!

相关文章:

  • 2018年5月初丽江大理一周自由行
  • BGP边界网关协议
  • Windows环境下RabbitMQ 使用127.0.0.1和localhost访问正常换IP地址无法连接解决方案
  • Java并发(二)多线程的好处
  • SpringCloud Eureka自我保护机制
  • 高阶函数特点
  • How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?...
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Commvault助力企业抵御勒索软件的蔓延
  • Mastering the game of Go with deep neural networks and tree search
  • 每周分享之JS数组的使用
  • python 内置模块
  • CSS 样式小结
  • TypeError: Cannot read property 'url' of undefined
  • centos 7 安装官方LAMP(Apache+PHP5+MySQL)
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Java|序列化异常StreamCorruptedException的解决方法
  • Javascript编码规范
  • JSONP原理
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS字符串转数字方法总结
  • miaov-React 最佳入门
  • 编写高质量JavaScript代码之并发
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 一些关于Rust在2019年的思考
  • k8s使用glusterfs实现动态持久化存储
  • 带你开发类似Pokemon Go的AR游戏
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)Android开发优化---------UI优化
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (搬运以学习)flask 上下文的实现
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (七)理解angular中的module和injector,即依赖注入
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)VirtualBox安装增强功能
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net多线程总结
  • .Net各种迷惑命名解释
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .Net小白的大学四年,内含面经
  • .NET学习教程二——.net基础定义+VS常用设置
  • ::
  • ?
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [20171102]视图v$session中process字段含义
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [ARM]ldr 和 adr 伪指令的区别
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)