Web及移动开发技术
很多地方都已经介绍了JavaScript在浏览器是如何被执行的,这里介绍一下WebKit是如何实现的。主要涉及JS的async,defer及普通脚本的解析与执行过程的代码实现。
先看下面这段WebKit中的代码: { NestingLevelIncrementer nestingLevelIncrementer(m_scriptNestingLevel); //Do something else.
周末参加了入职引导人的培训,现在结合我的经验总结一下个人感受最深的五方面内容。 0. 明确入职引导人的目的和目标 作为入职引导人,虽然不是一个岗位,也一定要清楚自己的角色和责任(Role & Responsibility)。
前面说了一些解析、生成ByteCode直至JIT的基本概念,下面是对照JavaScriptCore源代码来大致了解它的实现。 从JS Script到Byte Code 首先说明Lexer, Parser和ByteCode的生成都是由ProgramExecutable初始化过程完成的。
非常棒、非常系统的一份资料,值得阅读! 原文来自百度泛用户体验。 作者:nwind 本文将探讨浏览器渲染的loading过程,主要有2个目的: 了解浏览器在loading过程中的实现细节,具体都做了什么 研究如何根据浏览器的实现原理进...
这一篇主要说明解释器的基本工作过程和JSC的核心组件的实现。 作为一个语言,就像人在的平时交流时一样,当接收到信息后,包含两个过程:先理解再行动。
先看一下官方的基本介绍,短短几句就塞满了关键字。 SquirrelFish,正式名称是JavaScriptCore,包括register-based(基于寄存器的虚拟机), direct-threaded, high-level bytecode engine(字节码引擎).它使用基于内置copy propagation(复制性传播算法)的一次性编译器(one-pass compiler),能够延迟从语法树(Syntax Tree)上生成字节码(Bytecodes)。
本文非常详细的说明了JavaScript的核心概念,也是理解JavaScript解释器的重要基础。中文版本可以看这里,但不一定是最新的内容。所以下面放了英文版本供学习使用。
WebKit并不是完全开源的, Apple封装了一部代码在一个静态库(libWebKitSystemInterfaceXXXX.a)中,并没有提供源代码。
这里主要分析WebContentProcess中加载页面的过程,主要针对HTTP请求的处理。 主要结构 WebKit2从接受到loadURL开始,就会准备尝试加载网络数据。
This section presents the mark-and-sweep garbage collection algorithm. The mark-and-sweep algorithm was the first garbage...
When an old idea is a good idea that improves to become a better idea, we should all want to benefit from that evolution.
最近,我发现了一个方法来减少在C/C++项目的编译时间,就是所谓的Unity Builds(UB)。这项技术非常简单, 通过减少磁盘访问的数量而减少了编译时间。
基于开源项目进行开发已经越来越普遍,WebKit和Android都有很多的深度定制的版本。 对这样庞大工程修改的逻辑越来越多,日后想要同步升级就要面对更大的复杂性和风险。
为什么我们在考虑代码管理的时候会担心影响程序员的积极性?精英化的团队是不是能完全解决代码质量的问题? 战功文化会引入什么样的代码管理问题? 以下是我对这些问题的思考。
这项研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:“提高软件测试者的教育。” 材料中表达的任何观点、发现和结论或者评论都属于作者,不代表国家科学基金会(NSF)的观点。
在模拟器打开Accessibility可以观看到每个控件,即使是在网页上的. 所以是有可能做到更精准的自动化测试的。下面转了份博客,如果有兴趣可以找时间一起研究如何应用。
单元测试很棒。在假定一些数据的环境下,能顺利通过测试的系统就可算是一个好系统。 不过,现在可以直连外部资源的集成测试才让程序更有价值。谁知道那些内容商(供应商,vendor)会做出什么傻事来! 很多人一直尝试着让测试达到100%的代码覆盖率,这是很棒的想法,但我倒觉得它有些基本概念上的问题。
对一些开发者而言,WebKit就是一个黑盒子。丢进去HTML、CSS、JS等一连串的东西,而WebKit就能变魔术一般显示出一个很棒的网页出来。
在中说到WebKit2中的多进程模型。多进程模型已经是浏览器的基本架构要素,下面展开分析一下WebKit2中的多进程模型。 协作决定接口,确立责任分工后,对于模块或系统间最重要的事莫过于接口定义,而且是有着简洁明确的定义。
自我驱动或者自组织团队是现在软件公司努力建设的方向,自我驱动也常常挂在嘴边。但以我的观察,自我驱动或自组织团队建设并没有带有真正的团队生产力提升,反而很易遇到发展瓶颈! 自组织团队的困境 问题在哪里? 我今天终于恍然大悟。
这里是对上一篇的进一步展开。先从API层开始。 API概览 主要类图 WebKit提供了灵活的回调机制用来支持客户端与内核的交互,在API中有一些Set Client类的函数,Client一般就是用于注册针对某一功能的回调函数。
人绝不是一种资源。一方面我们不可能因人设岗,另一方面也不能忽略人性的差异。面对问题时,不要总是单纯地从人的态度或品德上查找问题,而是要反思人事安排和流程建设上的不足。
汇编语言指令以及伪指令速查手册(备查) 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节.
Objective-C的方法替换 (Method Replacement for Fun and Profit) 本文将要讨论Objective-C中的方法替换(method replacement)和swizzling(移魂大法)。
上次提到用了LLDB脚本来扩展一些功能。 这次是简化打印复杂数据的操作。 不知道大家都没有遇到过在gdb和lldb里输出一个类时困扰,常常要一个个属性展开下去,或者调用提供函数来检查。
原文在这里 By Serhiy Haziyev, Director of Software Architecture at SoftServe, Inc.
模块化 软件的首要技术使命是管理复杂度(Complexity)。这是中的一个标题。软件本质性困难的根源都在于复杂性。Dijkstra指出没有谁的大脑能容得下一计算机程序。
如果风险止于发现者则不能称为有风险管理,必须是在规范的流程之下,有计划的采取行动,这才算是风险管理的起步阶段。 1. 培养风险意识(Risk Awareness) 需要在开发的各个阶段,训练团队成员能主动发现出风险,然后报告出来并同相关人员进行沟通。
软件项目管理中的风险管理像是把瑞士军刀,高效全能。它是项目全面管理的一部分,风险管理应该与关键的项目实施过程紧密相连,贯穿项目始终。 风险管理 风险管理工具只是辅助,关键是在项目中要有风险意识。
上次说了查看当前视图和参数的方法,要记住一串`*(int*)($esp+4)` 实在不爽。 于是查到可以使用LLDB脚本来完成。写了一个脚本(下载),本来想做个递归查询的,因为不是源代码调试,就没办法直接做到,需要花更多的时间,现在没空了。
在分析Safari行为的时候想到要用objective-c的特性随时可以语义化的查看一下UIView的各种状态,比如在UIView方法内部设了个断点,想看一下当前视图结构。
Safari中的视频相关操作封装在QuickTime Plugin里面,存放于/Library/Internet Plugin目录下。 下图是相关类的class diagram: 其中的QuickTime Plugin是通过已淘汰的Apple之前定义的Webkit Plugin协议来实现的,而不是现在支持的Netscape API的机制。
模块化是一个"发现" 模块化(Modularity)这个概念与其说是一种创新,不如说是一个"发现"。这正是人们在解决问题时常用的行为方式和思维过程。
Promoted Tweets是Twitter的一个广告平台。本文作者是发现在Twitter官方的应用中并没有显示一些广告,而决定分析Twitter是不是做了什么手脚。
在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使用。 强大的IDA大家可能已经知道,但它的Mac OS版本又让人回到了DOS时代。
相对于软件公司中的开发团队,维护团队似乎常常默默无闻,做事相对于保守,远没有开发团队那样常常让人有新鲜感。这是一种很普遍的现象,也就是维护团队的价值常常被有意或无意地降低了。
收藏一篇文章! Salesforce是个非常值得关注的产品。 腾讯科技讯(Kathy)北京时间12月12日消息,据国外媒体报道,作为商用软件行业的一个边缘参与者,创办于1999年的Salesforce.com曾遭受过一些贬低。
本文在于说明iOS应用的Objective-C代码的线程安全性。先是简单介绍一下线程安全的基本知识,然后通过一个小例子来观察非线程安全代码,最后会稍稍介绍一个可以用来分析线程安全隐患的工具。
项目最本质的一个特性是不确定性,所以实际的执行与预估有些偏差很正常。预估较实际所花费的工作量时大时小,有人快,有人慢。单独从个人能力来解释进度并不客观,因为本来项目排程时就应当考虑到人的能力的不同。
帕金森定律(Parkinson's law): 只要还有时间,工作就会不断扩展,直到用完所有的时间。 简言之,工作总在最后一刻才能完成。
“TRIZ是人类思维的精华,如果说已经达到了目前所知方法论的顶峰,这个比喻并不为过。” 必须承认,企业的年利润达到3000万RMB以上,才有可能接受TRIZ和PACE理论在企业中的植入。
HTML的每个元素都可以让JavaScript在某些事件发生时,进行处理。就比如onclick="clickButton()"之类的属性设定。 像下面这篇博客所讲的一样,在WebKit中每个元素都有其对应的JS绑定的实现: [WebKit]为JavaScript Binding添加新DOM对象的三种方式及实作 对于视频元素,可以对应看看JSHTMLMediaElement.cpp和JSHTMLVideoElement.cpp中的实现。
最近一直在处理HTML5视频相关的问题,以下是一些和各个视频网站与HTML5 Video相关的问题(不是针对Flash视频): 优酷在清晰度切换时的事件处理不当 优酷在视频下面的清晰度切换时,在JavaScript中会重新呼叫this.video.load()加载视频,但问题在于video的abor和errort处理函数会在WebKit内核的浏览器中造成递归调用。
看到Stack Exchange上对于在Bug Report中加入"Person to blame"栏位的讨论,这的确是一个很好的题目,这里面包含了很多的东西。
2010-12-21 14:13 宗子城 每次我们看敏捷开发Scrum都是从技术角度,今天我们尝试从管理角度来看这个问题。 Scrum Scrum近几年已经成为最有影响的软件开发过程,从Forrester 关于敏捷模式的调查报告我们可以看出一些倪端,而且微软也推出了更Scrum的模板,相信.Net平台下越来越多的团队会采用这一过程。
今天看到了下面这篇博客,是淘测试开发的iOS自动化测试工具,非常值得学习应用: InstrumentDriver,对iOS自动化测试说 Yes! InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例。
Google Chrome App Store中有一个强大的SSH client(可以代替PuTTY), 关键它是集成在网页之中,下面是截图: 它的强大正是Chrome强大的Native Client所造就的。
想到要如何为所有的对象增加实例变量吗? 使用Category可以很方便地为现有的类增加方法,但却无法直接增加实例变量(有为此使用查表法的,也算曲线救国吧)。
虽然是老生常谈,但下面这篇文章还是概括地很全面的。 C++中的static有以下三种不同的效果: 当用于成员变量时,表示它将由类分配管理而不是实例。