基于NSURLCache的缓存实现

概览 缓存设计应该是每个客户端程序开发所必须考虑的问题,如果同一个功能需要多次访问,而每次访问都重新请求的话势必降低用户体验。但是如何处理客户端缓存貌似并没有统一的解决方案,多数开发者选择自行创建数据库直接将服务器端请求的JSON(或Model)缓存起来,下次请求则查询数据库检查缓存是否存在。事实上iOS系统自身也提供了一套缓存机制,本文将结合URL Loading System简单介绍一下如何利用系统自身缓存设计来实现一套缓存机制来平滑的扩展图虫客户端的缓存处理。 UR

从生成对抗网络到更自动化的人工智能

恭喜今日头条AI Lab论文《从生成对抗网络到更自动化的人工智能》在《中国计算机学会通讯》2017年第9期专栏上发表! 特此转载,与热爱技术的你一起分享~ “What I cannot create, I do not understand.” 这是著名物理学家费曼的一句名言。把这句话放在人工智能领域,可以理解为:要想让机器真正理解某样东西,就得让它学会如何创造那样东西。近年来,深度学习研究可谓如火如荼,特别是在计算机视觉领域,深度学习算法在人脸识别和物体分类等应用上已经

iPhone X 刘海儿打理指南

前言 北京时间今天凌晨1点,苹果再一次让全世界沸腾。iPhone X 带给我们的最大改变:全屏 Super Retina显示屏。它提供了更多的内容显示空间,同时也营造了更加深入的沉浸感。作为 iOS 开发者,在为强大的 Face ID 和全面屏欣喜的同时,我更担忧“齐刘海”的适配! 下面结合官方的人机交互指南,来了解下如何设计 App 才能在iPhone X 和其他所有 iOS 设备上都看起来很棒。 人机交互指南 [图片上传中...(image-637794-152

域名劫持资源重加载方案

痛点: 在部分用户的网络环境中,页面CDN域名被劫持,导致前端资源无法正常加载,而页面主域名正常,导致页面可以访问,但是功能不正常。 背景: 通常来说,主域名一般都是众所周知的域名,运营商一般不会劫持(本文特指劫持后导致无法加载,注入这些不在本文考虑范围内),主域名被劫持的可能性小。因为被劫持后,用户无法访问自然能够很明显感知到这是网络问题(鉴于挂掉情况可能性较小)。而CDN域名一般鲜为人知,运营商由于商业目的可能会劫持部分域名,于是就会导致页面html结构出来了,样式

H5播放器源码解读 (video.js)

写在前面 现在视频业务越来越流行了,播放器也比较多,作为前端工程师如何打造一个属于自己的播放器呢?最快最有效的方式是基于开源播放器深度定制,至于选择哪个开源播放器仁者见仁智者见智,可以参考开源播放器列表选择适合自己业务的播放器。 我们的播放器选择了排名第一的video.js播放器,截至目前该播放器在Github拥有13,991 star, 4,059 fork,流行程度可见一斑。为了让大家更多的了解它,我们细数下优点: 免费开源 这个意味着什么就不多说了,附上项目地

iPhone安装包的优化

这是一次安装包大小优化的实践。 随着业务的增加,工程中引入越来越多的业务代码和第三方库, 整个安装包越来越大。以今日头条5.7.5为例 最近几个版本的ipa大小如下: 5.7 -> 72.2M (+0.8M) 正常业务增量 5.6 -> 71.4M (+14M) 主要原因:接入某SDK后安装包的增加(约13M) 京东SDK(约1M) 5.5 -> 57.4M (+1.7M) 正常业务增量 5.4 -> 55.1M (+28M) 主要原因:加入Swift 系统会加入语

线上问题深度追查:信号处理函数中的死锁

一、背景 svc是deamon-tools工具集中用户守护进程的服务,头条目前在线上使用它来保证服务的存活(目前正在切换到更可靠的systemd)。当进程挂掉时,svc能自动重启挂掉的进程,当被监控的进程有代码更新时,我们可以通过svc发送命令让进程进行重启,以加载新上线的代码。  最近,我们发现部分模块有重启失败的情况,这种情况发生的几率极其小,几乎没法复现。然而今天,出现了另外一个奇怪的情况,就是没有进行过任何改动的模块,出现了无法启动的问题。追查到最后,终于发现模块

【前端技术】头条PC站基于RIOT的组件化开发实践

一、背景 1、头条PC站业务前端重构 * 旧站架构强依赖后端模板,维护和扩展非常不灵活 * 资源文件存在依赖,无法做到最简压缩合并 * 代码组织混乱,虽有基本的模块化开发方式,但整体维护和扩展非常麻烦 2、为什么选择Riot? * Angularjs学习成本相对比较高、大而全(比较重),后期升级维护不便 * Reactjs有一定学习成本,而且其JSX语法对于习惯模板、样式和行为分离开发方式的coder不太能接受 * VUE简单易用,满足大部分需求,但不兼容IE8

【性能优化】今日头条iOS客户端启动速度优化

应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、视频等),也接入了很多第三方的插件,这势必会拖慢应用的启动时间,本着精益求精的态度和对用户体验的追求,我们希望在业务扩张的同时最大程度的优化启动时间。 一、技术调研 先说结论,t(App总启动时间) = t1(main()之前的加载时间) + t2(main()之后的加载时间)。 t1 = 系统dylib(动态链接库)和自身App可执行文件的加载;  t2 =

【性能优化】webpack前端构建性能优化策略小结

背景 回顾2016的前端技术的发展真的可以用百(gui)花(quan)争(zhen)鸣(luan)来形容,无论是技术栈的演进,技术框架的推新,还是各种模式,反模式的最佳实践都在不断地涌现,网上的一篇文章《在2016年学JavaScript是一种什么样的体验?》更是把这一现状做了很好总结。当然,吐槽归吐槽,技术的车轮还是要始终向前迈进,从中我们也不难发现,从前那种直接在js中写脚本。通过src嵌入到页面,然后按F5刷新页面查看结果的开发方式已经渐行渐远,基本上选择一款合适的编