ycloud

ycloud 查看完整档案

深圳编辑深圳大学  |  工商管理 编辑  |  填写所在公司/组织 share.la 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 该用户太懒什么也没留下

个人动态

ycloud 关注了标签 · 11月17日

golang

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言。

七牛云存储CEO许式伟出版《Go语言编程
go语言翻译项目 http://code.google.com/p/gola...
《go编程导读》 http://code.google.com/p/ac-m...
golang的官方文档 http://golang.org/doc/docs.html
golang windows上安装 http://code.google.com/p/gomi...

关注 26002

ycloud 赞了回答 · 10月20日

解决准备更换git托管,如何迁移原git仓库

如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作。

1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub。

git clone --bare git://github.com/username/project.git

2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。

3). 以镜像推送的方式上传代码到 GitCafe 服务器上。

cd project.git

git push --mirror git@gitcafe.com/username/newproject.git

4). 删除本地代码

cd ..

rm -rf project.git

5). 到新服务器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。

git clone git@gitcafe.com/username/newproject.git

这种方式可以保留原版本库中的所有内容。

关注 11 回答 7

ycloud 关注了标签 · 6月17日

uni-app

uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台。

关注 84

ycloud 赞了文章 · 6月11日

修复一个因为 scrollbar 占据空间导致的 bug

背景

这一个因为滚动条占据空间引起的bug, 查了一下资料, 最后也解决了,顺便研究一下这个属性, 做一下总结,分享给大家看看。

正文

昨天, 测试提了个问题, 现象是一个输入框的聚焦提示偏了, 让我修一下, 如下图:

image.png

起初认为是红框提示位置不对, 就去找代码看:

<Input
  // ...
  onFocus={() => setFocusedInputName('guidePrice')}
  onBlur={() => setFocusedInputName('')}
/>

<Table
  data-focused-column={focusedInputName}
  // ...
/>

代码上没有什么问题, 不是手动设置的,而且, 在我和另一个同事, 还有PM的PC上都是OK的:

image.png

初步判断是,红框位置结算有差异, 差异大小大概是17px, 但是这个差异是怎么产生的呢?

就去测试小哥的PC上看, 注意到一个细节, 在我PC上, 滚动条是悬浮的: image.png

在他PC上, 滚动条是占空间的:

image.png

在他电脑上, 手动把原本的 overscroll-y: scroll 改成 overscroll-y: overlay 问题就结局了。

由此判定是: 滚动条占据空间 引起的bug。

overscroll-y: overlay

CSS属性 overflow, 定义当一个元素的内容太大而无法适应块级格式化上下文的时候该做什么。它是 overflow-x 和overflow-y的 简写属性 。
/* 默认值。内容不会被修剪,会呈现在元素框之外 */
overflow: visible;

/* 内容会被修剪,并且其余内容不可见 */
overflow: hidden;

/* 内容会被修剪,浏览器会显示滚动条以便查看其余内容 */
overflow: scroll;

/* 由浏览器定夺,如果内容被修剪,就会显示滚动条 */
overflow: auto;

/* 规定从父元素继承overflow属性的值 */
overflow: inherit;

官方描述:

overlay  行为与 auto 相同,但滚动条绘制在内容之上而不是占用空间。 仅在基于 WebKit(例如,Safari)和基于Blink的(例如,ChromeOpera)浏览器中受支持。

表现:

html {
  overflow-y: overlay;
}

兼容性

没有在caniuse上找到这个属性的兼容性, 也有人提这个问题:

image.png

问题场景以及解决办法

1. 外部容器的滚动条

这里的外部容器指的是html, 直接加在最外层:

html {
  overflow-y: scroll;
}

手动加上这个特性, 不论什么时候都有滚动宽度占据空间。

缺点: 没有滚动的时候也会有个滚动条, 不太美观。

优点: 方便, 没有兼容性的问题。

2. 外部容器绝对定位法

用绝对定位,保证了body的宽度一直保持完整空间:

html {
  overflow-y: scroll; // 兼容ie8,不支持:root, vw
}

:root {
  overflow-y: auto;
  overflow-x: hidden;
}

:root body {
  position: absolute;
}

body {
  width: 100vw;
  overflow: hidden;
}

3. 内部容器做兼容


.wrapper {
    overflow-y: scroll; // fallback
    overflow-y: overlay;
}

总结

个人推荐还是用 overlay, 然后使用scroll 做为兜底。

内容就这么多, 希望对大家有所启发。

文章如有错误, 请在留言区指正, 谢谢。

参考资料

  1. https://developer.mozilla.org...
  2. https://github.com/Fyrd/caniu...
查看原文

赞 10 收藏 5 评论 0

ycloud 收藏了文章 · 3月25日

应对突发需求,如何借助Serverless快速上云?

当突发事件来临时,当绝佳idea闪现时,如何快速搞定开发和部署,使之变身为产品?快,则应万变!Serverless 是当今炙手可热的技术,被认为是云计算发展的未来方向,如何利用Serverless Framework 实现快速上云?本文是王俊杰老师在「云加社区沙龙online」的分享整理,详细阐述了Serverless上云的基本思路、框架原理、组件架构等,带大家揭开Serverless的神秘面纱。

应对突发需求,如何借助Serverless快速上云?_腾讯视频​

一、Serverless上云基本概念

感谢云加社区组织这次“技术应变力”的线上专题活动,并邀请我来进行分享,我将从Serverless的角度来进行解读。Serverless是最近非常热门的词,中文翻译为“无服务器”。有人认为既然是无服务器,就意味着不再需要运维,完全是按需付费的模式...... 其实这些理解都比较片面,描述的都只是Serverless的某个方面。

从2014~2020年,这几年Serverless关键词的谷歌搜索指数与日攀升,现在已经成为了非常火爆的技术名词。其实早在2006年就有人提出Pay as you go的概念,需要多少就买多少,但直到2012年,Serverless首次被提出。2014~2016年,大型云厂商纷纷发布函数计算相关的产品支撑这样一个无服务器技术。

腾讯也加入进来,2017年推出SCF云函数的FaaS平台,并基于此FaaS平台,在2018年发布了微信小程序云开发的Serverless产品,在2019年腾讯云重磅推出——Serverless Framework。

1. 算力、算法、数据


那到底什么是Serverless呢?谈到 Serverless ,很多人都自然而然想到FaaS+BaaS,那FaaS又是什么?当我们回答这个问题的时候,我们先回顾几个计算机领域内的基础概念。

在计算机应用技术发展过程当中主要三个影响因素是:算力、算法、数据。比如 AlphaGo战胜了人类,就是算力、算法、数据三个因素上都有了提升的表现。算法是从目标到求解的过程,往往是一个数学模型或者计算方法。

而说到云计算,主要解决的还是算力问题,算力的发展主要是两个方面:

第一是让计算的能力更强,让CPU或者GPU运行更快。从CPU的天梯图可以看到历代CPU都在不断的刷新着计算速度的极限。

第二是算力的另一个发展的方向,如何更加合理的分配算力。传统计算机,从单任务实时操作系统到多任务分时操作系统,是解决算力的分配问题,云计算诞生的初衷和解决的问题,依然是算力分配的问题。建立一个Cloud,一个超级规模的计算机集群,按需提供给不同的客户使用,更加合理的分配计算资源。

最早的时候没有云计算的“裸金属”时代,需要大家自己建机房,是非常非常麻烦的事情,不要觉得准备一间房子,买一些机器安装就可以了。包括水、电、消防这些东西都是需要考虑进来的。

云计算提供了虚拟化的解决方案,在IaaS时代需要投入的成本就低了一些,可以直接购买和运维虚拟机。然后是PaaS时代,可以不关注机器直接使用平台服务,现在已经到了FaaS时代。随着云计算的发展,需要投入的人力和资金成本开始变得越来越少了,根本原因就是云厂商已经帮客户搞定了越来越多东西。

2. Serverless 与 FaaS


刚才讲到了云计算让算力的分配的更加合理,更加合理的表现之一,就是算力的分配颗粒度,越来越小。

IaaS时代,计算资源分配的粒度还是虚拟机,解决裸金属和虚拟化的问题,在这之上的操作系统、应用平台都需要自己搭建和运维。到了PaaS时代,减少了对于操作系统和应用平台/环境的关注,用户只需要关注应用层实现,因此分配资源的粒度变成了应用。

到了Serverless 和 FaaS 的时代,计算资源分配的粒度进一步变小,是以一个个函数Funcition(业务逻辑执行)为粒度进行分配的。

说到头来,FaaS 就是一个以业务代码的执行为粒度的“算力”的分配粒度。它不是以代码为粒度,不是以虚拟机为粒度,也不是以容器为粒度,而是以函数为粒度。

那么 Serverless 和 FaaS 又有什么关系呢?这里引用伯克利的学术观点:Serverless computing 就是FaaS+BaaS。

这不是一个定义,但是却是实现Serverless一个具体方法。Serverless真正的含义又是什么呢?在这篇论文最核心的摘要部分,对Serverless的概念做了一个说明。翻译成中文就是:无服务器云计算,它几乎封装了所有底层资源管理和系统运维工作,使开发者更容易使用云基础设施

它提供了一个方式,极大简化了基于云服务的编程,犹如汇编语言到高级语言编的转换。

这一句比喻是点睛之笔。大家都知道学计算机技术绕不开汇编语言,你需要内存结构是什么样子,操作文件和内存都需要接触内存地址这些概念。对于高级语言说白了,不需要你关注计算机的底层到底是什么,只需关注自身的业务,比如它们会把你的业务抽象成不同的模块,抽象成一个个对象和类......

把这一套搬到云计算层面上来,Serverless同样也不需要你去了解云的底层是怎么一回事,只要把精力完全专注于你的业务就可以了,这就是Serverless的内涵,它的本质是对底层资源的封装和操作。

3. 原型到产品的衍变步骤


什么是专注于业务逻辑?这里举个例子说明,当你有一个很好的 idea 想做产品的时候,实际上是有一个鸿沟的。

从一个idea或是一个原型,怎么才能做到是一个真正的产品呢?一般我们认为原型到产品,中间有三步要走:

第一步是业务逻辑,包括业务流程、界面、交互、数据存储等。主要就是做各种功能和流程,但是把这些功能做完了,就得到了一个原型,还不能称之为产品。

第二步是产品化。速度快不快?性能是不是可用?可靠性怎么样?会不会经常卡死?可扩展性怎么样?是否支持水平扩容?这里面还有很多需要考虑的技术维度。

第三步:产品上线的运维。资源的负载情况如何?错误率有没有监控?系统的日志如何切分和流转?有突发情况需要扩容时怎么办?针对业务的运营工作也是必须的。

第一部分是大部分工程师每天在做的事情,业务功能、流程逻辑,展现、交互、数据,利用现有各种各样的前端的、后端的框架,加上工程师的创造力,能把这块支撑的很好。

第二部分主要是架构工作。业务功能背后的架构相对就要复杂很多,很多系统性问题都需要在架构的层面考虑和解决。比如说服务业务架构是否足够健壮?模块间的依赖是否合理?是不是可方便调试的?日志和异常是否统一处理,出错了如何快速定位问题?代码和模块是不是可以复用?新人来了以后能不能快速接手?系统的性能、安全性、扩展性、可理解性、可靠性都是需要在架构层面上解决。

第三部分运维工作同样也是一项复杂的工作。就拿扩容来说就是一件麻烦的事情,扩容最大的难题是是不知道什么时候该扩容,除非能准确的对未来的容量进行估计,才会从容很多。

但是一个产品的用户增长曲线,往往是难以准确估算的,尤其是你的idea特别好,在短时间内迅速火起来的时候。比如2019年出现了某款非常火爆的应用,能够给视频实现AI换脸的功能。一经上线迅速在大江南北实现全网火爆 —— 但当天晚上就打不开了,因为容量的问题。另外,在互联网+的大背景下,现在很多传统行业应用都想要上云。

上云这两个字说起来简单,但是实际上云会涉及到云计算方面各个层面的技术储配,一些新的开发、部署和运维方式。整个上云过程中需要很多的知识和经验,时间成本也不小。根据上面的分析,我们知道从一个idea到线上产品,这条路其实很长。

4. 从Demo到产品的全栈技术层次


另一个方面,不管是前端开发,还是后端开发,都想做全栈开发的工程师。

最早的时候只有Web工程师的角色,后来到了Web2.0时代,越来越多的很多展现和交互工作前移到前端来做,后端更多的负责数据处理和业务流程,分工也随之出现。

但带来的问题就是分工和协作的开销,因此大家都希望能有一类工程师可以把整个活儿都干了。这就是全栈工程师,但是这条路,走的却没有想象中的那样顺畅。原因就在于对全栈full-stack的理解,网上对于全栈的解读大多如下图所示:能搞定前端,能搞定后端,能搞定解数据库,就可以成为一名全栈开发工程师了,但事实真的如此吗?实际一个全栈工程师远远不是这样!

这个理解是建立在业务功能实现层面的,好像有了前端+后端+数据库,基本业务就能做出来了。而实际上真实情况往往与之相差甚远!

真正能够支撑业务的full-stack架构,至少分为四层:

第一层,是核心业务逻辑,业务流程、前端展现、后端功能、API、数据等。

第二层,是业务架构,具体包括应用框架、技术架构、数据库等。

第三层:是业务运维包括日志、监控告警、扩展性、负载均衡等。

第四层:是底层架构,包括计算资源、系统及网络安全、灾备等。

越往上层,对业务价值的驱动力更高,因为聚焦业务逻辑;而越往底层,往往技术难度越大,对于人员的技术能力要求越高。继续分析,我们就可以的发现:

  • 第一层:全栈工程师们想做的东西
  • 第二层到第四层:Serverless可以解决的问题

在Serverless的赋能下,工程师依旧只需要关注核心的业务逻辑,而底层的技术架构、计算资源、稳定性、系统运维工作,则可以完全由Serverless进行支撑。

5. Serverless的内涵与优势


在Serverless的架构下,只要关注业务核心的逻辑。业务逻辑原来该怎么做现在还怎么做,原来用的语言框架、数据库等在 Serverless 下仍可继续使用。对于核心业务逻辑的下层建筑,包括计算资源和存储资源的分配和管理问题,Serverless 帮你打包解决了。

除此之外,Serverless在计费方面是有优势的。Serverless遵循按需使用的计费模式,用多少就会计费多少,不会有闲置的资源浪费。

下图所示的是Serverless的计费模型,左边图中的黄色区域是用虚拟机支付产生的费用,是一个矩形,绿色曲线围成的阴影部分则是 Serverless的费用,两个图形相减就是费用相差的部分。

值得一提的是,腾讯云发布了国内甚至全球首发的1毫秒计费粒度的Serverless服务,1毫秒计费粒度意味着什么呢?

这里可以举一个例子:假设我们购买了100元的手机流量套餐,获得100G的手机流量,看似是1元对应1G的流量。但其实不是这样的,因为实际上你使用了1G也要收费100元,而1毫秒计费就是每1G只要1块钱。Serverless服务计费也是这样,如果按行业通用100毫秒计费,而你的程序只运行了几毫秒,也需要按照100毫秒计费。腾讯云Serverless按1毫秒计费,基本上实现了真正的程序用了多少,就产生多少费用。

在实际计算中,Web服务下,每一个请求处理时间很短,远远到不了100毫秒,所以用WebService为例,使用腾讯云Serverless服务大概可以节省70%的费用!另外,现在腾讯云 Serverless 有很大的免费试用名额放出,现在的免费试用额度足够每天3万PV的站点所需要资源的开销。

二、Serverless与技术应变力


今天分享的主题是“技术应变力”,对于工程师、架构师、CTO他们到底意味着什么?

对于工程师来讲,技术应变力就是职业发展。从这个角度上讲,“技术应变力” 可以理解为“技术迁移能力”。原来做了A,是不是只能做A?你的技术能力是否能从A迁移到B、C、D?Serverless 是当下最时髦的新技术之一,很多工程师都在快速补足 Serverless 方面的技术栈。如果把Serverless技术栈写在简历上,当前的时间点一定会让面试官认为你是一个非常喜欢新技术的工程师。

对于架构师和技术leader来讲,“技术应变力”意味着什么呢?设想,如果老板问一个技术leader,你的团队有没有技术应变力,这是什么意思?“技术应变力” 对技术leader来讲,指的就是团队工作能力的应变性。原来做产品A,现在要求做产品B,你能不能用现在的团队,用现在的技术架构,把产品B很快的做出来?Serverless 很大程度上帮助技术团队提升这一种能力。Serverless帮助技术团队解决底层所有资源分配。技术团队不需要再管这些,只要把精力放在核心业务逻辑上,在提高了生产效率的共识,增加了应变性。

如果对公司老板或者CTO来说,“技术应变力” 又意味者什么呢?在这一层次考虑的话结论又不相同,对于老板或者CTO来说,“技术应变力” 往往意味着更优的技术投入成本结构。

Serverless在成本控制方面,除了前文提到的按需付费节省算力资源成本,更重要的是它能改变公司的技术投入的成本结构。而这种更优的技术投入成本结构,可以一定程度上降低公司在技术方面过度的投资,以公司快速的应对市场变化时,可以最小的沉默成本完成业务转型或者变革应对。

说的再明白一点,从会计的角度,Serverless 让公司对于技术投入的成本,一定程度上从固定成本变成了可变成本。

怎么理解可变成本呢?举个例子:如果市场部做一个产品广告,假设买了一个电视广告或者地铁广告,一年花费XXXX万,这个成本就是固定成本。我们无法将广告的效果和获客做一个完全的对应,即使一个客户没有带来,或者带来了很多个客户,投放广告的费用是固定不变的。而按效果付费(CPA)广告,就是一种可变成本,可以把广告费用分摊到每一次的销售环节中,理解为获得一个客户,支付一次广告费用。这就是销售环节涉及到的可变成本,公司的技术投入的可变成本结构也同样如此。

如果技术投资可以做到按照业务的执行次数付费,那这块成本的大小就会随着业务规模的变化而变化,非常可控。技术投入的成本结构对于公司技术升级和转型时的决策也有很大影响。如果公司前期的技术投入采用了某种因素被绑定的技术选型,例如自建机房、用物理机的方案。在公司进行技术架构升级的时候就有因为沉默成本而阻力重重。因此,公司在思考技术投入的成本结构方面,也应着重考虑 “技术应变力”因素。

三、Serverless框架原理

1. 为什么需要这样的框架?

Serverless本质是帮客户隐藏底层各种资源和管理的工作,让你聚焦业务逻辑上,但是具体的实现还是FaaS+BaaS这样的结构,FaaS就是云函数,BaaS就是各种各样的云服务。

对于一个开发者,已经习惯于在自己熟悉的IDE和框架下开发业务代码,现在被告知要使用Function把业务代码重构一遍,这本身就意味着要投入很大的成本。对于开发团队来说,研发团队需要关注底层是云服务、API、云函数、数据库、云存储各种云服务。实际上大多数对于这些云服务的管理状态是比较混乱的,难以维护。因为云服务有很多,不同的云厂商之间还没有标准,各个服务的实现风格和使用方式也不一样。

所以我们要问:要不要用一个框架来解决这个问题?我认为答案是肯定的,例如基本上现在前端后端所有的开发都要基于框架,用纯原生代码写应用的方式对团队是不友好的。框架有很多好处,包括代码重用,统一规范,专注业务逻辑,还有社区的附加价值,易于自己的代码维护,框架能帮你做很多事情,提升效率。

2. 什么样的框架适合Serverless?

那么一个理想的Serverless框架应该是什么样子?我觉得需要满足两个要求。

(1)组件化

利用组件的机制,可以以业务功能为单元,进行代码的组织和管理,这样可以在业务内部跨团队,甚至整个生态里面复用,进而达到更好的维护。不仅易于维护,也能提升效率。我们认为一个好的Serverless框架,是一个组件化的能提升效率的框架。

(2)标准化

对于开发者提供一套标准的接口和使用方式,屏蔽底层云的异构系统之间的差异。就好比前端工程师熟悉的JQuery或者Polyfill,它们不用关注浏览器的差异,直接用就完了。Serverless的框架也应该做到这点。

3. ServerlessFramework框架介绍

ServerlessFramework就是这样一个组件化、标准化的Serverless应用开发产品。它提供一套非常标准的开发者接口,包括开发、部署、调试、监控,和底层的异构云厂商完全进行隔离,你看到的是完全面向开发者的视图,原来是怎么开发的现在完全不用改变。

组件化方面,Serverless Framework按照业务的维度提供了不同的组件。例如它提供了Expres组件,如果你原来的应用是基于Express开发的,你就可以直接用该组件把原来的应用迁移到Serverless上面来。同时,这个框架提供了研发到上线的全生命周期管理和支持,包括从开发、调试,联调、测试、部署,整套DevOps的流程都被框架所支持。

这个框架也还提供了方便的命令行工具 CLI 供大家使用,时间关系,不再赘述。

