当前位置:首页 > 娱乐

web应用程序不包括

浏览器里跑的应用程东西,未必都是包括web应用程序。这个区分听起来像抠字眼,应用程但搞混了会出真问题。包括去年我帮一个朋友看他的应用程"web应用"项目,打开页面,包括一个静态HTML表格,应用程数据写死在代码里,包括改个数字要重新部署。应用程他管这叫web应用。包括我说这叫网页。应用程

web应用程序的包括核心特征是什么?它得能处理输入、维护状态、应用程根据用户操作产生不同输出。包括不是应用程所有跑在浏览器里的东西都满足这三条。

静态网站首当其冲。公司官网、个人博客、产品介绍页,这些东西用HTML+CSS写出来,部署到服务器上,谁访问都一样。没有数据库查询,没有用户会话,没有业务逻辑分支。你点链接,它跳转;你滚动页面,它展示内容。这跟翻一本电子画册没有本质区别。有人会说博客有评论功能。评论功能是第三方插件或者独立的后端服务,博客主体本身还是静态的。把插件拆掉,博客照样能看。

纯前端页面也不包括在内。用React或者Vue写了个待办事项列表,数据存在localStorage里,刷新页面还在。看起来挺像那么回事。但换个浏览器,数据没了;清个缓存,数据没了。没有服务端参与,没有持久化存储,没有多用户数据隔离。这东西是个交互式页面,不是应用程序。应用程序得有个"应用"的样子——数据在服务端,逻辑在服务端,浏览器只是个展示层和输入层。

那单页应用算不算?算。前提是它背后有API。如果SPA只是把一堆静态路由用JavaScript串起来,每个路由对应一段硬编码的文本,那它跟多页静态网站没有本质区别,只是换了个加载方式。真正的SPA要跟服务端通信,要处理token,要管理用户状态,要根据接口返回的数据渲染不同视图。这些条件缺一个,它就是个花哨的页面导航器。

还有一种容易混淆的:桌面应用程序套了个浏览器壳。Electron写的VS Code,跑在Chromium里,用HTML渲染界面。但它能读写本地文件系统,能调用操作系统API,能开子进程。这些能力web应用程序没有。web应用被沙箱关着,碰不到用户的硬盘,碰不到系统资源。能碰到的,就不是web应用。

浏览器扩展也不包括。广告拦截器、密码管理器、网页截图工具,它们跑在浏览器里,用HTML和JavaScript写,能修改页面内容。但它们有更高的权限,能访问浏览器内部API,能跨域请求,能读写本地存储。web应用程序被同源策略锁死,扩展不被锁。权限模型不一样,归类就不一样。

我见过最离谱的案例是一个内部工具,用Flask写了个后端,前端就一个HTML表单,提交后刷新页面显示结果。同事管它叫"我们的web应用"。从架构上讲,它确实有服务端逻辑,有数据处理。但它的交互模型是1995年的——每次操作都整页刷新,没有异步,没有局部更新。技术上算web应用,体验上算web应用的反面教材。这说明"是不是web应用"和"是不是好的web应用"是两个问题。前者是分类,后者是评价。

分类的意义在于,你知道自己在处理什么,就知道该用什么工具、该操什么心。静态网站扔到CDN上就行,不用管服务器。纯前端页面不用考虑数据库迁移。桌面套壳不用操心跨域。浏览器扩展不用处理用户认证。把这些东西都叫"web应用",然后按web应用的标准去要求它们,或者按它们的标准去要求web应用,都是自找麻烦。

分享到: