扫一扫查看属于您的

黑金特权

用户信息使用条款及隐私政策

《用户注册协议》《联想网站隐私政策》请您仔细阅读以上协议,其中有对您权利义务的特别约定等重要条款,同意后方可使用本软件。

联想网站隐私声明

本声明最后更新于 2022/4/28

我们的网站隐私声明(见下文)最近进行了更新。查看以前的版本

本声明适用范围

Lenovo重视您的隐私。本隐私声明适用于通过由联想集团有限公司及其附属集团公司(下文简称“联想”)拥有和运营的网站以及由Lenovo或我们的服务提供商和合作伙伴维护的某些脱机服务收集的数据。本声明描述了Lenovo网站的信息处理方法,这些网站包括但不限于 lenovo.com.cn、www.lenovo.com、lenovocareers.com、blog.lenovo.com、lenovosoftware.com、solutions.lenovo.com、support.lenovo.com、 techtoday.lenovo.com 以及联想社区网站(例如 gaming.lenovo.com、smbcommunity.lenovo.com 和 education.lenovo.com)。本隐私声明描述了Lenovo网站的信息处理方法,包括收集何种信息、Lenovo如何使用此类信息以及用于什么目的;会同何人分享此类信息;以及Lenovo如何保护此类信息。它还介绍了您在使用、访问、更正和删除个人信息等方面的选项。此外,本声明还涉及Lenovo在某些脱机环境中(如营销、客户服务和支持)对个人信息的收集和使用。

本声明不适用范围

Lenovo网站可能包含指向其他网站的链接,其中一些网站不归Lenovo所有或不受其控制。Lenovo不对这些其他网站的隐私做法或内容负责。我们的一些网页使用框架技术来显示供应商或合作伙伴的内容,同时保留我们网站的外观。此外,某些联想品牌网站由供应商或合作伙伴运营,如果标有“提供技术支持”徽标,则这些供应商和合作伙伴的隐私声明和使用条款将约束此类网站或体验。

另请注意,本声明不适用于通过Lenovo的产品和软件或其他来源收集的信息。了解我们的产品隐私做法。

要了解有关联想产品隐私做法的更多信息,请通过您所在国家/地区的联想网站浏览适用的联想产品隐私声明,或者浏览联想产品或服务体验。

本声明的变更

如果我们对本声明作出更改,我们会提供先前版本以便您了解更改的时间和内容。如果我们对本声明作出任何重大更改,会在该等更改生效时通过在本网站发出通知或者发送电子邮件(发送至您帐户所指明的电子邮箱地址)的方式告知您。在适用数据保护法律的要求下,我们亦会就任何影响我们如何使用您个人信息的重大更改寻求您的同意。我们建议您定期查看本页面,以了解有关我们隐私做法的最新信息。

我们的网站隐私声明(见下文)最近进行了更新。查看以前的版本

Lenovo会收集哪些信息;如何使用这些信息;是否会与第三方分享任何个人信息?

当您与我们的网站以及由Lenovo或我们的服务提供商和合作伙伴维护的某些脱机服务互动时,Lenovo会收集有关您的信息。我们使用这些信息是为了向您提供您所请求的产品或服务;为您提供客户服务或支持;向您发送新闻、更新或优惠;为您参加各种活动提供便利;改进我们的网站、产品和服务;确保他们表现最佳;以及其他原因。请注意,在某些情况下,如果您没有向我们提供我们要求的个人信息,我们可能无法向您提供您请求的产品、体验或功能。下面介绍了我们如何在某些联机和脱机环境中收集、使用和共享信息(包括个人信息)。

浏览我们的网站

一般而言,如果您只是访问我们的网站而没有注册或登录,则您可以浏览我们的网站,而不提供除我们的 Web 服务器自动收集的非个人身份信息以外的任何其他信息。我们的 Web 服务器日志会自动收集我们网站访客的域名和某些相关数据(如 IP 地址或设备标识符)。此信息用于测量访问次数、花在Lenovo网站上的平均时间、浏览的页面和网站使用情况信息。我们使用这些信息来满足法律或法规要求;维护我们网站的安全性和完整性;衡量我们网站的使用情况;改进我们网站的内容;以及显示和通知广告。这些信息不会以使我们能够直接识别网站访客的形式保留或使用。我们可能会使用 Cookie 收集这些信息,如下面的“Lenovo是否会将 Cookie、标签、像素、网络信标、分析和相关技术用于在线广告和其他用途?”一节所述。这些信息可能会与Lenovo的服务提供商共享,包括第三方数据托管、数据处理和网站服务,以便他们可以支持我们网站的功能、安全性、完整性和改进。

Lenovo还基于用户在购买产品或服务时、促销期间提供给我们的信息以及来自调查和我们的服务器日志文件的信息,对我们用户的人口特征(例如年龄和性别)、兴趣和行为开展调查。我们这样做的目的是为了更好地了解您并为您提供服务。此类调查将以汇总的方式进行整理和分析,以防止识别与任何个人相关的个人信息。Lenovo有时可能会用第三方提供的信息补充这些信息。Lenovo可能会与我们的供应商分享这些汇总数据,使他们能够为Lenovo提供数据托管、处理、分析及相关服务。

您的用户个人资料

您的用户个人资料可能包含您在与Lenovo互动时提供的信息,包括个人信息,例如您对我们网站某些区域的使用;您的 Lenovo ID、MyAccount、护照 帐户;您与我们的客户服务代表的联系;Lenovo产品注册信息;以及来自您使用的某些Lenovo产品和服务的信息。您的用户配置文件允许 Lenovo:

• 为某些Lenovo产品和服务提供其正常工作所需的信息;
• 解决您可能遇到的Lenovo产品、服务或网站的问题;
• 建议让Lenovo产品、服务和我们的网站更好地工作的方法;
• 为您提供有关Lenovo产品和服务的新闻、更新和信息;
• 以及如果您选择接收营销通讯,则为您提供您可能感兴趣的其他Lenovo产品或服务的相关信息。

以下各节将进一步详细介绍用户个人资料中可能包含的信息类型、Lenovo如何使用此类信息、是否会与任何第三方分享此类信息以及您可能做出的有关此类信息的某些选择。有关您的用户个人资料中可能包含的其他信息类型的更多详情,请参阅产品的Lenovo隐私声明。

Lenovo ID 和Lenovo产品注册

当您选择创建Lenovo ID、注册Lenovo产品或通过 MyAccount 或“护照”创建帐户时,我们将收集有关您和您的Lenovo产品的信息,包括个人信息。我们使用您的 Lenovo ID 以及相关的注册和帐户信息来识别您的身份,包括您何时使用我们的某些软件应用程序(如 Lenovo Vantage)和我们的交互式服务(如我们的在线商店和客户支持网站)。