四、Serverless组件架构

今天准备聊的再深入一点,聊一下Serverless Framework 最核心的部分——组件架构。理解了组件架构以后,就可以理解这个框架具体是怎样工作的。

Serverless Components组件是什么?其实就是npm模块!这个模块使用YAML文件进行配置,这个配置描述的就是你需要用到云厂商的哪些资源,通过描述完成对底层的云资源的使用和分配。

要强调的是,组件之间可以通过组合的关系,用简单的组件组合形成更复杂的组件。如下图所示的 Express Component组件,我们需要配置API网关、SCF云函数,还需要一些数据库,它就是以这些组件合并成的高级组件。

基础的组件,可以通过集成变成高阶的组件。那么一个全栈的应用需要哪一些组件呢?

下图示例,Full stack Appliction(全栈应用),就是以Express component做为服务端的框架,用Website component作为客户端的静态网站,完成了前端+后端的架构。

现在Serverless Framework已经支持了大多数的社区框架组件,下图列出了一些比较常用的,其实支持的组件还要更多。

五、Serverless实践

1. Serverless配置与部署

如果你需要用Serverless,只需要三步:第一步:安装Serverless CLI第二步:对YAML进行配置第三步:将Appliction部署上线

Serverless Framework是一个很有弹性的框架。所谓弹性,如果你是一个资深开发工程师,它提供很多的自定义的项目可以供你配置,比如:部署代码的地区,自定义的域名,是不是采用HTTPS服务等,都是可以通过配置实现的。相反,如果你是一个初学者,你也可以不需要改一行代码,即使用组件的默认配置,默认serverless.yml,也可以完成使用。以Express.js为例:

大家可以看到Express组件配置最简单的情况下就只有四行,只有两行是有意义的,一行表示要使用tencent express组件。第二行表示要部署的区域为上海。

从上图大家可以看到,如果你需要对Express做很深度的定制,这里还有一大堆配置项可以使用,包括内存的管理,超时管理都可以在这里进行配置。最后用sls(serverless的缩写)命令,用数十秒完成了上云部署。

这个上云部署,不是简单的上传代码,它完成了所有云底层资源的分配,云函数、存储、数据库、CDN、安全配置、还有所需要监控配置、告警配置这些东西全都搞定。这已经是一个线上的产品级应用了。如果你需要移除,可以通过sls remove 将所有的云上资源一键销毁。

2. Serverless Framework标准化开发模式展示

接下来再给大家展示一下Serverless Framework在标准化开发模式上所做出的事情。

(1)工程化

我们和CODING平台合作出了能提升研发效能的DevOps,如果你是CODING的客户,现在就可以很方便使用Serverless。

(2)Dashboard

Dashboard产品将会很快上线,届时将帮助用户管理应用,能查看应用使用了多少云上的资源等,为用户提供了丰富的管理功能。

(3)运维

如何看监控、告警、日志,如何追查问题?在Dashboard上面同样也会有很多跟运维相关的数据体现。所以Serverless不是没有运维,而是用更加高级的方式去做运维,使得运维的工作更加贴近业务。

3. 学习资源福利

最后给大家提供一些学习的资源,这是给大家精心准备的学习资源的汇总,包括一些官方的文档、组件,教程等。如果你对于Serverless有兴趣,这些资源可以满足你。

Serverless是云计算的未来,Serverless给开发者带来了很多的赋能,我相信Serverless未来一定会发展得非常好。

六、Q&A

Q:用了Serverless是不是也就没必要使用GraphQL了?

A:这是两个层次,GraphQL是一种更加友好和方便操作数据库的方式。Serverless加GraphQL的方式会对开发者更加友好,更加便于应用的编写。另外,ServerlessDB也会在近期发布,请大家关注。

Q:Express是以服务器方式运行,是启动之后再去工作吗?

A:是的。不过Serverless Component和云函数会帮你解决这个问题,Serverless的模式下开发Express应用对这些是无感知的。这种情况下,开发者只需要把精力放在Express框架下的业务逻辑,不用过多的关于Express服务启动问题。

Q:如何和小程序结合使用?

A:请参考微信小程序云开发这个产品,那是一个非常棒的微信小程序Serverless开发方式。

Q:部署需要选择地区,比如上海。有没有办法做到就近接入?

A:资源就近接入的问题,本质上还是靠CDN的方式解决。目前Serverless Website组件,就已经默认支持了可以添加CDN的配置。如果你你选择了使用CDN,Serverless 会自动为你做好配置。

Q:传统后端技术以后还有用吗?

A:当然!Serverless技术会让后端研发会更聚焦于后端业务逻辑、数据处理和流转、调度、策略、算法、事务管理、服务治理等等,强业务贡献的工作。现在的后端研发,很大一部分时间是处理各种各样的“杂事”。有时候一些系统异常需要去关注,峰值流量来临CPU idle降低也要去关注,这些货真心话是“又脏又累”,Serverless技术下,后端同学反而可以更舒适的工作。

Q:现在腾讯云的应用可以直接使用了吗?

A:可以使用,前文有一页提供了官网和社区的地址,我也给大家提供了一个资源聚合页:https://china.serverless.com/blog/2020-02-20-resource

Q:Serverless基本代表无状态是吗?

