App 內置本地服务器

2023-01-26 14:24:19 +08:00
 wingkwanli888

有个页面是用 webview 远程加载 h5 展示出来的,客户投诉太慢了,大概要 2s 完成全部加载,我上司說想把 h5 打包成离线包本地加载。

因为 h5 是 webpack 构建,不是单纯一个 html 页面,有好几个 js 文件,没办法直接用 wkwebview 本地加载, 这种情况大概要在 app 里边嵌入一个 web server ,搜了下 github 只有这两个,但好长时间有维护了

https://github.com/swisspol/GCDWebServer https://github.com/robbiehanson/CocoaHTTPServer

Caddy 好像可以用 gomobile 编译,有大哥试过把 caddy 打包在 app 里吗, 或者现在开源社区有没其他方案呢

5606 次点击
所在节点    iDev
23 条回复
justin2018
2023-01-26 15:00:50 +08:00
Building42/Telegraph: Secure Web Server for iOS, tvOS and macOS
https://github.com/Building42/Telegraph
lwkiii
2023-01-26 15:48:15 +08:00
lwkiii
2023-01-26 15:49:28 +08:00
原来是 iOS 开发,打扰了......
Kinnice
2023-01-26 15:51:40 +08:00
可以把 js 插到单一 html 里面
qwq11
2023-01-26 15:57:04 +08:00
oh, no 这就是为什么 app 越来越大的原因,微信支付宝 qq 之类的打开全是 lib*.so ,其他 app 不仅全是 libwebview.so ,还有 bundle*.js, chunk*.js ,xxx.html
xixiya
2023-01-26 16:13:15 +08:00
这玩意不需要维护,APP 嵌入 Http 服务器不是常规需求。
能用就可以了。
xiangyuecn
2023-01-26 16:15:16 +08:00
“没办法直接用 wkwebview 本地加载”???

一步错,步步错
xiangyuecn
2023-01-26 16:19:15 +08:00
如果有加载不了的文件,直接用原生代码暴力拦截,直接读本地文件返回响应,什么请求都可以给你搞的服服帖帖
wingkwanli888
2023-01-26 16:25:55 +08:00
@qwq11 没法,h5 页面 UI 太复杂,不可能用原生重写唉
wingkwanli888
2023-01-26 16:30:43 +08:00
@Kinnice 我问了前端的同事,他说测试了几天都构建不了单个 js ,至少两个,一个 app.js (业务代码),另外一个是依赖。我在想可能只能在我这边改
okakuyang
2023-01-26 16:32:20 +08:00
偷懒的话可以用一楼的 Telegraph 这个库,是在 iOS 上运行服务器的,我以前用来做局域网文件传输,还挺好用的。
caddy 就算了,没有意义的折腾。
但是因为本地的话,可能涉及到 https 的问题,需要注意一下,可能会遇到的坑。
wingkwanli888
2023-01-26 16:32:58 +08:00
@xiangyuecn 我知道以前用 UIWebView 是可以这样做的,以为 wkwebview 不行了,我研究看看
wingkwanli888
2023-01-26 16:33:50 +08:00
@okakuyang 感谢,我试试 telegraph
LifStge
2023-01-26 16:47:29 +08:00
其实没必要大动 本地起服务器的 还是容易出问题的 毕竟逻辑变了 涉及 https 跨域啥的 都要考虑.
毕竟是内置 webview 直接在 js 层面做请求拦截 或者更底层点 webview hook 然后加套缓存层就行了 可以把不经常变动的 影响速度的文件直接打包缓存就行 然后更新了 再动态更新缓存
这样保持正常开发流程不变 只是提速 优化
不过话说回来 如果不是在线的服务 就是单纯用 webview 做 ui 那就另说..
beilo
2023-01-26 16:49:59 +08:00
回复第 10 楼。
多个 js 也是从 html 上引入的。而你只需要引入单个 html ,根据相对路径就可以自动加载对应的 js 。
为什么会有多个 js 这个问题呢?
okakuyang
2023-01-26 16:54:06 +08:00
@beilo 它是用 webpack 打包的。
应该是 webpack 的代码用 http 请求把 js 下载下来运行的,所以遇到 webview 本地加载这种情况自然就挂壁了。
只要把 webpack 的那部分代码拆解成 html 标准的 js 引入方式就可以用本地顺利加载了。
z13zvxc
2023-01-26 17:04:11 +08:00
@wingkwanli888 你同事菜 怎么可能不能输出到一个 js 自己不愿意研究 we pack 配置而已。
hzxxx
2023-01-26 21:07:10 +08:00
拦截请求,把请求 web 内容的 http 拦下来解析路径返回自己的不就行了吗
whileFalse
2023-01-27 02:05:29 +08:00
擦,多大点事。
既然是“某个功能”,就进入 app 的时候自动预加载,等要显示的时候不久秒出了吗。
systemcall
2023-01-27 10:09:48 +08:00
可以在本地放上预置的开屏广告,网页用上 Service Worker
打开应用就把 WebView 打开,上面再叠上开屏广告
这样子就解决了加载的问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX