Web技术简史
从最早的大型机到个人电脑,再到互联网、移动互联网,Web技术发展极大促进了编程语言发展,短短几十年,编程模式变化巨大,从浏览器网页需求,到Corba/Java/DCOM解决不同语言互联,到PHP/JSP/ASP,到.NET/Java中间件技术,再到手机、平板网络访问,云服务、微服务、前后端分离,技术层出不穷,用户体验越来越好。
Web编程语言简史
-
最早浏览器访问服务器静态html页面,没有任何动态页面机制。
-
逐渐人们发现动态生成网页的需求,如订单需求不可避免,CGI应运而生,Perl语言是第一个写CGI的正式语言。Servlet是利用Java语言生成动态HTML,PHP/JSP/ASP都可看到一种CGI.
-
CGI一般是每次请求调用对应进程,结束后退出进程。多次访问效率很低,Fast-CGI产生,避免每次请求都新建进程(也包括从外存加载)的开销,让CGI进程常驻,大幅提升效率。
-
为了缓解CGI产生过多的客户端和服务器消息传递,客户端脚本应运而生。如VBScript和JavaScript.
前后端分离
随着移动互联网快速发展,大数据、高并发和安全愈发重要,前后端分离成大势所趋。
不分离和分离优缺点
-
前后端不分离可能带来安全风险
- 跨站脚本攻击(XSS):在前后端不分离的情况下,前端代码负责处理所有的用户输入和输出,如果未正确地过滤或转义这些输入,攻击者可以利用漏洞注入恶意代码,导致XSS攻击。
- 跨站请求伪造(CSRF):在前后端不分离的情况下,攻击者可能会利用一些信任漏洞,例如通过在用户浏览器中存储一些令牌,来伪造用户的请求。
- 数据泄露和敏感信息泄露:如果前后端不分离,前端代码可能会直接与后端数据库进行交互,从而可能导致数据泄露或敏感信息泄露。
-
分离带来的优势
- 前后端分离有助于提高开发效率,改善用户体验,简化代码结构,提高代码可维护性和应用性能,同时为后期功能升级和扩展提供便利。
前后端编程语言
-
前端
- HTML、CSS、JavaScript、TypeScript等。
-
后端
- Go、Java、Python、Node.js、PHP、Ruby、C#等。
游戏
游戏作为一种特殊的程序,讨论游戏需要谨慎,不同类别的游戏占用的服务器或客户端资源大有不同,基本上所有编程语言都可以做游戏,只是根据效能、FPS、绚丽程度,可使用的编程语言有极大不同。
游戏标准
- OpenGL (ES) 和DirectX
游戏引擎
-
BigWorld
- C++做引擎。
-
Unity 3D
- 覆盖主流PC/移动和消费平台,代表作品王者荣耀、完美世界、诛仙等。
- 运行环境是.NET.
- 核心物理引擎PhysX, 采用C/C++,游戏引擎是C#,给开发者C#/C++编程接口,除此之外,Unity也提供Lua、Javascript和Python脚本接口,早期还支持Boo语言(一种非常类似Python的脚本语言,运行于.NET框架).
- Unity客户端开发官方建议C#,服务器端为了提升效率也可选用C++. 客户端代码可使用Mono JIT或利用IL2CPP转换成C++.
- Unity C#代码可编译成本机DLL,以加速执行效率。
- 为支持Lua, Unity环境一般集成Lua虚拟机, 此虚拟机用C语言编写。
- UnityScript是指U3D使用的JS, 它是JS的增强,静态类型检查并有OOP, 运行能力超过JS.
-
Cocos2d-x
- 核心引擎采用C++,提供C++、Lua、Javascript三种开发者编程接口,支援涵盖主流PC/移动端/浏览器,基于OpenGL ES和Metal(Apple 2014年推出)。
高性能
3A大作往往意味着客户端较高渲染能力和服务器端多帧实时处理计算和网络能力。
-
客户端
- 需要高fps, 客户端渲染每秒需要处理完30~60fps不等,就是16~33ms一帧。搭配带虚拟机或者脚本语言会更慢,最优的做法是用接近硬件的语言。
-
服务端
- 服务器端处理所有客户端请求,假设人数为N,需要将数据包状态发送到每个客户端,耗时复杂度为O(N2).
- 例如在线100人,每个客户端每秒至少同步10个数据包,理论计算,每秒服务器需要处理100 * 99 * 10 = 99000个数据包。
- 网络游戏为了解决客户端外挂欺诈问题,例如碰撞检测等功能会在客户端和服务器端全部做一遍。
- 如果不采用高性能编程语言,服务器无法承载如此大的数据处理。
若文章对您有帮助,欢迎关注。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。