• prosemirror如何实现富文本编辑的


    最近搞各种编辑器,也涉及到了富文本编辑器,prosemirror是当前非常流行的富文本编辑器,因此希望通过剖析其实现原理,来窥探编辑器的架构设计。



  • umi核心代码解读


    最近遇到了一个不错的框架——umijs。现在前端开发的一大痛点就是,上手开发一个项目,上来就是一堆的配置,其中最重的可能就是webpack。umijs就是为了解决这个问题,希望能将开发者从无穷无尽的配置中解放出来,只关注业务代码。



  • chair原理剖析


    为什么要有Chair



  • 用户增长调研分析


    对于码农来说,没有什么比确定性更好的了。用户增长能从很大程度上将不确定的产品设计,变成确定性的数字增长。用户增长应该成为码农的必点技能。趁着最近搞业务,正好调研一下阿里内部主要的用户增长实践方法,主要聚焦于如如何做一个比较晚上的。



  • lottie json文件剖析


    lottie对一系列框架的总称,其中包括lottie-web(bodymovin)、lottie-android、lottie-ios以及lottie-rn。lottie的工作流如下图展示。



  • react-native trampoline实现


    ReactNative有Profiler的功能,能计算每个函数的执行耗时。为了尽量减少测量代码对函数本身执行的影响,ReactNative采用汇编实现Trampoline来实现该功能。本文主要记录该部分核心代码的解读,顺便记录阅读汇编代码的一些技巧。



  • debounce && throttle


    debouncethrottle 是两种常用的用来控制函数执行次数的技术。尤其是在前端响应 Dom 事件的时候,比如 scroll 或者 resize,这两种技术可以有效的保证用户体验。



  • redux middleware 机制


    好的框架必须有优秀的扩展能力,譬如express,再譬如webpack。redux提供给外界的扩展能力就是middleware。



  • ReactNative核心实现概述


    长期以来开发者只有两种模式来开发应用,一种是使用原生代码来写原生应用,另外一种是使用js代码来写web应用。这两种模式各有利弊,前者主要体现在体验好,速度快,而后者主要体现在开发迭代快。因此长期以来,无数开发者前赴后继的探索,希望能寻找一种模式可以集两家之长于一身。而ReactNative正是这种探索的一个里程碑。



  • LiteApp解读




  • 面试题整理


    语言

    • OC
      • Queue和Thread是什么关系?
      • weak和assign的区别是什么?
      • block是如何实现的?主要为了解决什么问题?
      • runloop的理解?
      • KVC和KVO分别是什么?
      • selector是什么东西?
      • autoreleasepool的作用,实现?
      • MetaClass是什么?
      • iOS内存管理
      • 什么是响应链?
      • iOS 11 safeare?
      • isEqual和hash
      • arc和mrc,arc的作用、原理


  • javascript async/await发展史


    js是单线程的语言,异步对于js的重要性相比于别的语言更大。async/await是ECMAScript 2017的标准,是最新的js异步调用解决方案。async/await标准的出台也不是一蹴而就的,本文尝试追本溯源,以便更好的了解async/await。



  • App动态化体系建设


    移动互联网时代的应用几乎面临着和桌面应用一样的问题,不跨平台、版本收敛慢、无法及时修复线上问题、需求迭代缓慢等。但移动应用还不能完全转成Web应用,当前的解决办法就是建设App动态化体系,本文就梳理了一下App动态化体系涉及的诸多系统。



  • VasSonic开源框架解读


    H5很重要,H5很重要,H5很重要,重要的事情要说三遍。VasSonic是腾讯开源的解决H5首屏渲染痛点的开源项目,本文通过解读代码来学习WebView的优化思路。



  • js模块化


    模块是每门语言构建复杂系统的必备特性,JavaScript自然也不例外。JavaScript当前流行的模块化标准有CommonJS、AMD、CMD、ES6等等,本文对这些标准做了简单梳理,努力做到应用时不懵逼,不乱用。



  • Mach O文件结构doing


    Mach-O文件格式简析

    macOS和iOS系统的可执行文件、库以及对象代码都是Mach-O格式的,Mach-O在macOS、iOS中的地位就相当于Linux系统中的ELF



  • iOS符号化进阶


    在日常开发中经常需要依赖线程的栈信息来解决疑难杂症,但我们自己记录的栈信息是没有符号化过的。本文主要讲了如何符号化这类栈信息,并简单探索了背后的原理。



  • 让MPTCP来拯救你的破手机


    TCP已经比18岁的我还要老了,快要跟不上这个时代网络设备的发展。现在手持设备都已经标配wifi和3g网络接口,数据中心也早就包含多条冗余线路,充分发挥其中潜在的能力是MPTCP的使命。MPTCP作为TCP近5年来最重要的演进,值得我们keep an eye on it。



  • 事件循环——不一样的死循环


    一谈起死循环,我们首先想到的就是程序假死、机子发热等,唯恐避之不及。但其实程序的世界是离不开死循环的,无论是运行在手机端的app,还是运行在服务器上的服务,都需要死循环来让程序一直执行不退出。那么,这类死循环和造成机器假死的死循环有什么不一样呢?



  • 聊一聊Hybrid的基石


    Hybrid开发模式在拥有便利性、动态性等Web开发优势的同时,还能极大程度地利用Native的能力。因此无论是BAT等大厂,还是开源社区都拥有成熟的Hybrid解决方案。而整个Hybrid方案最底层、最核心的技术就是JS和Native的互相通信,本文就主要来扒一扒这其中的原理。



  • 主线程安全保护神——Main Thread Checker


    写iOS App的时候,最容易犯的错误之一就是在非主线程更新UI。Xcode 9提供了一个利器——Main Thread Checker,可以帮我们检测在非主线程更新UI的场景。本文前半部分学招式,讲怎么用这个利器;后半部分练心法,学怎么做这个利器。



  • 内存问题大杀器——Address Sanitizer


    内存问题一直是困扰程序员的大问题,内存泄露、内存溢出、内存错误这些疑难杂症能逼疯一箩筐程序员。Address Sanitizer,简称ASan是Xcode自带的内存问题调试工具,原理简单,功效显著。本文主要介绍了ASan的主要功能、基本原理以及最佳实践。



  • Xcode 9新特性


    Xcode 9支持同时跑多个模拟器

    multi simulators



  • iOS灰度方法总结


    因为苹果爸爸管的严,iOS开发者不能像Android开发者一样想怎么灰度就怎么灰度。然而灰度又是如此重要,不仅可以提前发现问题,保证版本质量,还能提早验证新特性,把握用户喜好。因此特总结几种iOS的灰度方法。



  • Qcon2017参会总结


    今年有幸参加了在北京国家会议中心的举办的qcon技术盛宴,这也是我第一次相关的技术论坛,受益颇丰,特此记录。



  • iOS App签名机制详解


    出来混,迟早是要还的,最近搞自动化打包的时候,对签名机制以及工程结构的不了解导致解决问题时间较长,特写此文以备不时之需。



  • iOS Crash记事本


    每每搞上架,总是被上架之后的崩溃搞,特此记录。



  • 写给三年后的自己


    偶然间翻阅了几页《解密无印良品》,书中的理论触动了近段时间一直萦绕在脑中的关于职业的思考。



  • iOS汇编调试


    最近项目出现线上奔溃,解crash的过程中调试了汇编,特此记录。



  • weex高性能list解密


    weex是alibaba出品的用于移动端跨平台开发界面的框架,类似react-native。 而ListView在移动端界面的开发中是非常重要的组件,无论是H5还是react-native都因为ListView的低性能而饱受非议。那么到底是什么样的实现让weex能拥有与众不同的ListView性能呢?



  • CSS Flexible Box Layout Module标准


    该规范描述了优化之后的CSS box model用于用户界面设计。在flex布局模型中,flex容器的子集能在任何方向上布局,而且能够“flex”他们的大小,要么扩展直到塞满没有被使用的空间,要么收缩防止覆盖其父类。子类的水平和垂直排列都能够轻松的被实现。通过box的嵌套(水平嵌垂直,或者垂直嵌水平)能够用来在两个方向上布局。



  • babylon parser实践


    最近项目需要将一种语法转换到另外一种语法,代码不是我写的,但本着学习的心态阅读了部分代码,主要学习了两个库的使用,一个是htmlparser2,一个就是babylon



  • Yarn简介(译文)




  • EventEmitter使用说明


    最近升级了react-native框架,从0.19.0升到了0.32.0,改动还是挺大的,包括react和react-native的分离,以及巨量的特性更新和性能优化。本文主要为了说明0.32.0版本发送事件使用说明。



  • GCD源码分析


    最近在浏览React Native代码的时候发现有提到Main Queue和Main Thread的区别,很早就有阅读GCD源码的冲动,这回总算找到机会了。



  • react native在Growth Stack中的角色思考


    Growth Hacker在国内外的互联网界近几年都是比较火热的词,互联网巨头Facebook也许是践行Growth Hacker最好的公司。然而概念吵的火并不等于做的好,如何落地Growth Hacker其实是一件比较困难的事情。最近从twitter上挖到一篇文章,推荐了MobileGrowthStack,该文章维护着关于做Growth Stack的框架,为想要落地Growth Hacker的公司提供帮助。其最主要的输出应该就是下面这样图。



  • Mixins Considered Harmful


    该文是Mixins Considered Harmful的译文,原作者 Dan Abramov



  • weex VS react native


    weex的思想是多个平台,只写一套代码,而react-native的思想是多个平台可以写多套代码,但其使用的是同一套语言框架。 weex的目标在于抹平各个平台的差异性,从而简化应用开发。而react-native承认了各个平台之间的差异,退而求其次,在语言和框架层面对平台进行抽象,从方法论的角度去解决多平台开发的问题。



  • Redux生态(译文)


    本文主要介绍了开发一个Redux应用所需要的包。原文的地址在此:The Redux ecosystem,By Denis Raslov



  • React Native桥详解


    该文主要是对Tadeu Bridging In React Native的翻译。结合代码做了一定的分析。



  • React Native Hello World详解


    直入主题怎么搞React Native。



  • React Native学习


    React Native是下一代的React,是用React的思想来实现Native App的开发。使用React开发的时候,会强制我们将应用拆分成各种各样的组件,而做过Native开发的同学都知道,不论是iOS UIKit还是Android UI Components,天生就是组件,React和Native的结合是冥冥之中就是注定的。



  • React学习


    React首先是一个js库,然后才是一个构建UI的js库,又名React.js、ReactJS。React的出现主要是为了解决一个问题:创建数据持续变化的大型的应用。React不同于世面上的大部分MVC框架,大部分开发者只将其用作MVC中的V部分,而React最大的作用也就是在于创建 可以重用的,能实时反应数据变化的UI组件



  • wax block原理与应用


    使用wax的时候关于block的一点点思考。



  • CocoaPods详解


    阅读CocoaPods源码的一点点注释。



  • objc源码解析


    objc的源码解析。



  • iOS crash符号化


    Crash率是App稳定性的重要指标,一定要千方百计得降低crash率。crash的符号化应该成为每一个iOS开发者的必备技能,俗话说得好,不能符号化crash的开发不是好开发。



  • iOS开发适配总结


    iOS开发适配的简单思考。



  • openvpn翻墙实践


    openvpn配置实践总结。



  • VFL详解


    自己关于布局的一点点思考。



  • 实用命令


    常用的各种命令的集合



  • iOS编程规范实践


    iOS编程规范总结,好吧,我也不知道为啥会有这篇。



  • GCD技术详解


    GCD技术详解



  • Markdown CheatSheet


    Markdown语法备忘录



  • Welcome to Jekyll!


    You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.