面试被问到你做过那么多的小程序你认为H5和小程序有什么区别呢,或者是你觉得有什么优势所以你要开发小程序呢?
我自信满满的说了一堆样式布局开发环境运行环境的区别,结果面试官说我想知道的不是这些表面的东西。你知道底层一些的吗?比如渲染过程?啊。不好意思真是不知道。
之后我就去查了整理了一下答案如下:
1. 运行环境
-
小程序:小程序是运行在特定的APP(如微信,支付宝)内的一个独立的运行环境。因此可以更深入地集成到这个APP的生态系统中。例如,微信小程序可以直接使用微信的支付、分享、登录等功能,这些都是浏览器无法提供的。这种深度集成使得小程序可以提供更完整和一致的用户体验。
-
H5:H5则是运行在各种浏览器中的。这些浏览器基本上都遵循相同的Web标准,因此H5应用可以在任何支持这些标准的浏览器中运行。依赖于浏览器提供的标准Web API,无法直接访问设备的某些功能或特定APP的功能。虽然现代的浏览器API已经非常丰富,但是在某些特定的场景下,H5应用可能无法提供和小程序或原生应用同等的用户体验。
2. 小程序热启动
-
小程序: 当用户离开小程序或者切换到其他应用,小程序就会被挂起或关闭。如果用户在短时间内回到小程序,通常可以直接恢复之前的状态,这被称为热启动。(除非手动删除这个小程序)
-
H5: H5应用的生命周期取决于浏览器的生命周期。当用户关闭浏览器或者浏览器标签页时,H5应用也就结束了。只有当用户重新打开浏览器并访问该H5应用时,应用才会重新启动。
3.离线访问
-
小程序:小程序在首次打开时会下载必要的代码和资源文件到本地,因此在后续的使用中,即使没有网络连接,也能够运行基本的功能。这提供了更好的离线体验,尤其在网络环境不佳的情况下。此外,由于核心代码和资源文件都保存在本地,这也可以减少加载时间,提高运行效率。
-
H5:相比之下,H5应用每次打开都需要从服务器获取页面和资源,如果没有网络连接,就无法正常访问。虽然有一些技术(如Service Worker)可以使H5应用具有离线访问的能力,但这需要额外的开发工作,而且在实际使用中可能会受到诸多限制。
4. 渲染机制
小程序采用的是一种分离的渲染机制。双线程架构,逻辑层和渲染层是分开的,它们运行在两个不同的线程中。
- 逻辑层运行在 JavaScriptCore 中,负责数据处理和事件处理等逻辑,包括处理API调用、请求数据、处理数据等;
- 而渲染层则运行在 WebView 中,负责页面的渲染。包括解析和展示HTML、CSS以及处理用户的交互事件(如点击、滑动等)
- 这两个线程通过一个数据桥进行通信,JS线程将需要渲染的数据发送到渲染线程,然后由渲染线程根据这些数据来渲染页面。
- 由于小程序的渲染过程并不依赖于JS,因此即使JS线程发生阻塞,页面的渲染也不会受到影响。这种机制有利于提高渲染效率,减少卡顿,提升用户体验
- 因为渲染层和逻辑层分离,所以js(逻辑层)不能直接访问dom(渲染层)
H5则使用的是传统的浏览器渲染机制。当页面的数据或状态发生变化时,JavaScript 会直接操作 DOM,修改页面的内容。浏览器会监听这些操作,当 DOM 发生变化时,会重新计算样式,生成新的布局,然后绘制到屏幕上。这种方式的优点是灵活,可以实现各种复杂的效果和交互,但是缺点是性能开销比较大,如果操作不当,可能会导致页面卡顿或闪烁。
5.兼容性
-
小程序:小程序的兼容性主要取决于小程序平台。由于每个小程序平台(例如微信、支付宝)都有自己的API和规范,所以一个小程序可能需要针对不同的平台进行适配或修改。此外,小程序也需要考虑不同的设备和操作系统,例如不同的手机型号、屏幕大小、系统版本等。
-
H5:H5的兼容性主要取决于浏览器。由于存在大量不同的浏览器和版本,H5开发者需要确保他们的应用能在各种浏览器中正常运行。这可能涉及到一些复杂的问题,如浏览器差异、特性检测、降级策略等。此外,H5应用也需要适应各种不同的设备和屏幕,这可能需要使用响应式设计或其他技术。