如果您选择创建一个Lenovo ID或注册您的产品,我们将需要从您那里收集某些信息,例如您的姓名、地址、电子邮箱地址、语言、地区/国家、产品类型/型号、产品序列号、产品注册日期以及有关您操作系统的激活数据。我们将使用这些信息来管理您的帐户或个人资料;提供您请求的服务;并向您提供通讯,包括您选择从Lenovo接收的营销消息。Lenovo出于此目的收集和保留的信息可能会与我们的服务提供商分享,以便他们可以向Lenovo及代表其提供数据托管、处理和营销服务。

要更改您的 Lenovo ID 密码或取消激活您的 Lenovo ID 帐户,请访问 account.lenovo.com 并导航至“我的个人资料”或发邮件至privacy@lenovo.com。

零售和电子商务

当您选择向Lenovo下订单时,我们会收集您的个人信息。这可能包括您的姓名、电子邮箱地址、帐单和发货地址、电话号码、付款信息(如信用卡或借记卡)、年龄/出生日期、用于个性化某个Lenovo产品或服务的信息,以及在有限情况下(即订单处理严格要求此类信息的情况)包括社会保险号或其他国家/地区识别号。Lenovo使用此信息来帮助处理您的订单,并使我们能够在您的订单出现问题时与您联系。此外,如果您购买了需要服务的产品,您的个人信息可能会被用于获取信用报告(如有必要)。

我们可能会与参与电子商务和零售履行活动的服务提供商和合作伙伴分享此信息,例如数据托管公司、支付处理商、金融机构、运输公司和无线运营商(如果运营商服务是通过我们的网站订购或激活的)。

客户服务、质量监控和维修

一些Lenovo产品和服务支持活动也可能涉及您联系Lenovo或Lenovo联系您的情形,包括通过电话、电子邮件或聊天的方式。请注意,在这些情况下,出于员工培训和质量保证目的,我们可能会对通话录音。为了向您提供您所请求的服务或支持(如根据Lenovo产品保修条款请求技术支持或维修服务),联想客户服务人员还可能收集和访问有关您的个人信息,例如您的用户个人资料、帐户信息、联系信息、Lenovo产品和服务标识符以及有关您如何使用Lenovo产品和服务的信息。

一些联想客户服务人员为向Lenovo及其客户提供此类服务的服务提供商工作,并可能在此背景下访问您的相关信息。联想使用数据托管、处理和通信服务提供商(如在线和自动聊天工具)来支持这些活动。

此外,Lenovo产品的授权Lenovo分销商、经销商或维修提供商也可能访问此处所述的特定客户服务、质量保证和产品信息,以支持您的产品或提供您请求的服务,如您根据Lenovo产品保修请求的维修服务。

营销、促销、调查和活动

如果您接收来自联想和/或其合作伙伴的营销、广告或促销通讯(例如通过电子邮件或产品内推送通知),或者如果您选择参加活动、竞赛或调查,我们将收集有关您的个人和非个人信息,以协助我们管理这些活动和通讯,或促进您的参与。具体地说,我们可能会收集您的姓名、地址、电子邮箱地址、电话号码、年龄/出生日期、Lenovo产品信息、您的用户个人资料数据以及您选择提供的其他个人信息。我们还可能使用此信息向您发送产品支持通知、公告、新闻稿,以及在适用法律允许的情况下向您发送参与客户满意度调查的邀请。

联想和选定的服务提供商或合作伙伴(包括营销、广告、调查和活动公司)也可能使用您提供的信息代表我们或者作为Lenovo与该公司之间的联合活动或促销活动的一部分来开展促销、客户满意度或产品支持活动。联想还可能使用数据托管和处理服务提供商来支持这些活动,以及使用外部工具来帮助我们了解更多有关消费者趋势、营销电子邮件打开/点击率等内容的信息。此外,我们可能会从第三方来源(如消费者研究公司)获取数据,以补充我们从您那里收集的信息。有关我们的网站如何使用第三方 Cookie 和相关技术以支持其在线营销和广告活动的更多信息,请参阅下面标题为“Lenovo是否会将 Cookie、标签、像素、网络信标、分析和相关技术用于在线广告和其他用途?”一节。

您可能还会收到来自Lenovo的交易通讯,如订单确认和服务或软件更新。您无需订阅即可接收Lenovo营销通讯,以从Lenovo购买产品。您可以选择通过以下方式取消订阅:按照这些通讯中的说明操作;导航到 Lenovo取消订阅或退出机制;在帐户设置中更改您的首选项;或发邮件至privacy@lenovo.com。

忠诚度计划

Lenovo可能为其客户提供参与忠诚度计划以获得折扣、优惠券或其他激励的机会。虽然这些计划是完全可选的,从Lenovo购买产品或服务并不需要参与该计划,但如果您选择参与,则需要收集您的某些个人信息。

为注册和参与Lenovo忠诚度计划而收集的信息可能包括您的姓名、地址、电子邮箱地址、电话号码、年龄/出生日期、Lenovo产品信息、用户个人资料数据以及您选择提供的其他个人信息。这些信息可能会与Lenovo的服务提供商或合作伙伴分享,以便其代表我们管理忠诚度计划。Lenovo还可能会使用数据托管和处理服务提供商来支持这些活动。您可以按照适用的忠诚度计划规则设定的任何步骤结束您对Lenovo忠诚度计划的参与。

社交媒体

我们的一些网站包括社交媒体功能和链接,例如含有图标的社交媒体工具栏,这些图标链接到Lenovo在特定网站上的内容(例如 Facebook 上的Lenovo页面以及 Twitter 上的Lenovo信息流)。这些功能可能会收集您的 IP 地址以及关于您正在访问我们网站上的哪个页面的信息,并且可能会设置 Cookie 来让该功能正常运行。社交媒体功能和小部件由另一家公司托管或者直接在我们的网站上托管。您与这些功能的互动受提供功能的公司的隐私政策约束。

您可以通过登录各种不同的社交媒体网站(如 Facebook、Google、Twitter 等)来访问某些Lenovo网站体验和帐户信息。如果您选择通过这些服务登录,Lenovo将从您的社交媒体帐户收集某些信息,包括您的公共个人资料、电子邮箱地址、兴趣、爱好及目前所在城市。Lenovo可能会将此类信息链接至或以其他方式包括在您的Lenovo用户个人资料,并且我们还可能将此类信息用于分析和营销目的(如您已选择接收营销通讯)。所提供的信息视您与社交媒体帐户之间达成的隐私设置而定。有关更多详细信息,请参阅适用社交媒体服务的隐私声明。

博客与论坛

如果您参与Lenovo的博客或论坛,应知晓您在博客或论坛中提供的信息可能会被可以访问该博客、论坛或聊天室的Lenovo内部或外部的其他人广泛使用。此外,请注意各个博客、论坛和聊天室可能是由Lenovo以外的其他组织主办和/或可能有其他的规则和条件。每个参与者在博客、论坛或聊天室发表的意见是他们自己的意见,不应认为是反映了Lenovo的意见。

客户感言

Lenovo有时会在我们的网站上展示满意客户的产品评述、客户感言和其他代言。我们的服务提供商通常会管理这些评述及相关的网站功能。经您同意,我们可能会连同您的姓名公布您的评论。如果您想更新或删除您的评论,可以发邮件至privacy@lenovo.com。

就业申请

当您对联想的就业机会表示兴趣时,您可能会选择向联想提供个人信息,例如通过我们的网站提交申请或简历。我们收集的您的信息将在您提交申请时显示出来,包括姓名、联系信息、背景、教育、就业历史和其他通常用于评估求职者的就业机会的信息。我们将仅使用此信息评估您的就业候选资格,并仅与支持这些活动的服务提供商分享此信息(如代表联想工作的求职者搜索公司和背景筛查公司),以帮助审核求职者的申请。联想可能会使用服务提供商来帮助处理和管理其在此种情况下收集的信息,包括联想业务和公司服务。我们还可能会使用通过公开资源(如 LinkedIn 个人资料)找到的其他信息来作为收到的就业申请的补充信息。

业务合作伙伴关系

如果您是Lenovo业务合作伙伴代表(即Lenovo产品的分销商或经销商),您可以访问Lenovo业务合作伙伴专用的Lenovo网站,例如 Lenovo Partner Hub。我们可能会使用您选择通过该等网站提供的个人信息来管理和发展我们与您以及您所代表的公司的业务关系。例如,这可能涉及使用您的信息向您发送Lenovo业务合作伙伴计划的详细信息。它可能还包括与其他业务合作伙伴(须遵守可能存在的任何保密义务)、Lenovo客户或潜在客户分享某些信息。对于特定交易或计划,我们也可能在客户满意度调查过程中或出于市场研究目的联系您。用于此目的的信息可能会与帮助我们管理这些网站或关系的服务提供商共享,例如数据托管和处理公司,以及与广告、营销、活动和调查合作伙伴共享,以便他们可以代表我们执行销售、促销活动或调查研究。

供应商管理

如果您是Lenovo供应商代表,您可以访问专门面向Lenovo供应商的Lenovo网站。我们可能会在与您达成或履行交易时使用在该网站上提供的信息。例如,这可能包括与在完成交易所涉及的联想的其他部门、联想的业务合作伙伴、客户、货运公司、金融机构、邮政或政府当局分享信息。信息还可能会被用于管理和发展我们与您、您所代表的供应商及/或其他Lenovo供应商的关系。

兼并与收购

有些时候,出于战略或其他业务原因,Lenovo可能会决定在一些国家或地区出售、收购、兼并或以其他方式重组业务。我们将会通过电子邮件及/或在我们的网站上的显著位置发出通知,告知您的个人信息的所有权或用途的任何变化以及对于您的个人信息而言您可能拥有的任何选择。这种交易可能会涉及向潜在或实际的买方披露个人信息或者从卖方获得个人信息。

法律要求和行使我们的权利

个人信息可能要服从于司法或其他政府部门发出的传票、令状、命令或刑事和反欺诈调查的相关安排。因此,如果我们本着善意的原则认为法律有要求,我们可能会向监管或政府机构、法院、审裁处和执法机关披露个人信息或其他信息。我们可能还需要披露个人或其他信息,以保护我们的权利、保护您或他人的安全或对盗窃或欺诈行为进行调查。除上述情况外,可能还会有一些情况要求我们向其他方披露您的个人信息,包括但不限于法律顾问或收债机构。

Lenovo是否会将 Cookie、标签、像素、网络信标、分析和相关技术用于在线广告和其他用途?

和大多数网站一样,我们会自动收集一些信息并存储在日志文件中。我们有时候会收集关于访客在访问我们网站期间的行为的信息,以帮助我们提供更好的客户服务、改善我们网站体验的质量或者定制广告内容。

例如,我们会跟踪访客是从哪个域名访问我们的网站,我们也会衡量访客在Lenovo网站上的活动,但是我们在执行上述操作时不会实际识别任何访客的身份(我们将此类信息称为“不可识别身份的信息”)。Lenovo或代表我们的其他方可能会使用此类数据来分析趋势和统计资料,以改进我们的网站以及提供有针对性的广告。

点击流

我们在交易中向您收集个人信息时,可能会以不可识别身份的格式提取有关该交易的一些信息并将其与其他不可识别身份的信息结合在一起。此类信息有时称为“点击流”。此类信息仅在汇总层面使用和分析,以帮助我们了解趋势和模式。此类信息不会在个人层面查看。

Cookie、像素和在线广告

为了提供定制的网站体验,Lenovo可能会使用 Cookie 来存储和协助跟踪有关您的信息。在适用法律要求的情况下,Lenovo会在获得您的同意后才在您的Lenovo网站体验期间使用某些 Cookie,及/或为您提供选择启用或禁用哪种类型的 Cookie 的机会。Cookie 只是从 Web 服务器发送到您的浏览器并存储在计算机硬盘驱动器上的一小部分数据。Lenovo使用 Cookie 帮助提醒我们您是谁,并帮助您在访问期间浏览我们的网站。Cookie 使我们能够为您保存偏好设置和购物车内容,以便您不必每次访问时都要重新输入它们。

我们还使用 Cookie 和广告像素(一段代码)来确定相关的基于兴趣的广告以服务用户。为此,Lenovo可能会使用百度、360、神策数据、抖音、快手等公司托管的服务来帮助我们了解客户对我们网站和产品的使用;匹配有关我们的客户、我们的网站使用和社交媒体参与方面的某些数据;以及交付和管理基于兴趣的广告。这些服务可能会收集您的浏览器或通过 Cookie 发送的信息,如 IP 地址。Lenovo还会与我们的广告合作伙伴共享某些有限的(经常是散列的)信息,以便对方可以向Lenovo提供这些服务。

此外,Cookie、像素 和相关技术允许我们:测量网站趋势和流量模式,例如您访问过的Lenovo网站区域和您从哪个网站跳转到此处;简化网站导航;帮助设计我们的网站,以提高网站的使用效率和乐趣;提出产品建议;以及在用户浏览网站(包括非联想网站)时发布Lenovo产品广告。Lenovo及其服务提供商(包括 Google 和 DoubleClick)使用 Cookie 报告您的广告印象、广告服务的其他用途以及与这些广告印象和广告服务的互动与我们网站的访问情况有何关联。如果您不想将此信息用于为您提供基于兴趣的广告,您可以按以下步骤选择退出。您可能会继续收到普通广告。Lenovo还可能会使用从其他来源(包括第三方)获得的信息来补充通过 Cookie 和相关技术收集的信息。

这类 Cookie 的使用是相对标准化的设置,而大多数浏览器的初始设置都接受此类 Cookie。但是,如果您不想存储 Cookie,您可以选择:
• 不使用我们的网站
• 将浏览器设置为在收到 Cookie 时通知您
• 将浏览器设置为拒绝接受 Cookie
• 利用Lenovo网站提供的 Cookie 同意和控制选项(如果可用且适用法律要求)
• 在访问我们的网站后删除 Cookie
• 使用浏览器的匿名使用设置(例如,在 Chrome 中称为 “Incognito”,在 Edge 中称为 “InPrivate”,在 Firefox 和 Safari 浏览器中称为 “Private Browsing”)来浏览我们的网站。

但是,请注意,某些Lenovo网站可能不会响应某些浏览器发出的“不要跟踪”信号。您还应了解,如果您不接受 Cookie,Lenovo网站的一些功能可能无法正常运行。

如果您不知道如何控制或删除 Cookie,或者希望不要接收基于您的浏览历史记录的某些有针对性的广告,我们建议您访问 www.networkadvertising.org/choices/、www.aboutads.info 或 www.youronlinechoices.eu,了解详细的指导,包括选择退出说明。

本地存储对象

此外,一些Lenovo网站体验可能使用Lenovo服务提供商和合作伙伴提供的本地存储对象 (LSO)(例如 HTML5)在您的设备上存储内容信息和偏好设置。各种浏览器可能会提供自己的管理工具来删除 HTML5 LSO。

网络信标和其他技术

一些Lenovo网站还使用网络信标或 JavaScript 等其他技术来更好地定制这些网站,以提供更好的客户服务。这些技术可能会在Lenovo网站的多个页面上使用。访客访问这些页面时,将会生成一条不可识别身份的访问通知。我们或我们的服务提供商可能会处理该访问通知。这些网络信标通常与 Cookie 结合工作。如果您关闭 Cookie,网络信标和其他技术仍然会检测对这些页面的访问,但它们生成的通知不能与其他不可识别身份的 Cookie 信息关联,因而会被忽略。

个性化 URL 链接

我们有时可能会针对某些访客个性化和定制网站。如果您访问这些网站,您会发现它们是经过定制的,它们含有我们基于您以前与Lenovo的互动以及您提供给我们的信息认为您可能感兴趣的产品及/或服务的参考。在您访问这些网站时,我们可能会收集关于您的访问的信息,以更好地按您的兴趣定制站点。访问这些网站的邀请的显示形式有电子邮件中的个性化 URL、网站注册页面上的通知或者您登录到某个网站时的响应。

Lenovo是否会出售我的个人信息?

不会。Lenovo不会出售个人信息。如上节所述,Lenovo可能会与联想的第三方服务提供商和合作伙伴分享个人信息,以便他们支持我们的产品和网站,或向Lenovo及其客户和产品用户提供其他服务。在分享信息时,Lenovo会采取适当步骤来确保这些服务提供商和合作伙伴符合我们严格的隐私和安全标准。但是,Lenovo不会出售个人信息;在 2022 年 2 月 1 日之前的 12 个月内,我们没有出售过任何个人信息。如果Lenovo在任何时候决定出售个人信息,我们将根据适用法律的要求提供适当的事先通知并获取相关方的同意。

Lenovo会跨国转移我的个人信息吗?

联想是一个全球性组织,其法律实体、业务流程、管理结构和技术系统遍布全球。因此,在法律允许的情况下,我们可能会在联想内部(包括子公司、附属公司和母公司)或者与我们的服务提供商和业务合作伙伴分享您的个人信息,并且可能会将信息转移到我们开展业务的国家或地区(包括但不限于美国和中国)。无论您的信息被转移到哪里和存放在哪里,我们的隐私和安全做法旨在为您的个人信息提供全球性保护。

一些国家或地区的隐私法律与您所在国家或地区的隐私法律并不对等,这些司法管辖区的执法机构可能会要求提供您的数据。在这些国家或地区中,联想将仍然以我们在这里描述的方式处理信息,并且在转移和处理您的信息时,将采取为遵守适用的数据保护法律而必要的措施。必要时,联想还将在联想集团公司之间或者与联想合作伙伴或服务提供商签订协议,以管控个人信息的转移、处理和保护。

联想使用标准合同条款作为一种手段,帮助实现来自欧盟、欧洲经济区、英国及该地区内部之间的个人信息传输。

我的个人信息会保留多久?

Lenovo将只在业务或其他令人信服的目的所必需的期限内保留信息,包括个人信息;在满足这些使用目的时将会安全地删除个人信息。只要符合以下任何情况,我们将保留您的信息,包括个人信息:

• 您的帐户或订阅处于活动状态
• 为您提供您可能已经请求的服务或支持
• 确保Lenovo产品和网站的必要功能和性能,包括我们的产品保修条款规定的责任
• 遵守适用法律,包括税务和审计目的
• 行使我们的权利,包括诉讼和债务催收

如何保护我的信息?

在我们将信息从我们的网站传输到我们的服务器时、在我们储存数据时以及在我们与第三方分享信息时,我们使用标准的技术和组织措施。例如,在传输敏感信息时,我们使用数据加密来保护您信息的安全。在与第三方分享您的信息时,我们采取合理恰当的步骤确保第三方将负责任地保护和使用您的信息。

但是,请记住,没有任何网站、服务或数据传输可以保证 100% 安全。因此,虽然我们采取了适当的步骤来保护您的产品和信息,但是Lenovo不能确保或以其他方式担保我们的网站或者您提供给我们的任何信息的安全。使用我们的网站,风险自担。

如何保护我孩子的隐私?

我们的网站面向成年人以及使用网站得到家长或法定监护人允许的未成年人。Lenovo不会主动收集未成年人的信息。Lenovo鼓励家长主动监督未成年子女使用互动资源并告知他们提供关于自己信息的潜在危险。

我的数据保护权利有哪些?

适用的数据保护法律可能会赋予您控制我们使用和处理您的个人信息的权利。该等权利可能包括:(i) 要求访问和复印您的个人信息,(ii) 要求更正或清除您的个人信息;(iii) 反对处理您的个人信息;(iv) 限制处理您的个人信息或选择不允许出售您的个人信息;以及 (v) 数据可携性。在我们征得您同意而使用您的个人信息的情况下,您有权随时撤销您的同意,但这并不影响我们在您撤销您的同意之前使用您的个人信息。此外,如果您具有Lenovo帐户,则可以通过该账户查看、更正或删除某些个人信息。

要行使上述权利,请联系我们。我们将根据适用的数据保护法律对任何此类请求进行审查、做出响应及采取行动。

请注意,我们将根据适用法律以及我们的隐私和安全标准采取措施验证您的身份,然后再授权您访问您的个人信息或以其他方式配合您的请求。如果您具有Lenovo帐户,我们可能会要求您登录您的帐户,以此来验证您的身份。如果您没有Lenovo帐户或者我们没有将您的电子邮箱地址存档,我们可能会请求您提供其他有限信息以验证您的身份。请注意,如果您没有Lenovo帐户或没有电子邮箱地址存档,或者我们无法在我们的记录中验证您的身份,我们可能会拒绝您的请求。

您也可以使用授权代理代表您提交本部分中说明的请求。如果您选择让授权代理代表您提交此类请求,Lenovo需要:(i) 您向授权代理提供允许其代表您提交此类请求的书面许可;(ii) 您的代理直接向Lenovo验证其身份。Lenovo可能会拒绝不符合这些要求的代理提交的请求。

此外,您还有权随时向相关的国家/地区数据保护当局提出问题或投诉。

如何联系Lenovo隐私计划部门?

若您要行使上述权利,或者对本隐私声明有其他疑问,可通过 privacy@lenovo.com 联系Lenovo,或将问题邮寄到以下地址:

北京市海淀区西北旺东路10号院联想总部西区 法务部 100094

其他Lenovo客户服务信息,包括电话和聊天联系,可在 www.lenovo.com/contact 上找到。

我们的网站隐私声明(见下文)最近进行了更新。查看以前的版本

联想帐号用户注册协议

欢迎您申请注册联想帐号!如果您希望成功注册联想帐号,成为联想会员,您应当认真阅读并完全同意:

(1) 联想网站底端的“使用条款”;

(2) 联想网站底端的“隐私权政策”;

(3) 本协议项下的全部条款并按照提示完成全部的注册程序;和

(4) 您必须达到适用法律规定的具备法定行为能力的年龄;如果您不具备法定行为能力的年龄,须由您的父母或法定监护人为您完成注册并事先同意您使用本协议所提到的任何一项服务。

本协议构成您与联想(北京)有限公司(包括其关联机构,以下合称为“联想”)就您与联想之间对联想帐号的权利和义务达成的协议。如果您不接受本注册协议,您无法获取并使用联想帐号。

完成注册后,您将获得一个联想帐号和密码,但这并不意味着您可以享受联想帐号下的联想提供的所有网络服务。您还须依照联想的要求与联想就每项网络服务另行达成协议后,方可依照协议约定使用该项服务。

以下行为表明您已经完全了解并接受了本协议及本协议第3条所述的各网络服务条款和条件:您(a)点击“我同意”或“我接受”等按钮表明您确认同意或接受该等协议的在线版本;(b)您在线下与我们签署了该等协议的纸质版本;或(c)您实际使用了任何一项或多项网络服务。

1 、定义

1.1 联想帐号:指您通过注册用以登陆并使用联想为您提供的各项服务的符号,亦称为“用户名”。

1.2 网络服务:指联想依照相关法律法规的规定及本协议的约定通过互联网向您提供的服务。

1.3 关联机构:是指被一方控制、或控制该方、或与该方受共同控制的机构。这里“机构”指任何公司、企业或其他法律实体。在本协议中,“控制”是指直接或间接地拥有影响所提及机构管理的能力,无论是通过所有权、有投票权的股份、合同或其他方式。

2 、联想帐号的注册与保管

2.1 您申请注册联想帐号时,必须向联想提供真实且准确的个人资料或企业信息,并于个人资料或企业信息发生任何变动时及时更新。您在注册过程中输入的姓名、企业名称和证件号码将作为识别您与联想帐号的一致性的首要证明资料。在您无法有效证明身份时,联想有权拒绝向您提供任何服务或承担任何义务。

2.2 您注册的联想帐号应当遵守以下规则: 2.2.1 不得以党和国家领导人或其他社会名人的真实姓名、字号、艺名、笔名注册; 2.2.2 不得以国家机构或其他机构的名称或其简称或商标、商号注册; 2.2.3 不得注册不文明、不健康名字,或包含歧视、侮辱、猥亵类词语的名字; 2.2.4 不得注册易产生歧义、引起他人误解的名字。 如果您注册的联想帐号违反了任何上述规则,或联想收到任何第三方对您注册的联想帐号发出的权利声明或异议,联想有权在不事先通知您的情况下拒绝您的注册或者删除您已经注册的联想帐号。

2.3 您注册时登记的联想帐号和密码是您会员身份的唯一有效识别信息。您有义务对您的联想帐号和密码进行妥善保管。您不得将您的联想帐号、密码给予他人使用,其形式包括但不限于出借、转让、许可使用。您理解,在任何情况下,联想并无核查每一联想帐号使用合法性的义务,因此,如果您发现您的联想帐号受到他人非法使用时,应当立即通知联想。由于您疏于保管或黑客行为等原因造成的联想帐号、密码丢失,或联想帐号、密码被盗用及由此产生的相应损失,联想均不承担责任。

2.4 如您不愿再使用联想为您提供的全部服务,可以申请注销您的注册。注销后,您不再享有使用联想服务的任何权利。如联想发现您有违反本协议条款的情况,有权不予通知您而立即注销您的注册;如果您注册的联想帐号在任何连续180自然日内未实际使用,则联想有权在单方通知您后,删除该帐号并终止为您提供相关的网络服务。

2.5 您应当对以您的联想帐号发生的所有活动和事件承担全部法律责任。

3 、网络服务条款

3.1 服务 3.1.1 您理解,您完成注册并成为联想会员并不意味着您能够使用联想提供的全部网络服务。就具体网络服务需要您与联想就该网络服务签署相关的协议并履行联想要求的义务及相应的程序后方可依照协议约定使用。因此,联想基于您的联想帐号为您提供的网络服务内容由您与联想另行签署的相关协议决定。 3.1.2 联想有权根据实际情况决定、变更、改进及调整提供网络服务的内容,联想对其所提供之服务拥有最终解释权。 3.1.3 您理解,联想仅提供本协议约定的网络服务,除此之外与相关网络服务有关的设备(如个人电脑、手机、及其他与接入互联网或移动网有关的装置)及所需的费用(如为接入互联网而支付的电话费及上网费、为使用移动网而支付的手机费)均应由您自行负担。 3.1.4 联想可能或今后可能就其提供的部分网络服务收费,您应当为使用该等收费网络服务向联想支付一定的费用。对于收费的网络服务,联想会在您使用之前给予您明确的提示,只有您根据提示确认接受联想付费会员注册条款并支付相关费用后,方有权使用该等收费网络服务。在您全额支付相关费用之前联想有权拒绝向您提供该等收费网络服务。 3.1.5 您无争议地同意,联想有权随时变更、中断或终止部分或全部的网络服务(包括收费网络服务)。在该等情况下,联想将及时通知您。 3.1.6 您理解,联想需要定期或不定期地对提供网络服务的平台或相关的设备进行检修或者维护。如因此类情况而造成网络服务在合理时间内的中断,联想无需为此承担任何责任。联想将在条件允许的情况下,尽可能事先以适当的方式通知您,但前述通知并非联想必须履行的义务。 3.1.7 为您使用之便利,联想可能提供链接到由第三方拥有或经营的但非本服务范围的互联网站;您一旦进入第三方网站,需了解并同意其使用规则。联想对该等网站提供的任何服务或信息不承担责任。

3.2 使用规则 3.2.1 您在使用联想网络服务过程中,必须遵循以下规则: (a)遵守中国有关的法律、法规和规范性文件; (b)遵守所有与网络服务有关的网络协议、规定和程序; (c)不得为任何非法目的而使用网络服务系统; (d)不得利用联想网络服务系统进行任何可能对互联网或移动网正常运转造成不利影响的任何行为,包括但不限于不得传播或张贴垃圾邮件、不合理巨大文件、传销模式、连锁邮件; (e)不得利用联想提供的网络服务,上传、储存、展示或传播任何非法的、虚假的、辱骂性的、骚扰性的、诽谤性的或其他违反社会公德的信息资料; (f)不得从事任何侵犯其他任何第三方的专利权、著作权、商标权、名誉权、隐私权或其他任何合法权益的行为; (g)不得利用联想网络服务系统进行任何不利于联想或危害计算机信息网络安全的行为; (h)未经联想事先的许可,不得利用联想网络服务系统进行商业广告行为; (i)如发现任何非法使用或企图非法使用联想帐号或联想帐号出现或可能出现安全漏洞的情况,应立即通知联想。 3.2.2 您无争议的同意,针对联想提供的网络服务,联想有权随时通过各种方式(包括但不限于网页公告、电子邮件、短信提醒等)做出任何相关的声明、通知、警示。该等声明、通知、警示的内容视为本协议的一部分,如您在联想做出该等声明、通知、警示后使用该等网络服务,视为您完全同意该等声明、通知、警示的内容。 3.2.3 在下列情形下,联想有权随时中断或终止向您提供本协议项下的网络服务(包括收费的网络服务)而无需对您或任何第三方承担任何责任: (a) 您提供的个人资料不真实;或 (b) 您违反本协议中规定的使用规则。在此等情形下,联想亦有权要求您改正或自行更改/删除您发布的全部或部分信息、资料。 您理解并同意:在您或联想将资料、数据或信息从本社区中删除后,其痕迹可能残留并且其复本仍可能存在于服务器之内,但联想不对此承担任何责任。 3.2.4 联想不就下述事项向您做任何形式的担保或保证: (a) 网络服务一定能满足您的要求; (b) 网络服务的持续畅通,不中断; (c) 网络服务的及时性、安全性、准确性; (d) 您在通过网络服务下载的任何文件的兼容性、安全性、可用性及不侵权。

4 、知识产权

4.1 联想提供的网络服务中可能包括文本、图片、图形、图表、软件、音频和/或视频资料等均受著作权、商标和/或其它财产所有权法律的保护。

4.2 您只有获得相关权利人同意之后,才能依照相关权利人授权的范围使用上述资料。否则,您不得复制、发布、传播、修改、再创造上述资料,亦不得将上述资料用于其他任何商业目的。

4.3 您在使用联想帐号期间持续地保证: 4.3.1 任何由您提供给联想的资料、数据或信息将被视为非机密的。 4.3.2 您通过联想帐号发布的内容的合法性及安全性;对您发布内容的浏览、下载、使用等任何行为均不存在由于您的原因而遭受损害的可能性,包括但不限于侵权异议、感染病毒、遭到黑客攻击、系统瘫痪等; 4.3.3 您对通过联想帐号发布、传播的内容享有知识产权或已就相关行为获得相关权利人的授权,并对上述保证事项承担全部法律责任; 4.3.4 若因您违反上述保证而引起任何第三方对联想的索赔、交涉、诉讼,您应为联想抗辩,或在联想的要求下合作抗辩,保证联想利益不受损害,您应就因此而产生的所有损失承担全部责任。

5 、违约赔偿

您有义务保障和维护联想及其他用户的利益。如因您违反有关法律、法规、规范性文件的规定或本协议项下的任何条款而给联想或任何其他第三人造成损失,您同意承担由此造成的全部损害赔偿责任。

6 、责任限制

6.1 在任何情况下,无论您以何种依据(包括根本违约、过失、虚假陈述或其他合约或侵权方面的索赔)而有权要求联想赔偿损失,联想的责任仅限于实际直接损害或损失,且赔偿额最高为联想基于服务向您实际收取的费用总额。此限制也适用于任何联想分包商和供应商。这是联想及其分包商和供应商共同承担的最高赔偿限额。

6.2 在任何情况下,即使联想获通知有发生下列事项的可能性,联想均不对下列任何一项负责: 6.2.1 第三方就其损失或损害赔偿向您提起的索赔要求; 6.2.2 您的记录或数据的丢失或损毁;和 6.2.3 任何间接性的,偶然性的或附带性的损害或利润损失。

6.3 您所在的国家或地区的法律可能不允许以合同方式对某些责任进行排除或限制,则在法律禁止的最大范围内,上述某些责任限制或排除条款不适用于您。

7 、不可抗力

7.1 “不可抗力”是指本协议双方不能预见、不能避免并且不能克服的客观情况,其情形包括:火灾、地震、洪水、战争、罢工、网络堵塞或瘫痪、病毒、黑客攻击等。

7.2 遭受不可抗力事件的一方可暂行中止履行本协议项下的义务直至不可抗力事件的影响消除为止,并且无需为此而承担违约责任;但应尽最大努力克服该等事件,减轻其负面的影响。

8 、一般条款

8.1 协议修改 8.1.1 您同意,联想有权随时修改本协议的任何条款。您应经常访问本页面以了解当前的条款。 8.1.2 如您不同意联想对本协议相关条款所做的修改,应当立即停止使用您的帐号。如果您在联想对本协议相关条款做出修改后继续使用您的帐号登陆本社区,则视为您完全接受联想对本协议相关条款所做的全部修改。

8.2 通讯 8.2.1 您同意,本协议的签署及联想根据本协议向您提供的通知、披露等均可以电子方式进行。本协议项下联想通过网页公告、电子邮件、手机短信或常规的信件传送等方式向您发出的通知自联想发送之日视为已送达。 8.2.2 您对于联想的通知应当通过联想对外正式公布的通信地址、传真号码、电子邮件地址等联系信息向联想进行书面送达。

8.3 其他规定 8.3.1 本协议中的标题仅为方便而设,在解释本协议时应被忽略。 8.3.2 本协议构成双方对本协议之约定事项及其他有关事宜的完整协议,除本协议规定的之外,未赋予本协议各方其他权利。 8.3.3 如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,本协议的其余条款及该条款的其他部分仍应有效并且有约束力。 8.3.4 本协议按照中华人民共和国大陆地区(不包括香港和澳门特别行政区)的可适用法律订立和解释。因本协议执行、解释以及与此有关的一切争议和纠纷均应提交北京仲裁委员会裁决。

同意并继续
联想社区»论坛 Lenovo电脑 拯救者笔记本 Visual Studio Code 有哪些工程方面的亮点

[分享] Visual Studio Code 有哪些工程方面的亮点

发表于 2019-8-18 16:44   |   来自web社区
2011 0  

Visual Studio Code(VS Code)近年来获得了爆炸式增长,成为广大开发者工具库中的必备神器。它作为一个开源项目,也吸引了无数第三方开发者和终端用户,成为顶尖开源项目之一。它在功能上做到了够用,体验上做到了好用,更在拥有海量插件的情况下做到了简洁流畅,实属难能可贵。


我是VS Code用户,同时也为它开发插件,插件市场里的众多Java插件基本都是我们团队的作品,所以我在日常工作中观察到不少VS Code在工程方面的亮点,下面就来逐一探讨。

简洁而聚焦的产品定位,贯穿始终
你知道VS Code的开发团队人数只有二十出头吗?难以相信吧,大家都觉得VS Code无所不能,如此强大的工具那么几个人怎么做得出来。实际上功能丰富是个美好的错觉,因为大部分针对特定编程语言和技术的功能都是第三方插件提供的,VS Code的核心始终非常精简,这很考验产品团队的拿捏能力:做多了,臃肿,人手也不够;做少了,太弱,没人用。他们团队选择了专注于核心功能的开发,为用户提供简洁流畅的体验,并将该思路贯穿在产品开发的每个环节。在我看来,这就是第一个亮点。

第一个亮点同时也是一个难点,因为“简洁”说到底是产品的“形态”,更关键的其实是前置问题——产品的定位,它到底解决什么问题。该问题如果从用户的角度来看,可以转换为以下几个点——我们为什么需要一个新的工具?它到底是代码编辑器(Editor)还是集成开发环境(IDE)?



请看这张截图,它阐述了VS Code的定位:编辑器+代码理解+调试。这是一个非常节制而平衡的选择,专注于开发者“最常用”的功能,同时在产品的形式上力求简洁高效。从结果来看,这个定位是相当成功的。

在这个定位的指导下,这二十多位工程师搞出了VS Code。相对较小的功能集,使得开发者们能在代码质量上精益求精,最终用户们也得到了一个性能优异的工具,这是VS Code从一众编辑器中脱颖而出的重要原因。关于精益求精,大家可以参考这篇博文,它记录了VS Code重新实现Text Buffer的过程,同时也分享了思路历程。正因为产品定位以及团队职责上的高度节制,团队成员才能把时间花在这类问题上,写出经得起考验的代码。

与此同时,较小的团队也使得团队成员做到了行为层面的整齐划一,这点在社区互动上体现得尤为明显,大家可以去GitHub上看他们的Issues,超出产品定位范畴的请求和反馈基本都被婉拒或者转交到第三方插件项目,可以说是很专注了。

看到这里,似乎一切都好,但问题来了,码农千千万,你用Node我用Go,你搞前端我弄后台,VS Code如何满这些五花八门的需求呢?机智的你已经抢答了——海量插件。那么接下来我们来深究一下VS Code是如何经营一个庞大的插件生态的。

进程隔离的插件模型
通过插件来扩展功能的做法已经是司空见惯了,但如何保证插件和原生功能一样优秀呢?历史告诉我们:不能保证。大家可以参考Eclipse,插件模型可以说是做得非常彻底了,功能层面也是无所不能,但存在几个烦人的问题:不稳定、难用、慢,所以不少用户转投IntelliJ的怀抱。可谓成也插件,败也插件。问题的本质在于信息不对称,它导致不同团队写出来的代码,无论是思路还是质量,都不一致。最终,用户得到了一个又乱又卡的产品。所以要让插件在稳定性、速度和体验的层面都做到和原生功能统一,只能是一个美好的愿望。

来看看其他IDE是怎么做的,Visual Studio自己搞定所有功能,并且做到优秀,让别人无事可做,这也成就了其“宇宙第一IDE”的美名;IntelliJ与之相仿,开箱即用,插件可有可无。这么看起来,自己搞定所有的事情是个好办法,但大家是否知道,Visual Studio背后有上千人的工程团队,显然,这不是VS Code这二十几号人能搞定的。他们选择了让大家来做插件,那怎么解决Eclipse所遇到的问题呢?

这里分享一个小知识——Eclipse核心部分的开发者就是早期的VS Code团队。嗯,所以他们没有两次踏入同一条河流。与Eclipse不同,VS Code选择了把插件关进盒子里。

这样做首先解决的问题就是稳定性,这个问题对于VS Code来说尤为重要。都知道VS Code基于Electron,实质上是个node.js环境,单线程,任何代码崩了都是灾难性后果。所以VS Code干脆不信任任何人,把插件们放到单独的进程里,任你折腾,主程序妥妥的。




VS Code团队的这一决策不是没有原因的,正如前面提到的,团队里很多人其实是Eclipse的旧部,自然对Eclipse的插件模型有深入的思考。Eclipse的设计目标之一就是把组件化推向极致,所以很多核心功能都是用插件的形式来实现的。遗憾的是,Eclipse的插件运行在主进程中,任何插件性能不佳或者不稳定,都直接影响到Eclipse,最终结果是大家抱怨Eclipse臃肿、慢、不稳定。VS Code基于进程做到了物理级别的隔离,成功解决了该问题。实际上进程级别的隔离也带出了另一个话题,那就是界面与业务逻辑的隔离。

UI 渲染与业务逻辑隔离,一致的用户体验
“不稳定”之后的问题是“难用”,具体来说就是混乱的界面和流程,究其原因就是插件之间的界面语言的“不一致”,它导致学习曲线异常陡峭,并且在面临问题时没有统一的解决路径。VS Code的做法是根本不给插件们“发明”新界面的机会。

如上图,插件们被关在Extension Host进程里,而UI则在主进程里,所以插件们天然没法直接在用户界面上做手脚。VS Code统管所有用户交互入口,制定交互的标准,所有用户的操作被转化为各种请求发送给插件,插件能做的就是响应这些请求,专注于业务逻辑。但从始至终,插件都不能“决定”或者“影响”界面元素如何被渲染(颜色、字体等,一概不行),至于弹对话框什么的,就更是天方夜谭了。

VS Code对于用户界面的把控可以说是谨慎到变态,做过插件的人都懂的,感兴趣的同学可以去深挖一下TreeView的历史,会有更直观的体会。乍一看,第三方开发者被卡得死死的,这样不是限制了大家的创造力吗?我想说这个做法跟这个团队的背景密切相关,换一拨人很有可能会失败。他们之所以能成功,是因为该团队在开发工具领域深耕多年,他们把经验转换为观点,最终落实到了VS Code的界面元素以及交互语言上,从结果来看,广受欢迎。

界面和业务逻辑的彻底隔离,使得所有插件有了一致的行为,用户就得到了整齐划一的体验。不仅如此,这种接口和行为层面的一致性,最终转化成了另一个“伟大”的功能——Remote Development,我们稍后讨论。接下来我们要聊的是VS Code另一个创举——Language Server Protocol。

LSP —— 基于文本的协议
前文提到了VS Code定位中的两个特色:代码理解和调试,绝大部分都由第三方插件来实现,中间的桥梁就是两大协议——Language Server Protocol(LSP)和Debug Adapter Protocol(DAP)。两者从设计的角度来看高度相似,我们着重看一下最火的LSP。首先,为什么需要LSP?

全栈开发早已成为这个时代的主流,软件从业者们也越来越不被某个特定的语言或者技术所局限,这也对我们手里的金刚钻提出了新的挑战。举个栗子,我用TypeScript和node.js做前端,同时用Java写后台,偶尔也用Python做一些数据分析,那么我很有可能需要若干工具的组合,这样做的问题就在于需要在工具间频繁切换,无论从系统资源消耗和用户体验的角度来看,都是低效的。

