V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
murmur
V2EX  ›  前端开发

[这个是真的技术总结]在苹果 3 月的屠刀落下来之前,总结下我的 cordova+vue 之旅

  •  3
     
  •   murmur · 2020-01-10 18:20:59 +08:00 · 3575 次点击
    这是一个创建于 1781 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1、简单介绍下你们公司

    某国企下属公司

    上班不需要穿制服

    我们真的不加班,说 855 就是 5 点可以走人

    前端 vue+cordova,后端 java,微服务,所以国企的技术也不是 low b 好吧

    我们买了 vmsphere 的整套方案,所以对 docker 这类需求不强

    我们有每日、每周的备份,还有异地灾备,所以国企也不是一无是处好吧

    唯一问题就是互联网看不起我们的工资

    2、介绍下你们项目

    内部用办公软件

    基于 cordova+vue (界面库是 vux )开发

    兼容性 android>=4.4 ios>=9

    codepush 推送

    图表用的 echarts,之前是 canvasjs,后来我们做了适配,因为 canvasjs 在 ios 下出现了严重的内存溢出

    我司在 6 年以前就拿到企业证书了,所以不上 store

    3、为什么不选择 rn、flutter 或者源生

    android4 那个年代哪里有这些东西

    我们人少,养不起那么多源生开发人员

    公司也调研过送人去培训 ios 或者 android 开发,最后当然是各种不可行,我们也找外部厂商开发过其他系统 native app,效果也不好

    4、你对 cordova 的评价如何

    真的是 write once,run everywhere,除了垃圾苹果的刘海 bar 必须做兼容让出来,其余的几乎没怎么适配

    cordova 添加插件只需要 cordova plugin add xxx,然后就搞定了

    rn 添加插件,那到处都有的改

    5、上企业商店的应用需要信任证书,你们怎么解决这个问题的

    我们有图文教程

    如果不会,联系维护人员他们会上门服务或者电话指导

    还有安卓机是大多数,所以碰到阵的要上门的其实并不多

    6、你有遇到 native 的坑么

    有,升级 ios11.3 的时候,vue 因为浏览器 bug 出了巨大问题,唤醒后所有点击失效,实际上这个锅要给 hammer.js 或者 fastclick,但是对于 android 只需要加头就可以一劳永逸的消除点击延迟,但是 ios 很后的版本才解决了这个问题,我们当时没排查这么细,花了大量时间从 UIWebview 切换到 WKWebview,WKWebview 性能更好,但是当时的插件不完善,而且有跨域要求,连带着兼容性我们还被迫用了微软的官方 codepush 半年,真的是血与泪的故事,后来证明 codepush 的问题,是 osx 瞎 jb 加的屌丝_存储文件导致自建 codepush 服务器和官方校验和不一致的锅(官方的 checksum 不计算屌丝_存储,但是自建的会)

    另外一个大坑是 cordova 的 geolocation 直接用了浏览器 API,某一段版本的 chrome 对于非 https 协议(手机 app 都是文件或者 localhost,我哪里给你找 https )直接禁用 geolocation,导致安卓的定位大半失效,逼得我们去抄 react native 的 geolocation 代码

    还一个大坑的时候是苹果有时候杀进程,只杀了 wkwebview 没杀主程序,结果从后台唤醒就是白屏,虽然我看代码里有监控 wkwebview 的状态,但是更多的还是看不懂,都是 obj-c 代码

    7、你有遇到 wap 的坑么 没有,wap 页面在 cordova 里很和谐,你们说的什么软键盘、底栏布局问题,我们都没遇到,唯一遇到的问题就是 fixed 偶尔失效,导致下面的元素错误的往上移了 用的时候先查 caniuse,该有的 polyfill 加上,css 用 postcss 处理,不要用太新的特性,android4.4 的兼容性就够用了

    8、你有在乎 cordova 的性能么

    anrdoid4.4+新手机或者 wkwebview 基本解决了性能问题,没法解决的是内存占用,我们的 app 启动后开启图表内存占用直接猛冲 300m,所以进了后台基本上第一个被杀,当然这也是个 feature,我们的更新很多时候需要重新启动,这正好可以加快用户看到新版的速度

    9、你认为 cordova 还有什么优势

    太灵活了,尤其是热加载,我们除了 codepush 之外还魔改了 webpack 的加载器,使得模块可以根据需要读取服务器的、读取本地的、或者先读取服务器然后下载到本地执行,我们还开放了部分 eval 执行来做动态功能,没办法,小公司带宽太少,有一次我们更新了重要功能,好巧不巧集团发文通知大家我们更新了,结果早会之后并发剧增,更新服务器直接 GG,所以能热更的我们都不会推代码

    10、你们有魔改什么 vue 的东西么

    我们改了路由部分,做到了滑动切换(可以看到上一个页面)的效果,正常的 vue-router 只有一个页面 active,你是看不到之前的页面,这不符合我们的设计

    11、如果让你选择,你还会选 cordova 么

    当然,我们之前有大量的定制开发 wap 页面嵌入,如果框架的 webview 不符合要求直接 0 分出局 无论是 flutter 还是 rn,都有很大一块的 native 要求

    12、你现在有什么打算

    研究 rn,flutter 生态照 rn 比差太多,语法更是人间之屑,虽然企业证书不上 store,但是上不了 store 的 cordova 最终会死去,早晚还是要准备后路的

    13、你认为 vue 和 react 比呢

    vue 的语法太爽,我们是重渲染轻逻辑,如果用 if 和 for 都没有的 jsx 书写页面部分,稍微复杂一点的代码就没法看了 我们的 react 用在其他系统,没有太多的动态要求,这个纯粹是技术储备,上一代技术负责人选型选了个 backbone,放弃了 angular1,要不我们还能在撑撑,也不需要重构

    14、你们用了什么插件

    直接说中文

    wkwebview

    地理信息

    照相机、扫码

    微信支付(好像比支付宝好申请一点?)

    能让安卓直接退出的插件

    codepush

    修改状态栏颜色的插件

    屏蔽手机字体大小的插件

    能让 wkwebview 支持编程 focus 的插件

    15、你们有什么安全措施么

    https 我们用了

    一些防破解、暴力猜密码我们也用了

    该提取的特征我们也提取了

    其余的加壳,代码混淆并没有做太多

    我们是内部应用,是生产力工具,大家都是抬头不见低头见的同事,你入侵系统干坏事被发现有什么好处么,你的审批冒充领导通过,大家都不知道?

    14 条回复    2022-04-08 15:55:06 +08:00
    superrichman
        1
    superrichman  
       2020-01-10 19:27:50 +08:00 via iPhone
    12.rn 也是坑,能不碰别碰吧。
    murmur
        2
    murmur  
    OP
       2020-01-10 19:29:37 +08:00
    @superrichman 没办法,如果不选择 rn 那未来就 flutter 了,flutter 现在的生态照比 rn 差远,uniapp 也是刀在脑袋上悬着,我们有离线要求,不能用微信小程序
    Torpedo
        3
    Torpedo  
       2020-01-10 19:48:05 +08:00
    cordova 本身就是之前的 hybrid 方案。
    只是对于大公司来说,很难一个 app 都是 spa 套 na 的壳。
    这个时候,hybrid 的缺点就很明显了
    sailei
        4
    sailei  
       2020-01-10 21:17:38 +08:00 via Android
    简单应用没问题,复杂了就看出差距了
    anguiao
        5
    anguiao  
       2020-01-10 21:51:18 +08:00
    因为考研大概率失败,也不想再考了。所以入职了本地的一家小公司,给政府做项目的那种。过程异常顺利,顺利得让我感觉有坑。
    还在适应期,八点半上班、五点半下班,还是蛮轻松的。
    说实话,比我预想中要好,技术栈也不算老旧。大概是人少比较自由,想用什么做都可以。
    Sin
        6
    Sin  
       2020-01-10 23:47:26 +08:00
    "还魔改了 webpack 的加载器,使得模块可以根据需要读取服务器的、读取本地的、或者先读取服务器然后下载到本地执行"
    求分享
    CYKun
        7
    CYKun  
       2020-01-11 01:41:08 +08:00 via Android
    我说为什么每次我摸鱼的时候总能看见你也在摸鱼,原来是国企下属 855
    murmur
        8
    murmur  
    OP
       2020-01-11 08:39:00 +08:00
    @Sin 这个其实很简单的,webpack 加载脚本也是插入 script 标签,虽然 webpack 打包后不存在了,但是加载代码的部分是再 webpack 里,有一个文件有加载时用的各种模板,找到对应的地方拦截就可以,前提时程序初始化的代码拦截不到,运行时可以拦截,然后还得用 chunkName,要不打包后变成 0123 就不知道拦截哪个了,至于保存 cordova 有 file 插件可以直接写本地,路径按照要求映射为 http 地址就可以了( ios 的 cordova 是启动了一个本地服务器)
    IceBay
        9
    IceBay  
       2020-01-29 02:37:22 +08:00
    10、你们有魔改什么 vue 的东西么

    我们改了路由部分,做到了滑动切换(可以看到上一个页面)的效果,正常的 vue-router 只有一个页面 active,你是看不到之前的页面,这不符合我们的设计

    ----

    这个能分享一下吗?
    rebounce
        10
    rebounce  
       2020-06-03 16:50:16 +08:00
    截止今日,苹果的刀不是针对 cordova,而是针对可以热更新,H5 放在服务器等非编译为本地代码的 App 。
    所以 Cordova 依旧会并长期存活。
    constance
        11
    constance  
       2022-03-09 14:12:11 +08:00
    大佬现在换成用 RN 开发了吗?
    murmur
        12
    murmur  
    OP
       2022-03-09 14:19:43 +08:00
    @constance 没有,考虑 uniapp ,我们主要技术栈是 vue
    cocoZombie
        13
    cocoZombie  
       2022-04-08 15:09:10 +08:00
    想问一下楼主,2020 年到现在 2022 年用了两年 cordova 的感觉,以及,为什么考虑 uniapp 了?
    murmur
        14
    murmur  
    OP
       2022-04-08 15:55:06 +08:00   ❤️ 1
    @cocoZombie cordova 的底层基本是没人维护,除了主壳子,第三方插件都属于弃坑状态
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2345 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.