插件(Plug-In)这个词,你应该不会陌生,也许你所用的浏览器中就安装了很多插件,比如:
UA 切换插件,TA 的作用是模仿成不同的终端来得到不同的网站适配页面,这个程序员常用。
翻译插件,TA 的作用是对划选词进行翻译。
种子插件,专门用来找种子的。
这些插件都必须依赖浏览器,而不能独立运行,他们天生要被包养,无法自力更生,就像刚出生的牛犊,还是必须要依赖老母牛的奶才能生存一样,老母牛或者说浏览器被称作宿主程序,插件就是依赖于宿主程序的。
作为一个浏览器厂商或者一个平台,TA 的目标就是满足用户痛点最强的需求,比如浏览器解决用户浏览网页的问题,淘宝解决了我们只能买到为数不多假货的问题。
但是,用户是贪婪的,就像产品经理一样,总有莫名其妙的需求与想法产生,比如,就像刚才说的几个插件功能一样,他们很多都是伴随着网页浏览的过程产生,依赖宿主程序(浏览器),但是浏览器厂商面临着成千上万的用户需求,它无法完美的解决所有问题,而且再某些领域方面,TA 并不专业。
这种情况下,浏览器厂商应该只满足好最核心的浏览需求,并做好 web 标准的引领和制订才是核心价值,这些依附于宿主程序的插件,应该交给专业的人去做(就像要账这个细分领域,是必须有一些社会人士出手才能搞定的),在一个充分竞争的市场下,好的插件自然会沉淀出来,解决了用户需求的同时,插件仍然有商业的机会来变现,就形成了一个良性循环的系统,比如 Chrome 的插件 Store,就吸引了很多开发者。
既然是做宿主程序核心功能的扩展和补充,那对于各种插件来说,宿主程序总要暴露出一些能力给插件使用,要不插件就是无源之水,什么都干不了,所以最后宿主程序会抽象出一个能力的集合供插件调用,宿主程序也给插件制定了一套规范,规定插件如果想在我的环境中运行,必须满足这些条件和条件。
所以宿主程序暴露的能力和插件的规范就形成了整个插件系统的规范和准则。只要在这个系统下运行,必须遵守这样的规则(比如驾驶过程中,必须遵守绿灯行,红灯停的基本则)。
我刚刚只是以浏览器的插件系统为例,来谈整个插件产生的背景以及插件的规范。其实插件思想在软件产品中很频繁的存在,比如安卓和 iOS 两个开发集成环境都包含有大量的插件,来满足程序员各种对便利和更强大工具的支持。
在一些平台中,这种思想也存在其中,比如很多电商搭建了购物平台,比价的需求自然产生,他们就是这些平台的插件。
苹果系统只是一个操作系统,那么多的优秀 App 就是整个系统的插件,甚至这些插件促进了整个苹果系统的繁荣。
NodeJS 之所以发展这样迅速,就是因为开发者社区不断的产生出功能强大的插件包,使构建整个网络程序更容易。
在一些网络游戏中,游戏者为了升级或者追求利益,经常会有外挂程序产生,这种外挂抽象来讲就是这个网游的插件,尽管它有可能会破坏整个游戏数值系统,但是外挂程序就是依存于网游而生存的。
抽象到工作生活中,一个互联网公司只关注它的核心竞争力,也就是产品做的怎么样,他们通用的做法是班车系统,会议组织,福利采购都已经统统交给专业的外包公司,这些外包公司就是这些互联网公司的插件。
无论程序还是生活,插件思想无处不在,他们是一样一样的,都是依赖于某一个核心需求的衍生功能拓展,和宿主共同生存,无法自主运行。