webview是什么东西_当我们在说客户端的时候,我们在说什么

f78de701bf1f909846c93f9611fcb9da.png

传统意义上的客户端(Client)是从PC开发时代产生的概念,一般是指一个运行在pc上的程序,通过网络通讯和服务器进行交互;比如我们可以称魔兽世界的游戏程序为客户端

随着移动互联网的崛起,客户端逐渐变成了代指app的名词,比如手机QQ Android / iOS版,可以被称为客户端

好了,现在我们来说说,从技术上看,客户端(app)到底是什么

关于原理

进程上看,多数app都只有一个进程——界面绘制,数据处理,都在这一个进程里

最常见的工作模型是: 一个消息泵(或称一个消息分发循环),在有消息来的时候,进行分发,各个模块在回调里进行处理

所以接触过iOS / Android编程模型的同学会很容易地发现,你的大部分业务代码是填充在系统给的回调里的,执行完毕之后控制权会回到消息泵手里,iOS 叫 runloop,Android 叫 looper

好的,到这里我们先大致了解一下app的工作模型,暂时不涉及平台细节;

这里特别想说的是,知识的理解有两个层面

  1. 一个层面是逻辑性的
  2. 另一个层面是知识性的

app的工作原理属于第一个层面的东西,这是我们今天想着重讲的,至于哪个api是干什么事情的,属于第二个层面,这个领域的知识不用急,用到的时候自然有文档,会随着一个人的经验不断的积累,慢慢来就好

刚刚只讲了原理,那么我们来谈谈app领域的具体的技术

关于技术

  • Native开发:一般是指用原生语言直接进行开发(界面绘制,数据处理等),iOS一般多用objective c,swift; Android 一般多用java,kotlin
  • Hybrid开发:一般是指用使用 html + js + css进行界面绘制,数据流动一部分在js内部,一部分在native层面
    • 为什么能这么做?简单地说,iOS / Android系统都提供了webview这个控件,而且都能够在要打开什么链接,要执行什么js函数的时候,给native层一个回调,这就为数据交换提供了基础
  • 跨平台开发:主要想要解决两个平台(iOS / Android)使用统一的方式处理交互逻辑 + 数据逻辑,比如Flutter就是这样的方案,flutter提供了一种中间语言Dart——开发者可以使用dart在iOS Android两个平台进行开发(而不是oc / swift, java / kotlin)
    • 当然想象一下,要做到这一点,dart运行时的底层一定做了和平台的接驳——类似jvm能同时在linux 和 windows上提供java运行能力
Native开发一般适用于对体验要求较高的场景,因为它能够给程序员对程序性能最大限度的控制权
Hybrid开发 / 跨平台开发,其实有些交集,优势一方面在于一定的灵活性一方面在效率,比如,两端都用同一个hybrid / flutter页面,那改一下就能有两端的收益;一个公司可以找少量的native工程师快速搭建好基础,然后找相对多的h5 / flutter 工程师快速实现产品功能

信息流类的app(具有大量不同布局的页面承载海量内容,比如新闻类,电商类)一般一定会通过hybrid或者其他跨平台技术来提高开发效率

关于实战

好,这是一些现状,现在来谈谈情怀,我个人比较喜欢native开发,首先我是一个iOS研发,从现在的平台能力上看,swift已经提供了足够的能力,承载很多设计方式,能够拿出一些优雅的方案(相比oc);当然我们这里不讨论是否能跨平台,从能达到的高度来说,追求极致体验,应该双平台都用native开发,但这最终也要看产品形态和团队的人才构成

我们从computer science的角度来看看,一个native端的研发平常都在干什么

  • 画界面,写交互逻辑
  • 摆弄持久化方案,比如db,kv
  • 发各种网络请求,通过操作系统api,或者某些中间件,比如AFNetworking,OkHttp
  • 各种性能优化,这里加入多线程能优化什么,这里如果换一个数据结构能做什么优化,怎么少用一点内存

嗯,看起来一堆杂事,不过细想一下

界面卡了怎么办?来我们优化一下,可能就需要深入到一些很底层的知识上了,这个元素是gpu画的还是cpu画的,如果是cpu画的,和gpu画的性能差多少倍?要回答这个问题,可能得知道显存是怎么映射到内存的,NUMA,UMA架构的相关知识
这里的多线程方案经常有OOM,那为什么OOM?一条线程的开销是什么?线程的堆栈在内存里是什么样的?线程的逻辑结构在内核里是什么样的?纤程的方案考虑过没有?
这里的DB操作居然用了1.5s?好,db的页缓存参数设置对了吗?表里建索引了吗?db放在sd卡还是操作系统内置的存储里?NAND上哪种文件系统最高效?对了,确定需要db,不是kv?
内存泄漏了?好,引用计数的背景下泄漏的原理是什么?标记清除的gc泄漏的原因又是什么?有没有办法自动检测内存泄漏?

坊间有句话,下能修马桶,上能造火箭;上一个台阶看,一个到位的客户端研发,应该能挫其锐,解其纷,和其光,同其尘;

如果你真的是一个能人,客户端绝对是一个足够大的竞技场,没有技术上的天花板,也很难有职业生涯上的天花板——从海外一线(FANG)到国内传统公司,都招大量客户端的岗位

坦诚一点,我是带着目的来的!希望给刚刚入行的同学一些overview,让更多人才能选择客户端这个方向

从行业角色看,客户端做的是一个看得见摸得着,直接面向用户的软件,想要效率可以选择效率,想要体验可以选择体验;想要创业,可以选择从一个app开始创业;

最后,不要因为一个app运行在一个看起来很小的设备上就觉得它简单;

  • 简单的app大概在10W行代码左右;
  • 稍微复杂一点的,大概在20~30W行;
  • 一些巨型app,比如dau超过10亿的,一个端600~700人都很正常,代码量可能在1000w~2000w;

现在的移动设备,其实能力都很强,很难从性能体验上感受到一个app的重量(参考早年64M ram的pc跑一个photoshop要读磁盘读一两分钟),用户看到的只是一个app,轮流几个界面换一换,其实这背后有设计上的,优化上的大量心血和投入

相关职位

社招职位

抖音音乐方向,iOS工程师

https://taou.cn/jqJLe

2021校招提前批职位

所有校招职位都可以填写的我内推码:3UMFC7W

客户端工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835561368263854349
  • 杭州:https://job.bytedance.com/campus/position/detail/6835619740040923400

前端工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835561368264558861
  • 杭州:https://job.bytedance.com/campus/position/detail/6838545175892642061

2021校招提前批其他方向

后端工程师

上海:https://job.bytedance.com/campus/position/detail/6835619069605972237

杭州:https://job.bytedance.com/campus/position/detail/6835620228647356686

测试工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835561368264837389
  • 杭州:https://job.bytedance.com/campus/position/detail/6838822987027138829

测试开发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835563010158561549
  • 杭州:https://job.bytedance.com/campus/position/detail/6838824755848743176

平台研发工程师(质量保障方向)

  • 上海:https://job.bytedance.com/campus/position/detail/6838581509668489479
  • 杭州:https://job.bytedance.com/campus/position/detail/6838824755849791752

C++客户端开发工程师(音视频方向)

  • 上海:https://job.bytedance.com/campus/position/detail/6838882575639365896

多媒体视频算法研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835527088473934094

多媒体客户端研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6835955977540421896

高性能计算研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6836187135612356871

技术美术(特效技术方向)

  • 上海:https://job.bytedance.com/campus/position/detail/6835523356345125128

C++桌面端研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6838838157140560136

渲染引擎研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6838862540450040072

AR特效开发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6838862676060277000

多媒体图形/图像研发工程师

  • 上海:https://job.bytedance.com/campus/position/detail/6838862762559424775

另,北京/杭州/深圳/成都区域可通过https://job.bytedance.com/campus/position?keywords=%e6%8a%96%e9%9f%b3&type=2投递。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值