Web及移动开发技术
历史项管理根据标准定义,由Page管理一个Joint Session History, 包含了各个子Frame的历史项。逻辑上对应如下的关系:从上面看三个层次:Page,Frame,以及JS Binding的接口。
最近学习了gnuplot, 上手做了一个Lattice的脚本,这里只能显示2x2,如果使用其它脚本配合,就可以灵活的根据数据来显示。 下面这个是效果: 脚本(以2x2为例, 测试数据中含有两列), 其中要点是使用multi-plot模式,根据需要(第一行及第一列)显示标题即可。
标准定义 关于历史的管理,和HTML页面加载一样,都有其相应的标准。地址如下: WhatWG: https://html.spec.whatwg.org/multipage/browsers.html#history 其中关于历史项的要点如下: 1. 在onload之前,非用户操作引起的导航操作不建立历史项。
原文以示例代码系统的讲述了三种内存损坏的情况: 全局内存、栈损坏及堆损坏, 以及它们产生的原因。粗略整理如下。 Global Memory Corruption 即全局变量的内存使用出了问题,主要还是越界。
本周有顾问来公司做岗位说明书的培训,其中自然提到了晋升双升道、小步快跑之类的内容。我对职位规划没有太多的了解,只是从2007就开始思考团队梯队的问题,尝试着做过一些定义,但并没有系统的实务经验。
专业精神对于在我们这些在职场打拼的人来说非常重要。不论在哪个行业,也不论什么岗位,专业的做事都是同等的重要!而达成专业化,个人认为需要三个步骤。 一.最为基本的是保证质量 你所交付的工作成果的质量就决定了你的基本价值,交付的成果必须是符合要求的,否则就是质量不过关,而且不同的情境下的“要求”是不同。
组织结构的位置只是一种工作报告形式,代表的是需要去承担不同的责任,至于“权力”的大小那是另外一个问题。公司可能因为很多的原因,进行组织结构调整,老板也许仅仅是希望多一个代理人进行监督而已。
Mac OS/Android下的Static Initializer Mozilla工程师通过优化Static Initializer(静态初始化,或全局建构函数, Global Constructor)和Binary布局来提升FireFox启动速度的文章,非常有参考价值。
对于大多数开发者而言,系统的内存分配就是一个黑盒子,就是几个API的调用。有你就给我,没有我就想别的办法。来UC前,我就是这样认为的。实际深入进去时,才发现这个领域里也是百家争鸣,非常热闹。
之前写了几篇加载流程的说明,是从下向上看,有点只见树木不见森林的感觉。经过最近一段时间的学习,有了能加以概括抽象的方法。 WebKit加载流程和页面组成是直接相关的,页面就是WebKit要加载的对象。
作为Android预置的数据库模块,对SQLite的深入理解是非常有必要的,可以从中找到一些优化的方向。这里对SQLite的性能和内存进行了一些测试分析,对比了不同操作的执行性能和内存占用的情况,粗略地列在这里算是作个小结。
最近偶然玩了一下CGI,收集点资料写篇在这里留档。 现在想做HTTP Cache回归测试了,为了模拟不同的响应头及数据大小,就需要一个CGI按需要传回指定的响应头和内容,这是从老外的测试页面学习到的经验。
如果你想在GDB调试时把调用堆栈保存下来归档,那下面这个脚本就方便你了。原理是将调用堆栈的函数抽取出来,再完成调用关系就可以了。 首先你要安装dot (Mac OS下安装Graphviz), 如果你想转为文本格式,就可安装Perl的Graph::Easy包(命令行:sudo perl -MCPAN -e 'install Graph::Easy', Ubuntu下直接安装libgraph-easy-perl)。
“世上有三种谎言:谎言、该死的谎言和统计” ------这是一句著名的西方谚语,其中让统计有如此名声的非平均值莫属了,可见数据分析并不能只是简单地求和、求平均。
一. 功能定义 首先要从功能上明确无痕浏览的作用和目的。涉及的功能包括: Bookmark, History (Input, Browse, Download, Forms/Auto complete), SSL Certs,Cookie, Local Storage, WebSQL, Application Cache, HTTP Cache,Disk Cache,Web App/Plugin 以及所有这些可能会引起持久化及透露用户信息(如Gelocation, Notification)的功能项。
说到职业发展, 谈得最多的问题莫过于:"我应该学什么?我应该往哪个方向做?" 而我认为常常反思"我要做什么"才能为职业发展提供好的动力,才能促进自己去探求学什么。
页面可用的缓存包括:Http Cache, Local Storage, Session Storage以及Application Cache. 它们都可以用来减少请求数量,以提高页面的性能及减少流量消耗,这对于移动端的浏览器来说更为重要 (另外还有Memory Cache, 不过对于前端工程而言是透明的)。
“最快的网络请求就是不发请求。” 无论何时有人说到这句话,我都会心一笑。这的确是真理,HTTP Cache对网页速度至关重要。 现在缓存的使用看似正渐入佳境,但还不够。
HTTP Cache这个题目太大,它包含两个重要的领域: HTTP & Cache。 这两个方面都有很多人进行着各种研究,相关的文档和论文也是数不胜数。
关于页面加载,RFC2616(HTTP 1.1)做了很多的定义,WebKit的流程也是遵循这些定义的实现。这部分的实现主要放在之前提出的WebCore Loaders和HTTP Stack中。
从上次学习WebKit加载已经过去了大半年了,终于又有时间理一次加载流程。期望逐步完善细节,最后能有一个系统的总结。 首先可以这样理解WebKit的加载逻辑,涉及三个主要的组件, 其中HTTP stack为各个平台下使用的HTTP协议模块,WebCore Loaders则依据页面加载及解析过程对加载不同HTML Element的控制,Loading Controller则具体实现了资源加载的行为控制: 虽然从WebKit整体结构上这样理解不太严谨的,但单纯站在加载的角度来看,却有利于理解加载流程。
关于SQLite的优化,首先是能用SQL语句批次处理的,就不要单笔操作,Cursor就更是能不用就不用。比如成批的DELETE/UPDATE,将条件组装到SQL语句,会比使用CURSOR一条条的查再删效率要高很多(若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一天缩到了数分钟以内,参考)。
最近写的代码基本是R脚本了,越发感到R的强大。现在用它做一些数据分析以及进行一些模拟。 收几个常的函数在这里。 1. 批次替换data frame中的数据 i.
这里并不是要系统说明网络性能评测,而是闲聊一些体会。 系统观 从考察网络的性能角度上来看网络,总是难以捉摸,其中涉及的因素很多。各种网络参数和各类概率事件相互作用,最终表现出一个不断变化的系统环境。
使用R语言绘制动画可以方便地观察到数据的变化行为。以之前Chrome在收集页面资料时使用的指数平滑算法为例,绘制一个在不同系数且目标值不断变化(应用场景不是页面访问统计)的情况下的曲线逼近行为。
中位数、平均值、标准差、箱形图
Chrome为了让用户有更好的上网体验,提供了一些以统计为基础的策略。目的在于预知用户的下一步行为,并提前发起操作,以减少用户等待时间。详细的内容可以参考之前的翻译: 。
对Android网络抓包分析,一般是使用tcpdump抓个文件,再到PC用Wireshark打开分析。能不能达到直接使用Wireshark的效果? 答案是可以的,至少已经非常接近了。
1. JNI 注册 1.1. JNI的基础结构 JAVA == JNI == Native Code JNI(Java Native Interface)是Java与Native Code(C/C++/...)代码交互的中介,Java+JNI构成主程序, JNI+Native Code以动态库的形式供程序调用。
转自ITeye: constGU 本文将围绕android平台webkit组件中,java层的几个主要类进行分析,说明各个类的职责以及类之间的关系。
使用预连接优化了TCP连接管理 已经预解析到了主机名,也有了由OmniBox和Chrome Predictor提供信号,预示着用户未来的操作。
大多数人不能承认自己有缺点,听到别人对自己有负面的评价,第一时间努力做的是:解释、辩驳,反而不容易去检讨改进。孔夫子说的“闻过则喜”,其前提是要能承认有过,才能喜、才能改、才能进步。
不是所有的内容都有帮助的.常常想如何能让每天多一时间?其实我们一直在浪费时间。道理其实很简单,我们要善于选择做什么,而不是如何去做。多花些时间去做正确的事。
Chrome Predictor的预测功能优化 Chrome会随着使用变得更快。 它这个特性是通过一个单例对象Predictor来实现的。这个对象在浏览器内核进程(Browser Kernel Process)中实例化,它唯一的职责就是观察和学习当前网络活动方式,提前预估用户下一步的操作。
在里作者讲述到领导生命周期理论在项目管理环境下的应用。 领导生命周期理论(Life-cycle Leadership)模型指出,存在4个基本的领导风格,而且要想有效运用它们需要使用领导风络与被领导者的成熟度相适应。
以下内容是"The Performance of Open Source Applications" (POSA)的草稿, 也是The Architecture of Open Source Applications的后继者. POSA囊括了一批针对性能的优化和设计,以及开发过程中的性能管理等内容的论文,预计在2013年春天发售【译注:国内有得等了】。
好的代码总是将复杂的逻辑以分层的方式降低单个层次上的复杂度。复杂与简单有一个相互转化的过程。 1. 表驱动法 在涉及编码解析的功能时,常常有一个带有长长一串case的switch,而且会不断增长。
主要内容: 作者及书。 Part I. 我们的行动如何创造事实,我们如何才能改变现实。 Part II. 第五项修炼:学习型组织的基石。
分享两个在PRIMAX分享的PPT, 原件放在SlideShare上, CSDN不支持iFrame,只能用链接了。 代码大全 代码大全(内训) (87页) fromHorky Chen 程序员实践之路 程序员成长路上的那些小事。
工欲善其事,必先利其器。GDB的扩展可以通过command file和python脚本完成,这里针对Command file,一个简单高效的扩展方案。
在反汇编常常要在无法使用调试信息和源代码的情况下查看数据内容,数据结构比较好处理,如果是C++的类,就需要做些总结了。 基础 - POD? C++的成员变量的排列顺序关键在于区别是不是POD(Plain Old Data)类型,从而确定是否需要有VPTR。
很高兴拿到了这本《再造卓越》,内容确实发人深省。虽然这本是通过探讨卓越企业的没落来检讨出再造卓越之道,不过我的理解更加侧重在对于“人”的警示作用。 作者吉姆.柯林斯将企业衰落分为五个阶段: 一.狂妄自大 二.盲目扩张 三.漠视危机 四.寻找救命稻草 五.被人遗忘或濒临灭亡 作者也同样给出解决之道:坚持朴素的信念,坚持到底,永不放弃。
Register Allocation 对于一个JIT而言,寄存器分配对系统的消耗通常是一个瓶径。之前有Graph Coloring Allocators, Chaitin style等分配方式,现在要介绍的是DFG JIT使用的Linear Scan算法。
原文地址:ITeye 基本垃圾回收算法 可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法。
在编译器优化领域,数据结构的选择会直接影响程序优化的有效性。SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Control Dependence Graph一起被用来表示程序的数据流和控制流。
类型推导是DFG JIT最重要的一个基础,WebKit官网对此做了一点解释,翻译如下做为学习参考。 Type inference通过profiling values来做到的,先是预测对哪些类型操作进行分析,再添加类型检查,最后基于类型检查的结果建立类型统计数据。
Note:首先相对于WebKit官网的代码,iOS上的版本使用WAKView代替了NSView。 比如Mac OS中将PlatformWidget定义为 NSView*, 而在iOS中则是WAKView *. 详细的内容可以参考Hursing的博客。
Note: 这里的‘封装(Encapsulation)’指的是限制对象访问的语言特性,也被称为信息隐藏(information hiding)。翻译的初衷在于看看一些不同的想法,作者的思考在某个层次上是有道理的,但并是完全正确。
Overview 在Safari里有一个单例对象WebPluginDatabase负责管理本地的插件,每个plugin对应一个WebBasePluginPackage,存放在plugins里。
可惜这个想法已经被一家做电子阅读的公司申请专利了,就算做了一次关于产品的思考吧!欢迎一起讨论浏览器的社交化方向! 基本架构 两台运行指定浏览器的设备可以通过三种方式进行交互: 1. 在相同WiFi网络内使用TCP/UDP连接。