那么有没有一种工具能在同一个工作区里把三个语言都搞定呢?没错,就是VS Code——支持多语言的开发环境,而多语言支持的基础就是Language Server Protocol(LSP)。该协议在短短几年内取得了空前的成功,到目前为止,已经有来自微软等大厂以及社区的一百个实现,基本覆盖了所有主流编程语言。同时,它也被其他开发工具所采纳,比如Atom、Vim、Sublime、Emacs、Visual Studio和Eclipse,从另一个角度证明了它的优秀。更难能可贵的是,该协议还做到了轻量和快速,可以说是VS Code的杀手级特性了,同时也是微软最重要的IP之一。。。哇塞,又强大又轻巧,怎么看都是个骗局啊,那我们就来看看它到底怎么做到的。

先划重点:1、节制的设计 2、合理的抽象 2、周全的细节。

先来说说设计(Design),大而全是很常见的问题。如果让我来设计这么一个用来支持所有编程语言的东西,第一反应很可能是搞个涵盖所有语言特性的超集。微软就有过这样的尝试,比如Roslyn——一个语言中立的编译器,C#和VB.NET的编译器都是基于它做的。大家都知道C#在语言特性层面是非常丰富的,Roslyn能撑起C#足以说明它的强大。那么问题来了,为啥它没有在社区得到广泛应用呢?我想根本原因是“强大”所带来的副作用:复杂、主观(Opinionated)。光是语法树就已经很复杂了,其他各种特性以及他们之间的关系更是让人望而却步,这样一个庞然大物,普通开发者是不会轻易去碰的。

相较之下,LSP显然把小巧作为设计目标之一,它选择做最小子集,贯彻了团队一贯节制的作风。它关心的是用户在编辑代码时最经常处理的物理实体(比如文件、目录)和状态(光标位置)。它根本没有试图去理解语言的特性,编译也不是它所关心的问题,所以自然不会涉及语法树一类的复杂概念。它也不是一步到位的,而是随着VS Code功能的迭代而逐步发展的。所以它自诞生至今依然保持着小巧的身材,易懂,实现门槛也很低,迅速在社区得到了广泛的支持,各种语言的Language Server(LS)遍地开花。

小归小,功能可不能少,所以抽象就非常关键了。LSP最重要的概念是动作和位置,LSP的大部分请求都是在表达”在指定位置执行规定动作“。举个栗子,用户把鼠标悬停在某个类名上方,查看相关的定义和文档。这时VS Code会发送一个'textDocument/hover'请求给LS,这个请求里最关键的信息就是当前的文档和光标的位置。LS收到请求之后,经过一系列内部计算(识别出光标位置所对应的符号,并找出相关文档),找出相关的信息,然后发回给VS Code显示给用户看。这样一来一回的交互,在LSP里被抽象成请求(Request)和回复(Response),LSP同时也规定了它们的规格(Schema)。在开发者看来,概念非常少,交互形式也很简单,实现起来非常轻松。

看到这里,大家应该对LSP有了更进一步的理解,它本质上是胶水,把VS Code和各种语言的LS粘在一起。但它不是普通的胶水,而是非常有品位的胶水,这品位就体现在细节上。

首先这是一个基于文本的协议,文本降低了理解和调试的难度。参考HTTP和REST的成功,很难想象如果这是一个二进制协议会是什么局面,甚至同样是文本协议的SOAP也早已作古,足以说明“简单”在打造开发者生态里的重要性。

其次这是一个基于JSON的协议,JSON可以说是最易读的结构化数据格式了,大家看看各个代码仓库里的配置文件都是啥格式就知道这是个多么正确的决定了,现在还有人在新项目里用XML吗?又一次——“简单”。

再次,这是一个基于JSONRPC的协议,由于JSON的流行,各大语言都对它有极好的支持,所以开发者根本不需要处理序列化、反序列化一类的问题,这是实现层面的“简单”。

从这些细节可以看出,VS Code团队对当今技术趋势的把握是相当精准的,他们决策充分考虑到了“简单”,牢牢抓住了社区开发者的心。所以重要的事情说三遍:

在做设计的时候一定要倾




VSCRD从本质上改善了远程开发的体验,与常用的远程桌面共享相比,具体改进如下:

响应迅速:VSCRD所有的交互都在本地UI内完成,响应迅速;远程桌面由于传输的是截屏画面,数据往返延迟很大,卡顿是常态

沿用本地设置:VSCRD的UI运行在本地,遵从所有本地设置,所以你依然可以使用自己所习惯的快捷键、布局、字体,避免了工作效率层面的开销

数据传输开销小:远程桌面传输的是视频数据,而VS Code传输是操作请求和响应,开销与命令行相仿,卡顿的情况进一步改善

第三方插件可用:在远程工作区里,不仅VS Code的原生功能可用,所有第三方插件的功能依然可用;远程桌面的话,你得自己一个个装好

远程文件系统可用:远程文件系统被完整映射到本地,这个两者差不多

那么VSCRD做了什么神奇的操作能够实现以上效果呢?来看看它的架构图:



其实答案都在前文有所提及:

进程级别隔离的插件模型
Extension Host(也就是图中的VS Code Server)与主程序做到了物理级别的分离,那么把Extension Host在远程或者本地跑没有本质的区别

UI渲染与插件逻辑隔离,整齐划一的插件行为
所有的插件的UI都由VS Code统一渲染,所以插件里面只有纯业务逻辑,行为高度统一,跑在哪里都没区别

高效的协议LSP
VS Code的两大协议LSP、DAP都非常精简,天然适合网络延迟高的情况,用在远程开发上再适合不过

VS Code团队在架构上的决策无疑是非常有前瞻性的,与此同时,他们对细节的把握也是无可挑剔。正因为有了如此扎实的工程基础,VSCRD这样的功能才得以诞生,所以我认为这是集大成的作品。

还没有尝试过VSCRD的同学,这里再安利一下,它在以下场景中非常有用:

开发环境配置起来很繁琐,比如物联网开发,需要自己安装和配置各种工具和插件。在VSCRD里,一个远程工作区的模板即可搞定,如需安装额外的工具,也就是改改Dockerfile的事情,非常简单。在这里可以找到常用的编程语言和场景的模板。

https://github.com/microsoft/vscode-dev-containers/tree/master/containers

本地机器太弱,某些开发搞不了,比如机器学习,海量数据及和计算需求需要非常好的机器。在VSCRD里,可以直接操作远程文件系统,使用远程计算资源。

最后
VS Code像一颗耀眼的星星,吸引着成千上万开发者为其添砖加瓦。从VS Code的成功中,我们看到了好的设计和工程实践能创造多少奇迹。放眼软件产业,各个层面的模式不断被刷新,让人激动之余,也要求从业者不断提高技能水平。从个人学习的角度来看,了解这些模式诞生的前因后果,理解工程实践中的决策过程是非常有利于提高工程能力的。


LV3

卢博凯

主题

7

回复

37

积分

35