A:云函数目前是无状态的,但是Serverless不全等于云函数,云函数只是一个计算资源的分配方式,它是以每一次业务资源的执行为粒度分配资源。实现 Serverless有状态可以借助一些数据库或者是session服务的方式。

Q:对于瞬时高并发秒杀合适吗?

A:非常合适。在秒杀情况下只有那一个时间段请求量很高,秒杀过后,资源使用率可能马上就降下来,所以使用 Serverless技术是非常合适的。

Q:微信小程序的云函数使用腾讯云云函数吗?

A:没错,是的。腾讯云云函数为微信小程序云开发提供底层计算资源。

Q:假如我的服务器开启需要有约十秒的各种复杂配置加载,是不是 Serverless 并不适合这种场景。API 网关触发器情况下,Serverless 是不是只推荐用于响应短的请求?

A:不是。这个是个好问题,比较有深度,因为您关注到了云函数冷启动的性能问题。冷启动的优化有两个方向,一是优化本身启动的速度,现在腾讯云云函数基于轻量化虚拟机技术,在冷启动方面已经做到了百毫秒级。第二是通过资源池的方式,提供一些预热的资源来解决,腾讯云云函数一直有一些预分配的实例资源存在。

Q:秒杀需要预热吗?

A:对于客户来说,不需要关注预热过程。虽然无论理论还是实际上,都上不存在无穷无尽用不完资源,但就普通用户的请求量级和资源需求来说,是可以随时满足的。

Q:无服务更多的体现在FaaS吗?很多函数服务现有的组件也可以解决,函数服务在一般的业务场景感觉不是很显著?

A:我理解下你的问题,可能是要问要不要把业务场景按照函数方式,重新组织,重构一遍。函数是一种计算资源,对于资源的使用可以有很灵活的方式。有一些开发者直接使用函数的粒度来组织业务逻辑,这样做当然是可以的。不过Serverless Framework倡导的是不用关注函数这个计算资源,还是以传统的框架和服务为基础来构建业务代码。原来怎么写,现在跟原来保持一致。原来一些需要关注的底层资源,由Serverless搞定。

Q:对于什么样的开发者都可以使用Serverless减少工作量吗?

A:我非常同意你说的这一点。在我接触的开发者中,有前端的,也有后端的,也有全栈,使用Serverless都可以减少很多的工作。Serverless属于每一位开发者。

讲师简介

王俊杰,腾讯云 Serverless 技术专家,拥有十余年互联网研发经验。负责腾讯云Serverless产品技术在全栈开发的应用方案设计,主要研究如何将Serverless与传统开发语言及开发框架相结合,推动Serverless全栈开发、传统业务Serverless上云,以及Cloud Native App的Serverless化开发。

关注云加社区公众号,回复“在线沙龙”,即可获取老师演讲PPT

查看原文

ycloud 赞了文章 · 2019-12-30

React Hooks实践

9月份开始,使用了React16.8的新特性React Hooks对项目进行了重构,果然,感觉没有被辜负,就像阮一峰老师所说的一样,这个 API 是 React 的未来。

Hooks

React Hooks是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

说是新的特性,但是与其他的版本的迭代不同,它不只是加一点api减一点api的改变。而是完整的一套解决方案。

一个简单的Hook

import React, { useState } from 'react';

