用Runtime Syp调整Eclipse的启动性能,第2部分 - 成功的骗局 - 编程入门网
位于处理 org.eclipse.ui.actionSets 扩展点的同一个插件中(Workbench UI 插件), 也不位于它的先决插件中。那么,当它看起来不取决于插件的 classpath 时, Workbench UI 插件如何去创建这个类的一个实例呢?
插件的类加载器 (classloader) 负责在它的库中解析对类的引用。类加载器 将插件引用映射到它们相应的包含有插件类的 JAR 文件,比如我们的例子, SampleAction 。因此,Workbench UI 插件不必“知道”通过属性引用的类,比 如 <action> 标签的 class 。相反,是由于“Hello Eclipse”插件定义 了对 Workbench UI 插件的依赖而使之可以访问目标插件的类,因而有权通过目 标插件的类加载器访问 Hello Eclipse 的类。简洁地重述一遍,当 Eclipse 找 不到某个类时,它会要求目标插件的类加载器去加载那个类;那就是 createExecutableExtension 方法所做的事情。 用Runtime Syp调整Eclipse的启动性能,第2部分 - 成功的骗局(6)时间:2010-12-02 IBM Dan Kehn避免与扩展点处理相关的过早的插件激活 回到图 8 中所示的栈记录,我们可以发现,在所选择的文本中部的代码通过 调用 createExecutableExtension 对扩展贡献进行处理 —— 看吧! 插件开始 加载了。我们现在要寻觅的是明摆着的问题的答案:这时需要加载它吗?可以将 它的加载向后延迟吗? 实际上所有会激活另一个插件的类最终都可以追溯到对 createExecutableExtension 方法的调用。这些调用的调用参数指明了属性名( 通常是 “ class ”)和它的值,即要加载的类的全名。这就带我们回到了导致 激活(此插件)的插件扩展贡献,在我们的例子中也就是 subuilder 插件。清 单 2 是它的清单的摘录。 清单 2. Subuilder plugin.xml 摘录
就参数而言,这个扩展贡献看起来类似于用来定义菜单选项贡献的 org.eclipse.ui.popupmenu 扩展点;更确切地说,它定义了一个标签(属性 “name”),位置(属性“group”),目标(属性“view”),还有最特别的 ,处理程序(属性 “class”)。Eclipse 扩展与这个特殊实现的区别是, Eclipse 的扩展创建一个委派类作为菜单选项的代理。直到菜单选项真正被选择 时,相应的处理程序类才会被创建,因而延迟了包含此处理器类的插件的激活。将同样的代理策略应用到前面的例子中,J2EE 透视图的打开快了差不多 7 秒。创建 NewSQLSPAction 实例和激活包含它引用的类的插件的开销并没有消除,而 是改变为随取随付 (pay-as-you-go)。 结束语 现在您应该知道为什么本文的子标题定为“成功的骗局”了。这完全是为了 满足用户的期望,并让用户不去理会您希望他们不要去注意的东西。在这个特例 中,现在启动更快了,但是稍后如果用户启用数据库工具,他们还要是付出同样 多的 CPU 开销。那是可以接受的,因为开销是以化整为零的方式付出,而且, 更重要的是,它使延迟更接近用户期望付出代价的相关动作。 记住,目标是 尽可能延迟代码的执行,不仅因为它可以带来感觉上性能的提 高,还因为最容易用于优化速度的代码是永远不执行的代码。Eclipse 的插件体 系结构让您可以容易地创建达成此目的的扩展,Runtime Spy 帮助 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |