[转载] 深入理解Objective-C:方法缓存

原文地址

摘要

只要用到Objective-C,我们每天都会跟方法调用打交道。我们都知道Objective-C的方法决议是动态的,但是在底层一个方法究竟是怎么找到的,方法缓存又是怎么运作的却鲜为人知。本文主要从源码角度探究了Objective-C在runtime层的方法决议(Method resolving)过程和方法缓存(Method cache)的实现。

简介

本文系学习Objective-C的runtime源码时整理所成,主要剖析了Objective-C在runtime层的方法决议过程和方法缓存,内容包括:

  • 从消息决议说起

  • 缓存为谁而生

  • 追本溯源,何为方法缓存

  • 缓存和散列

  • 十万个为什么

  • 缓存 - 性能优化的万金油?

  • 优化,永无止境

阅读全文 »

[转载] 美团点评移动网络优化实践

原文地址

为何要做网络优化

网络优化对于App产品的用户体验至关重要,与公司的运营和营收息息相关。这里列举两个公开的数据:

  1. 页面加载超过3秒,57%的用户会离开。

  2. Amazon页面加载延长1秒,一年就会减少16亿美金营收。

在做网络优化前,我们首先要为网络通信质量设立一个标尺。

在美团点评,监控团队开发了基于端到端的客户端监控平台。这里要先解释一下”端到端”的含义:是指请求从客户端发出到服务端响应返回的整个过程。它区别于后台服务监控,是一种从用户角度观察到的真实体验监控。

阅读全文 »

[转载] AST 获取和分析:Clang And Tree-sitter

原文地址

前言

本文不仅介绍了如何使用各类 AST 分析工具,还简单分析了各类工具的工作原理,大家可以按需阅读。其中基于 Clang 的 AST 分析工具的工作原理结合源码一起食用效果更佳。文章主要围绕下面几个方向展开:

  • 初探 AST

  • 基于 Clang 获取分析 AST

  • 基于 Tree-sitter 获取分析 AST

  • 总结

阅读全文 »

[转载] 编译到底是什么?

原文地址

因为工作原因,最近要做包管理工具方面的开发,需要对 Compiler 有一些最基本的理解,写这篇文章的目的有两个:

  • 为了记录和整理自己的近期的学习内容,方便日后查阅
  • 抛开大段代码和抽象概念,通过通俗易懂的写作方式来加深自己对这些概念的理解

废话不多说,我们一起看看内容吧!

阅读全文 »

[转载] 从预编译的角度理解Swift与Objective-C及混编机制

原文地址

本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。

写在前面

本文涉及面广,篇幅较长,阅读完需要耗费一定的时间与精力。如果你带有较为明确的阅读目的,可以参考以下建议进行阅读:

  • 如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节开始进行阅读,这会让你对预编译有一个更直观的了解。

  • 如果你对 Search Path 的工作机制感兴趣,可以直接从【关于第一个问题】的章节阅读,这会让你更深刻,更全面的了解到它们的运作机制,

  • 如果您对 Xcode Phases 里的 Header 的设置感到迷惑,可以直接从【揭开 Public、Private、Project 的真实面目】的章节开始阅读,这会让你理解为什么说 Private 并不是真正的私有头文件

  • 如果你想了解如何通过 hmap 技术提升编译速度,可以从【基于 hmap 优化 Search Path 的策略】的章节开始阅读,这会给你提供一种新的编译加速思路。

  • 如果你想了解如何通过 VFS 技术进行 Swift 产物的构建,可以从 【关于第二个问题】章节开始阅读,这会让你理解如何用另外一种提升构建 Swift 产物的效率。

  • 如果你想了解 Swift 和 Objective-C 是如何找寻方法声明的,可以从 【Swift 来了】的章节阅读,这会让你从原理上理解混编的核心思路和解决方案。

阅读全文 »

[转载] 一款可让大型iOS工程编译速度提升50%的工具

原文地址

本文介绍了美团平台自研的一款 cocoapods 插件,该插件可以大幅提升 iOS 工程代码的编译速度。文章前半部分主要介绍相关的原理,后面主要阐述在工程层面的实践,希望能给从事相关开发的同学带来一些帮助或者启发。

cocoapods-hmap-prebuilt 是什么?

cocoapods-hmap-prebuilt 是美团平台迭代组自研的一款 cocoapods 插件,以
Header Map 技术 为基础,进一步提升代码的编译速度,完善头文件的搜索机制。

阅读全文 »

[转载] 快手主播稳定性 - Mach Port 超限问题治理

原文地址

本文介绍了快手客户端团队处理的 Mach Port 超限导致异常退出的问题。介绍了从发现到解决的全过程,并且给出了监控和防劣化方案。这个问题对快手稳定性尤其是电商主播稳定性影响很大且难以察觉,同时可能在业界广泛出现。

阅读全文 »

5分钟看懂的WebAssembly入门指南

原文地址

本文是一篇WebAssembly的入门文章,从理论介绍到实战方面有全面的讲述。

历史进程

由于 javascript 的动态类型特性,AOT 并不能为它做出优化,只能选择 JIT 来优化。

而为了让 JIT 效率提高,Mozilla 推出了 asm.js。它和 Typescript 比较相似的是它也是一个强类型语言,不过它的语法是 js 的子集,它专为 JIT 效率提高而打造。

在 Mozilla 推出 asm.js 之后,一些公司都觉得这个思路不错,于是联合起来推出了 WebAssembly。

WebAssembly 是什么

WebAssembly 是一套指令集(字节码)标准,不过它并不是可以被 CPU 直接执行的原生指令集,所以它目前还需要配套一个虚拟机(low-level)来执行。

阅读全文 »