理念上的不同导致了java和php在web应用开发上显示了不同的结果,尽管java的数学计算和数据库访问都有优势,架构也相当完美,但是php却可以简单轻松地支持高强度web访问,能够快速开发应用,支持php的虚拟主机多如牛毛,使得用php开发一个网站比用java开发一个网站要快得多,容易的多。java所拥有的优点只适合传统的以软件项目为核心的开发模式,而php更适合于以客户为核心的saas的开发模式,因此,php目前在web网站开发的优势完全是因为web网站开发的特殊性而导致的,并非编程语言特性所决定。
java语言相比php有明显的优势,java使用的是面向对象的系统设计方法,而php还是采用面向过程的开发方法。php只能实现简单的分布式两层或三层的架构,而java可以实现多层架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如struts就是利用java的web开发技术实现了mvc的设计模式,而在业务逻辑层也有spring框架,数据库持久化
JavaScript开发的web最快。
但是这个问题又分为几个方面:
1、下载数据量方面:
网页种只有三个大分支:HTML、CSS、JavaScript。
其中 HTML 是必要的,不可或缺的。剩下两个实际上完全删除都是 OK 的。(很多交互逻辑是不需要 JavaScript 的)
但是不能一味追求速度,网站还是要基本好看的,所以 CSS 要加进来。虽说 HTML + CSS 能实现大多数的交互逻辑,但是 JavaScript 有时能简化这些逻辑,使得代码量减少,或者有些复杂交互逻辑只能使用 JavaScript 来实现,所以按需使用 JavaScript 也是有必要的。
要使网页的访问速度提高,一个首要条件是下载的数据量降低。一个总大小 1MB 的网页和一个总大小 1KB 的网页谁的加载速度快,这很容易理解。
所以尽可能精简 HTML 文件体积,尽可能精简 CSS,尽可能精简 JavaScript,可以非常有效、肉眼可见地提升网页的加载速度。
精简 HTML、CSS、JavaScript 可以在很多方面入手,最轻松的方式是尽可能的使用新特性,比如 HTML5、CSS3 和 JavaScript ES6。在不考虑古代浏览器兼容性(以 3~5 年内主流浏览器兼容为标准最佳)的情况下,建议尽可能【不要】使用 babel 之类的工具进行转码,可以不降低代码的执行效率,并且不增大文件体积。
还有就是尽量不使用第三方类库,原生 JavaScript 现在已经非常好用了,在没有必要的情况下,尽可能全部交互逻辑使用原生实现。或是使用一些可拆分的精简类库(对于特别复杂的情况)。或者对于开源类库,在遵守开源协议的前提下截取关键代码来使用。
然后使用各种压缩工具将 HTML、CSS、JavaScript 文件中不需要的空格、标记符全部删除,最后使用 Brotli 或是 GZip 对文件进行压缩。
数据量少了,访问速度就上来了。
2、资源方面:
对于网页种用到的第三方资源,比如图片之类,尽可能压缩(在不损失质量的情况下),并尝试使用 WebP 等新格式。视频也是类似。对于 CSS、JavaScript 等资源尽可能内联到文件中,避免单独下载,最好是启用 HTTP/2,对资源使用 Server Push。
3、服务端方面
对于静态类型页面(纯静态,或是使用 API 加载页面数据类型的网站),可以开启 HTTP/2,可以预先将文件使用 Brotli 和 Gzip 分别压缩好存储起来。
对于动态类型页面(模板页面,内容通过服务端代码运算后填充),建议不要等所有数据全部计算完再向前端返回数据,可以考虑边算边输出(减少 TTFB 时间)。如果服务端计算很慢的话,可以先返回 HTML 的 <head> 部分,让浏览器先去下载外部资源(CSS、JavaScript 之类),还可以做一些 Prefetch 之类,让浏览器不要闲着等数据。对于需要用到 DOM 元素的 JavaScript,可以灵活使用 defer 属性以减少代码量、下载数据量。
要使网页的访问速度最快,用什么语言开发最好?
前端:原生 JavaScript ES6,这是唯一选择。尽量不要使用大型的前端框架(动不动给你打包一个 1M 的 bundle 是很吓人的。而且页面变化不复杂的话,这些框架的虚拟 DOM 带来的性能提升还弥补不了大量代码带来的性能损失,得不偿失。所以请在绝对必要的情况下再去使用这些东西。)
后端:看你具体的业务场景了,各种语言应对各种不同的场景,没有一家独大一说(不然让其他语言怎么活)。Java、Go、Python、C#.Net、Node.JS、Ruby、PHP……或者使用 C/C++ 来写后端也是完全可以的,灵活实现不同场景[手动滑稽]。(你要愿意,直接写汇编都可以)
总的来说,常规优化做好了,根据实际业务场景来选择语言技术栈,才是提升访问速度的关键办法。
(或者能给广大用户提一下物理网络速度也好)