function Example() {
  // 声明一个新的叫做 “count” 的 state 变量
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

这是React官网关于react使用的第一个例子,使用Hooks的方式实现了一个计数器功能。
useState是什么?在这里我们认为useState就是一个Hook。
下面介绍 React 2个最常用的钩子,useState,useEffect。

useState

这个Hook,应该是我们使用最多的一个Hook了。通过在函数组件里调用它来给组件添加一些内部 state。
useState方法会返回一个包含2个值的数组,第一个值是当前状态。第二个值更新这个状态的函数,它类似 class 组件的 this.setState,但是它不会把新的 state 和旧的 state 进行合并。我们一般会通过解构的方式获取其值。

使用

import { useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);

这里我们将内部状态count初始化为0,在count发生变化时,会引起组件的会重新渲染。同时,我们通过解构的方式,给该状态进行了赋值。

更新

<button onClick={() => setCount(count + 1)}>
        Click me
      </button>

直接调用useState返回值的第二个参数,即可完成更新。

useEffect

我在写React ,类组件的时候,最不愿意写的就是生命周期方法,一方面是因为生命周期方法比较多,另一方面其实也比较容易出bug。比如说,我们想要实现一个监听props的某个值的变化,进而进行一些特殊操作,就可能需要两种生命周期的方法配合。但是在Hooks里,我们只需要用到useEffect就可以实现了。

使用

import { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  // 类似于componentDidMount 和 componentDidUpdate:
  useEffect(() => {
    // 更新文档的标题
    document.title = `You clicked ${count} times`;
  });

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

useEffect方法接受2个参数,第一个参数是一个函数,是在第一次渲染以及之后更新渲染之后会进行的副作用,强调一点,该函数可以有返回值,但是该返回值必须是一个函数,会在组件被销毁时执行。
第二个参数是可选的,是一个数组,数组中存放的是需要监听的属性。即当数组中的属性发生变化时,第一个参数的函数会被调用,如果是空数组,则在第一次渲染时会被调用。
基于以上两个最主要的Hook,我们基本上可以满足于我们大部分的需求。但是如果想要对组件进行优化,则需要另外两个Hook。useCallback和useMemo。

useCallback

useCallback接收一个内联回调函数参数和一个依赖项数组(子组件依赖父组件的状态,即子组件会使用到父组件的值) ,useCallback 会返回该回调函数的 memoized 版本,该回调函数仅在某个依赖项改变时才会更新。

useMemo

useMemo把创建函数和依赖项数组作为参数传入 useMemo,它仅会在某个依赖项改变时才重新计算 memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。

基于以上的Hook我们基本上可以完成大部分的功能了,除了上文重点介绍的useState和useEffect,react还给我们提供来很多有用的hooks useContext useReducer useRef useImperativeMethods useMutationEffect useLayoutEffect,这里就不一一介绍了,如果想要使用Hooks,这些api也是需要了解的,具体使用可以参考下面的文档。

参考文档

React 官网

查看原文

赞 6 收藏 5 评论 0

ycloud 收藏了文章 · 2019-12-24

探索CSS单行文字居中,多行文字居左的实现方式

原文链接
https://github.com/XboxYan/notes/issues/13

很久以前

刚入前端那会,产品经理提出了这样一个需求

这段文字能不能这样判断一下,当文字不足一行时,让它居中显示,当文字超过一行就让它居左,不然居中显示很奇怪,因为最后一行是吊着的

image

琢磨了一下,当时我还真按照产品经理的逻辑,通过js判断一下文字的高度,如果超过一行,就添加一个类名,而且这样的文字很多地方都有,所以还做了遍历,还有最重要的一点是关于方法执行的时机,有可能刚加载的时候高度还获取不到(当时好像还用了定时器,还造成了先居中随后居左跳动的现象)...

//伪代码
$('.text').each(function(){
    if($(this).height()>30){
        $(this).addClass('mul');
    }
})

然后这些文本有可能还是动态生成的,所以还得在生成文本的地方再调用一次这个方法,功能是做出来了,可别说有多啰嗦了,体验也不咋地(虽然外面的人看不到)

当时也在想,如果是CSS实现,那么就完全不用考虑这些问题了!

关于CSS实现思路

其实只要你逻辑清晰,js都能实现出来,按照正常的思路一步一步走下来就行了。CSS可不是这样,她需要你有更多的想象力。

比如上面这种需求,表面上来看是需要判断文本行数,这完全不是CSS能干的事呀,不过我们可以换个方向思考,文本默认是居左的(默认文本流),只有首行是居中的,首行可以联想到::first-line伪元素,所以可以试着这样实现一下

<p>这段文字能不能这样判断一下,当文字不足一行时,让它居中显示,当文字超过一行就让它居左</p>
p::first-line{
    text-align:center;
}

很好理解是吧,只针对首行进行居中操作,当多行时,首行已经铺满了,居中或者居左效果已经不明显了,只是稍微有点瑕疵,首行的居中效果和后面的文字看着有些不太整齐的感觉(因为当一行剩余空间不足一个字符的时候会掉下去)

center1

解决这个问题也很简单,上面的问题是由于首行一直处于居中状态,那有没有什么办法可以只要一行的时候才居中呢?这里可以借助一下text-align-last,意思就是规定多行文本的最后一行的居中方式,如果和::first-line一起使用,既要满足首行又要满足是最后一行,是不是就判断出了当前只有一行呢?

p::first-line{/*匹配首行*/
    text-align-last:center;/*最后一行居中*/
}

center2

这下就正常了,有点首尾夹击的味道~

See the Pen

遗憾的是,由于::first-line支持样式非常有限(MDN),上述实现方法仅在chrome下有效,不过这种逻辑还是和js差别很大的

image

虽然上述并没有text-align相关属性,不过chrome却已经支持了~

更好的实现方式

1.父级text-align:center,子级inline-block+text-align:left

首先来看看兼容性最好的实现方式

结构如下

<div class="content">
    <span class="text">这段文字能不能这样判断一下,当文字不足一行时,让它居中显示,当文字超过一行就让它居左</span>
</div>

样式如下

.content{
    text-align: center;
}
.text{
    display: inline-block;
    text-align: left;
}

这个方式最早是在《CSS世界》中学到的,

image

大概原理如下:

对于一个元素,如果其display属性值是inline-block,那么其宽度由内部元素决定,但永远小于“包含块”容器的尺寸,也就是“包裹性(shrink-to-fit)”

可能这样描述的不够直观,来上述的案例简单来讲

  • 当文本比较少时,.text的宽度跟随文本,然后我们可以使用父级text-align:center来使一个inline-block元素居中,所以可以满足单行文本居中的效果,
  • 当文本比较多时,.text的宽度跟随父级容器,由于text-align:center会继承下去,所以在.text上修复一下即可

See the Pen

兼容性一级棒~

2.width:fit-content+margin:auto

上述方式是通过父级text-align:center来实现inline-block居中的,很巧妙,但是额外增加了标签,因为inline-block元素无法本身居中的。

块级block元素可以在设置宽度后直接通过margin:0 auto来实现居中,但是必须指明宽度,不然就水平填充了,这两者的关系很微妙,有没有什么办法能够让块级block元素的宽度像inline-block元素跟随内部元素呢?

答案就是width:fit-content,详细可参考这篇文章

width:fit-content可以实现元素收缩效果的同时,保持原本的block水平状态,于是,就可以直接使用margin:auto实现元素向内自适应同时的居中效果了。

下面的实现方式均只需要单层标签

<p class="text">这段文字能不能这样判断一下,当文字不足一行时,让它居中显示,当文字超过一行就让它居左</p>
.text{
    width: fit-content;
    width: -moz-fit-content;//火狐需要-moz-前缀
    margin: 0 auto;
}

See the Pen

当然,这种特性IE肯定是不支持的~

image

3.position:relative+transform

仍需设置display:inline-block来实现自适应,然后配合transform来实现水平方向居中效果,实现也很简洁~

.text{
    display: inline-block;
    position: relative;
    left: 50%;
    transform: translateX(-50%);
}

See the Pen

4.display:table+margin:auto

前一种方式width:fit-content很有效,IE不支持怎么办呢?其实默认display已经有这种特性了,当display属性值是table,元素会表现出和width:fit-content的效果,既支持宽度跟随内部元素,又支持水平方向上margin居中

.text{
    display: table;
    margin: 0 auto;
}

See the Pen

IE8也完美支持~

center3

5.flex和grid实现

对于flexgrid来说,实现这样一个效果还是挺容易的。

flex容器中,所有子项成为弹性项,包括纯文本节点(匿名盒子),就好像包裹了一层,所以很容易通过justify-content: center实现居中,同时(匿名盒子)也跟随文本自适应宽度,当超过一行时,就按照默认的文本对齐方式。

grid同理,只不过对齐方式需要通过justify-items: center

  • flex实现
.text{
    display: flex;
    justify-content: center;
}

See the Pen

  • grid实现
.text{
    display: grid;
    justify-items: center;
}

See the Pen

相对于flexgrid的兼容性要差一些,所以尽量选取flex方式,至少移动端和IE10(需要-ms-)是没问题的

6.float实现

本以为float实现不了的,感谢林小志提供了float居中的实现方法,大致原理如下:本身float元素是具备包裹特性的,主要难点在于如何居中,毕竟没有float:center这种写法,这里主要用到两层标签,利用position:relative;left:50%正负抵消来实现

.content{
    position: relative;
    float: left;
    left: 50%;/**父级设置50%**/
}
.text{
    position: relative;
    float: left;
    left: -50%;/**子级设置-50%**/
}

See the Pen

略微繁琐一点,不过也不失为一种方法,兼容性也极好

小结

上述一共列举了8种实现方式,当然第一种属于实验性质的,兼容性少的可怜,但也不失为一种思路。怎么想到这些方法呢?

第一就是联想。比如上述提到了自适应(简单来讲就是尺寸由内容决定),我就想哪些可以实现自适应呢?除了inline-block,还有floatposition:absolutedisplay:table等...首先float就排除了,元素设置了float后,整体居中其实是件麻烦的事,几乎不可能(经过试验,可以实现)。position:absolute还是挺有希望的,借助left:50%;transform:translateX(-50%)可以实现居中效果, 尝试了一番,发现宽度无法自适应父级宽度,同样失败(说不定可以,只是没有想到)~~最后选择了diaplay:table,也算是循序渐进。flexgrid就更不用说了,天然就是为弹性布局而生了,实现这类效果不奇怪。

第二还是基础。CSS属性可就那么多,那只是停留在表面,很多看起来不相关的属性在整个体系中又会有些微妙的关系,比如上面的width:fill-content,单独看这个肯定很鸡肋,完全可以用inline-block来代替,但是他却可以让一个普通的div元素具备inline-block的特性,不得不佩服CSS的设计~(肯定有设计人员参与)

前一段时间在思考做一个可视化编辑工具,希望可以通过一些属性,就像photoshop那样,直接作出一个页面来,想想看,发现只能作出最最基本的样式,也就颜色,大小什么的,如果要做成本文这样一个效果,八成是做不了的,除了本身是做开发,别人怎么可能知道这样设置呢?可视化编辑工具的道路还很长很长,所以做前端的也无需担心被其他什么“一键生成工具”给取代了~

image

各位小伙伴如果还有其他实现方式可在下方留言评论,如果文章有错误请及时指出,谢谢~

查看原文

ycloud 关注了用户 · 2019-01-18

腾讯云加社区 @qcloudcommunity

欢迎访问关注腾讯云云加社区公众号,第一时间获取我们分享的技术干货!

关注 5586

ycloud 赞了回答 · 2018-04-23

解决vue 回车登录 怎么做?

直接包在一个<form>里面就可以了

关注 4 回答 4

ycloud 回答了问题 · 2018-04-11

解决前端- html <a> 標籤,屬性中的download ,無法下載圖片,變成檢視圖片

注意:
此属性仅适用于同源 URLs。
可以使用 blob: URLs 和 data: URLs 以方便用户下载 JavaScript 方式生成的内容(例如使用在线绘图的Web应用创建的照片)。
如果HTTP头的Content-Disposition:存在,并且赋予了一个和这个属性不同的文件名,HTTP头优先于此属性。
如果这个属性存在 Content-Disposition 被设置为 inline,火狐优先 Content-Disposition,像之前文件名​​的情况下,而Chrome则优先 download 属性。

参考:https://developer.mozilla.org...

浏览器的同源策略
https://developer.mozilla.org...

demo:
https://jsfiddle.net/ycloud/f...

关注 5 回答 4

认证与成就

  • 获得 95 次点赞
  • 获得 9 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 7 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2012-04-18
个人主页被 1.1k 人浏览