V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
harry890829
V2EX  ›  问与答

领导终于开始考虑使用 html5 来代替 mfc 写桌面版客户端了……

  •  
  •   harry890829 · 2016-09-06 09:06:57 +08:00 · 19907 次点击
    这是一个创建于 3035 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司客户端使用 mfc 编写,主要使用环境在 xp 上,所以现在还是虚拟机 xp+vc6.0 开发

    现在终于说通领导开始考虑 html5 来代替 mfc 写客户端了,领导让我写一封邮件来说明 html5 和 mfc 各自的优势神马的

    我觉得 mfc 一点优势都没有啊,根本被 html5 碾压啊

    好吧,抱怨完了,我就想问下,怎么写邮件能够让领导赶紧拍板改成 html5 ,顺便问下 html5 的优势有些什么,我对 html5 不太熟……

    129 条回复    2016-09-07 20:58:40 +08:00
    1  2  
    doubleflower
        101
    doubleflower  
       2016-09-06 15:50:55 +08:00
    一帮没用过 MFC 的吐槽 MFC ,连 Delphi 都被碾压了还 MFC 呢, MFC 除了做出来的东西除了小点没有任何优点
    murmur
        102
    murmur  
       2016-09-06 16:00:45 +08:00
    @xjp 越牛逼的混合应用 pc 也好 移动端也好 都是有超强的 native 壳子撑着的
    印象中有人跟我说过当年腾讯用 webkit 核心干掉了大家还在用的 ie8 浏览器都屌的不行不行的了
    bydmm
        103
    bydmm  
       2016-09-06 16:37:04 +08:00   ❤️ 1
    http://nwjs.io/
    我倒是知道一个方案,要看你们具体的需求了
    alqaz
        104
    alqaz  
       2016-09-06 16:42:57 +08:00   ❤️ 1
    Qt 可以拯救你,直接 h5,跨度太大,要么要新找人,要么调试肯定会掉各种坑, Qt 比 MFC 方便,而且比轮子都是现成的。
    Chrisplus
        105
    Chrisplus  
       2016-09-06 16:55:04 +08:00
    孰优孰劣要看具体业务需求

    你这个需求(类似于 xx 管理系统)看起来 MFC 还更合适一点
    binux
        106
    binux  
       2016-09-06 17:11:18 +08:00   ❤️ 2
    这里一大堆人根本没搞懂桌面客户端用 HTML5 是什么意思。还兼容性,没法调用底层呢。。。
    在桌面客户端用 HTML5 又不是说让你用本地浏览器打开应用,而是应用嵌入一个浏览器,使用 HTML5 绘制界面。
    alqaz
        107
    alqaz  
       2016-09-06 17:18:29 +08:00
    @binux 用 h5 和 c++做界面展示层,这中间跨度难道你不觉得很大吗?
    binux
        108
    binux  
       2016-09-06 17:23:03 +08:00
    @alqaz 什么大不大,又不是前无古人后无来者。
    sgissb1
        109
    sgissb1  
       2016-09-06 17:23:39 +08:00
    小伙,一看就是哥们刚出道没多久,或者两者都不是很熟悉的( mfc 或 h5 )。
    我对 mfc 和 h5 也不是很熟悉,但对 mfc 熟很多,因为我是 c++(偶尔写 c )。

    至于 mfc 和 h5 都是各有千秋的,没有哪个好与坏。 mfc 最大的败笔就是 M$当年为了愚化程序员计划的不周全(当年 M$有一大波愚化程序员计划,和现如今绝大部分框架可以吃遍全端:手机、平板、 PC ,有一定的异曲同工之妙。)

    由于当年 M$为了简化开发,所以倒腾出一大堆东西,最为熟悉和当年最容易上手的还是 MFC 。但由于后期的臃肿,以及在 windows 下写界面代价太高,所以一部分写界面的人转了 directUI(一种概念),另一部分使用 windows api 的人转为各种库( boost 、 stl ,以及直接调用 win32 api 等)。

    现如今, mfc 开发一个 demo 或者开发一个要求不高的应用还是很好用的,尤其是需要用到和底层或偏底层打交道的。
    而对于崛起的 h5 来说,他只是一个标记性语言而已,和 mfc 都不是一个东西好不好?

    h5 的同类型的东西是: c,c++,java,python 等(属于语言)。
    h5 的开发周期也很短,只要浏览器支持,性能扛得住,很快就能做出一个用 c,c++甚至 java 需要开发很久的一个通用功能,并且在界面展现方面, h5 会比其他几种语言好得多。

    正所谓小伙,当你拿 h5 和 mfc 来比较的时候,就注定你两个都不熟(或者不懂,一个是库,一个是语言)。
    另外这两玩意分工也不同,如何比。或者哥几个用 mfc 的工程写个和底层打叫道,你用 h5 写个试试看?
    sgissb1
        110
    sgissb1  
       2016-09-06 17:27:11 +08:00
    @murmur 貌似扣扣音乐还在用 ie 的框架控件。
    zhqy
        111
    zhqy  
       2016-09-06 17:35:35 +08:00
    经过一番调研,你会选用 nw.js ,然而 nw 的坑太多了。于是转战 electron , electron 真是好, api 完备模型清晰,再经历了 3 个月没日没夜的开发之后项目终于可以打包发布了,然后你发现,卧槽 electron 不支持 xp 。

    呵呵呵呵呵。
    wshcdr
        112
    wshcdr  
       2016-09-06 17:54:05 +08:00
    MFC 和 H5 完全是两个方向,好吧。再说了 VS2015 还是继续支持 MFC 的。
    Radeon
        113
    Radeon  
       2016-09-06 17:57:30 +08:00
    XP 的话,用.NET Framework 4.0 + Xamarin 就可以了
    zjqzxc
        114
    zjqzxc  
       2016-09-06 20:02:59 +08:00
    @Radeon 全新安装的 win 7 装.NET Framework 4.0 都费劲,离线安装每次耗时都在 1 小时以上,不敢想再低版本的系统还能不能装的上。
    xiaoc19
        115
    xiaoc19  
       2016-09-06 21:59:09 +08:00
    @zjqzxc 官网除了有在线安装包,还有离线安装包
    cosven
        116
    cosven  
       2016-09-06 22:15:14 +08:00
    一不小心就会做得卡的不要不要的
    garrydzeng
        117
    garrydzeng  
       2016-09-07 01:55:36 +08:00
    @harry890829 去试试 electron 这个壳, visual studio code 就是基于它的,似乎做点优化性能也不是问题。 http://electron.atom.io
    srlp
        118
    srlp  
       2016-09-07 03:42:40 +08:00 via iPhone
    来一发 qt + qml
    finian
        119
    finian  
       2016-09-07 08:52:52 +08:00
    12 年的时候我们用 CEF ( Chromium Embedded Framework )开发了一款桌面应用,界面用 Web 那一套技术,开发效率确实杠杠的,但是坑太多,一方面是当时 CEF 对 HTML5 的支持程度有限, V8 引擎的性能还远没有现在这么高;另一方面,基于 CEF 来封装一套桌面开发框架,在当时的技术成熟度偏低背景下,成本实在是太高了。后来项目由于种种原因胎死腹中。现在可选的框架,比较成熟的估计也就 Electron 和 NW 了吧?但 Electron 是不支持 XP 的, NW 倒是支持 XP ( NW LTS 版本),但是据说坑比 Electron 多很多。国内的有道开源了个 hex ,但是最后 commit 停留在了 14 年。

    挖了个当时我们用 CEF 做的项目的一个视频:
    ?beta&from=s1.8-1-1.2&spm=0.0.0.0.yp3ozc
    finian
        120
    finian  
       2016-09-07 08:55:44 +08:00
    harry890829
        121
    harry890829  
    OP
       2016-09-07 09:09:27 +08:00
    @murmur 问题是根本没有底层的需求啊……
    @eddiechen 抱歉,因为之前一直听说 html5 的各种优势,好多桌面应用也是这么写的,一直非常憧憬
    @Zzzzzzzzz 我本来也是这种想法,现在这个 mfc 项目,无非就是 socket 收发点报文,生成写报表,还有本地 sqlite ,感觉要是改成页面形式, sqlite 也没有什么存在的意义了
    @xjp 好的,我晚点会让网站组那边给我个测试 demo 进行测试
    @youxiachai 抱歉我之前描述可能有问题,本意就是用网站来解决复杂的界面绘制
    @mlhorizon 难道是在给自己挖坑么
    @gaodeng 太感谢了,我确实需要这种例子,不过公司前辈也和我提过,安装包肯定是几十 m 以上的,没有办法,目前我这边 mfc 项目,释放开始 29mb ,安装包 9mb
    murmur
        122
    murmur  
       2016-09-07 09:18:13 +08:00
    @zjqzxc .net 如果你是 N 卡的话装驱动不就给你装一份
    harry890829
        123
    harry890829  
    OP
       2016-09-07 09:20:02 +08:00
    @doubleflower mfc 呢,可能我用得少吧, mfc 的有点算是手册全,问题解决迅速,从底层到界面显示自己全都完成,不需要另外支持,但是界面部分真的太恶心了……
    @bydmm 多谢提供,我拿小本本都记下来
    @alqaz 怎么说呢,公司自己有网站组,这样相当于把界面全都交出去了,不需要我自己学
    @Chrisplus 业务需求相关,这个两边分析能更详细一点么?
    @binux 嗯嗯,其实我就是这个意思……不过因为没有结合使用过,所以不知道具体实现如何?
    @sgissb1 哎,你说的这些吧……也许是我表达有问题,我不是把 mfc 和 h5 比较,而是希望把界面的绘制全部交给 h5 (这里说的也不准确,交给网页),我说的比较,是 mfc 在绘制界面和 h5 (同上)比较,并且整体项目并不会收到影响
    @zhqy 感觉这是一个梗……
    @wshcdr 支持是支持,我现在不是分析 mfc 和 h5 ,而是在我现有需求中,把 mfc 编写界面替换成 h5 (网页)是否可行,而不是比较这两个东西的好坏
    @Radeon
    @zjqzxc
    @xiaoc19
    谢谢几位,我去看看这个方案怎么操作
    @cosven 卡的不要不要的,是因为壳?还是网页本身的原因呢……
    @garrydzeng 嗯嗯,麻烦了
    @srlp qml 以前确实没有听说过,晚点我去看看
    @finian 多谢,公司禁止了视频,晚点我回家看看吧
    zjqzxc
        124
    zjqzxc  
       2016-09-07 09:30:17 +08:00
    @xiaoc19 我就是用的离线安装包

    @murmur 是 N 卡,装的时候手动把.net 给取消掉,会导致那个 GeForce Experience 安装失败,但驱动本身没事儿。不取消的时候会在这一步卡特别长时间,后来就吸取教训了,只要不是必须要用,或者睡觉前,绝对不装.net 4 。后来就放弃 Win7 了。
    wy315700
        125
    wy315700  
       2016-09-07 09:31:58 +08:00
    原生应用还是用 WTL 吧
    zhouzm
        126
    zhouzm  
       2016-09-07 09:53:20 +08:00   ❤️ 2
    技术上肯定是完全可行的,性能上也不用太担心,如果你需要实现的界面效果,使用桌面浏览器会卡的话,那用 mfc 去实现同样效果并且很流畅的代价肯定不低。

    你现在需要做的是,仔细研究一下 nw.js lts ,看看它提供的 api 是否能满足你要实现的桌面客户端的底层功能需求,如果能满足,那么接下来就可以尝试直接用 nw.js 了,这条路要省事儿得多。

    如果 nw.js 的 api 无法满足你的需求,那么目前唯一能做的选择就是自己使用 cef 内核实现一个类似于 nw.js 的开发框架,具体怎么实现可以参考一下 cef 提供的 cefclient 例子,并不是很难,关键点就是解决好原生代码如何与 v8 引擎交互。

    如果你的客户端只是需要把界面做得华丽好看,交互性不强,那么实现起来会比较容易,花的时间也少,只要模仿 nw.js 实现几个必要的 api 接口,界面 html 部分交给你公司的网站组,客户端的其他功能代码全部用 mfc 实现。

    如果客户端的交互性要求很高,交互方式更偏向于传统桌面程序,那么你要做的工作就多了,并且难度也不小,你需要自己用 mfc 实现一个类似于 nw.js/Electron 的开发框架,在 SDK 的选择上,你只能选择 cef 3.2623.1401 build 版本(因为之后的版本都不再支持 xp)
    harry890829
        127
    harry890829  
    OP
       2016-09-07 10:02:43 +08:00
    @zhouzm 太感谢了,我晚点和网站组商量一下,看看是否能够出个 demo 进行测试
    adslxyz
        128
    adslxyz  
       2016-09-07 10:41:46 +08:00
    主要使用环境在 xp 上,就不要想那么多了,老老实实用 mfc 写,别自己找麻烦。
    cosven
        129
    cosven  
       2016-09-07 20:58:40 +08:00
    如果对 HTML5 不是很熟的话,网页写出来可能存在性能问题。

    举个例子:比如写了个 DOM 元素的动画,在浏览器中可能不会卡,但是如果把这个网页放在你的壳里面去,那这个动画就可能会有点卡,甚至很卡。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:49 · PVG 02:49 · LAX 10:49 · JFK 13:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.