• 关于

    处理函数

    的搜索结果

回答

每个AWS Lambda函数通过定义为处理程序的函数都有一个入口点。 当调用AWS Lambda函数时,将调用处理程序函数。当调用Lambda函数时,不可能“调用”另一个函数。 但是,您可以向处理程序函数添加一些逻辑,该函数检查传入事件并检查测试情况。然后处理程序函数可以调用test()函数。例如,向表示“Test”的事件添加一个条目:“true”,然后让处理程序函数检查这个条目,如果存在,则调用Test()。

kun坤 2019-12-25 22:09:36 0 浏览量 回答数 0

回答

jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。 .live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤: 生成一个click事件传递给 来处理由于没有事件处理函数直接绑定在 上,所以事件冒泡到DOM树上事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。执行由 .live() 绑定的特殊的 click 事件处理函数。这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。如果找到了匹配的元素,那么调用原始的事件处理函数。由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。

a123456678 2019-12-02 03:04:06 0 浏览量 回答数 0

回答

这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 您有并发处理大量视频的需求。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。 函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 简单视频处理系统 假设您是对短视频进行简单的处理, 架构方案图如下: 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 简单视频处理系统示例工程地址 您可以直接基于示例工程部署您的简单视频处理系统服务, 但是当您想要处理大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数很大概率会执行失败,原因是函数计算的执行环境存在一些限制, 比如最大执行时间为 10 分钟, 最大内存为 3G。 为了突破函数计算执行环境的限制,引入函数工作流 FnF 去编排函数实现一个功能强大的全功能视频处理系统。 全功能视频处理系统 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,并行进行提取音频文件,同时进行 avi,mp4,flv 格式的转码。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件。 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码。 全功能视频处理系统示例工程地址

保持可爱mmm 2020-04-15 23:08:12 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

阿里云提供基于函数计算(Function Compute)处理数据并分发的解决方案。阿里云函数计算是一款基于Serverless架构的轻计算高弹性的产品。 使用函数计算处理数据并分发有以下优势: 便捷:函数计算与表格存储产品对接配置简便,通过控制台上简单配置即可完成产品间的数据对接。弹性:表格存储间隔1秒将更新的数据批量透传给函数计算,如果函数计算一秒内处理不完请求,函数计算会启动新的执行环境来处理后续的请求,实现自动弹性伸缩。业务逻辑:业务逻辑编写到函数计算里,处理好数据后,通过接口调用直接把数据发送给移动推送、消息通道等产品。经济:函数计算是按照触发来计费,业务低谷期的费用非常低廉,不需要额外维护一些服务环境。

剑曼红尘 2020-03-23 15:07:53 0 浏览量 回答数 0

回答

场景描述 用户通过手机终端、Web应用、或者PC工具把各种文件包括图片、视频以及文本等上传到OSS(对象存储,下同)后,利用OSS的PutObject事件可以触发函数计算对上传后的文件进行处理。 典型场景 当用户把视频文件上传到OSS后,触发函数计算把对象的Meta信息获取并传输给核心算法库,核心算法库根据算法把相应的视频文件推送CDN源站,达到特定视频热加载的处理。另外一个场景,视频文件上传到OSS后也同时触发函数计算同步做多转码率的处理,并把处理后的视频文件存储到OSS中,完成轻量的数据处理。 在多媒体的处理场景中,经常会碰到海量文件上传到OSS后,还需要对文件进行进一步的加工,例如加水印、转码率、获取文件属性等操作,这个场景中,用户在处理的时候会遇到以下需要解决的技术难点: 如何接收文件上传后的动作事件,通常的做法是定制消息通道来接收OSS事件通知,搭建一个运行环境,并编写相关的代码来处理事件通知。 如何高效的处理完海量上传的文件。 如何无缝的把多个云产品连接起来。 通过函数计算能比较方便解决以上几个技术难点: 函数计算可以设置OSS的触发器来接收事件通知,在函数计算中编写业务代码来处理文件,并通过内网把文件传输到OSS中,整个流程简单易用可扩展。 可以把核心代码部署到函数计算中,通过函数计算来并发处理事件通知。 函数计算目前打通了多款产品的内部交互,通过控制台简单配置就可以高效的解决产品间连接问题。 事件触发场景常规做法: 设置消息通道接收事件,并编写业务代码。 购买服务器资源做后端数据处理。 设计一套多并发框架完成业务上传文件峰值的处理。 开通多个产品,并调用SDK代码来完成业务交互。 函数计算解法: 在控制台上配置事件源通知,编写业务代码。 代码写到函数计算里,不需要管理软硬件环境。 业务高峰期函数计算会动态伸缩,无需管理。 内置打通多款产品,简单配置就可以无缝对接。

游客pklijor6gytpx 2019-12-02 03:24:00 0 浏览量 回答数 0

回答

PHP 函数入口 在函数计算中使用 PHP 编程,您需要定义一个 PHP 编写的函数作为入口。本文详细介绍了 PHP 的函数入口定义项。 PHP HTTP 函数 在函数计算服务使用 PHP 编程,需要定义一个函数作为入口函数。本文介绍了 PHP HTTP 函数,为函数设置 HTTP 触发器后,可以方便处理发来的 HTTP 请求。 PHP 运行环境 函数计算支持 PHP 7.2.7(runtime = php7.2)运行环境。本文介绍了 PHP 运行环境的以下内容: 打印日志 错误处理 PHP 内置扩展 PHP 自定义扩展 PHP 内置库 PHP 自定义库 调用外部命令

1934890530796658 2020-03-27 16:26:11 0 浏览量 回答数 0

回答

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各种障碍,以阿里云为例: image 这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您有并发处理大量视频的需求。 您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义音视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 Simple 视频处理系统 假设您是对视频进行单纯的处理, 架构方案图如下: image 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 Simple 视频处理系统示例工程地址 强大的监控系统: 您可以直接基于示例工程部署您的 Simple 音视频处理系统服务, 但是当您想要处理超大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数会执行失败,原因是函数计算的执行环境有最大执行时间为 10 分钟的限制,如果最大的 10 分钟不能满足您的需求, 您可以选择: 对视频进行分片 -> 转码 -> 合成处理, 详情参考:fc-fnf-video-processing, 下文会详细介绍; 联系函数计算团队(钉钉群号: 11721331) 或者提工单: 适当放宽执行时长限制; 申请使用更高的函数内存 12G(8vCPU) 为了突破函数计算执行环境的限制(或者说加快大视频的转码速度), 进行各种复杂的组合操作, 此时引入函数工作流 FnF 去编排函数实现一个功能强大的视频处理工作流系统是一个很好的方案。 视频处理工作流系统 image 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,会同时进行 1 种或者多种格式的转码(由您触发的函数环境变量DST_FORMATS 参数控制)。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件, 同时每次文件转码成多种格式也是并行。 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码, 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 视频处理工作流系统示例工程地址 示例效果: gif 函数计算 + 函数工作流 Serverless 方案 VS 传统方案 卓越的工程效率 自建服务 函数计算 + 函数工作流 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 并行&分布式视频处理 需要很强的开发能力和完善的监控系统来保证稳定性 通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台 学习上手成本 除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可 项目上线周期 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等 预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天) 弹性伸缩免运维,性能优异 自建服务 函数计算 + 函数工作流 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,视频处理工作流系统 (FnF + FC) 压测;性能优异, 详情见下面的转码性能表 监控报警查询 ECS 或者容器级别的 metrics 提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制 函数计算 + 函数工作流 Serverless 方案转码性能表 实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov,云服务进行 mov -> mp4 普通转码需要消耗的时间为 188s, 将这个参考时间记为 T 视频切片时间 FC转码耗时 性能加速百分比 45s 160s 117.5% 25s 100s 188% 15s 70s 268.6% 10s 45s 417.8% 5s 35s 537.1% 性能加速百分比 = T / FC转码耗时 从上表可以看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算可以自动瞬时调度出更多的计算资源来一起完成这个视频的转码, 转码性能优异。 更低的成本 具有明显波峰波谷的视频处理场景(比如只有部分时间段有视频处理请求,其他时间很少甚至没有视频处理请求),选择按需付费,只需为实际使用的计算资源付费。 没有明显波峰波谷的视频处理场景,可以使用预付费(包年包月),成本仍然具有竞争力。 函数计算成本优化最佳实践文档。 假设有一个基于 ECS 搭建的视频转码服务,由于是 CPU 密集型计算, 因此在这里将平均 CPU 利用率作为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费) ITEM 平均CPU利用率 计算费用 总计 函数计算组合付费 >=80% 998(246.27×3+259.2) <= 998 按峰值预留ECS <=30% 2190(10*219) >=2190 在这个模型预估里面,可以看出 FC 方案具有很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由如下: 可能只有部分时间段有视频转码请求 为了用户体验,视频转码速度有一定的要求,可能一个视频转码就需要 10 台 ECS 并行处理来转码, 因此只能预备很多 ECS 因此,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。 即使和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力 我们这边选用点播视频中最常用的两个格式(mp4、flv)之间进行相互转换,经实验验证, 函数内存设置为3G,基于该方案从 mp4 转码为 flv 的费用概览表: 实验视频为是 89s 的 mp4 和 flv 格式的文件视频, 测试视频地址: 480P.mp4 720P.mp4 1080P.mp4 4K.mp4 480P.flv 720P.flv 1080P.flv 4K.flv 测试命令: ffmpeg -i test.flv test.mp4 和 ffmpeg -i test.flv test.mp4 mp4 转 flv: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 889 kb/s 24 11.2s 0.003732288 0.032 88.3% 高清 1280720 1963 kb/s 24 20.5s 0.00683142 0.065 89.5% 超清 19201080 3689 kb/s 24 40s 0.0133296 0.126 89.4% 4K 38402160 11185 kb/s 24 142s 0.04732008 0.556 91.5% flv 转 mp4: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 712 kb/s 24 34.5s 0.01149678 0.032 64.1% 高清 1280720 1806 kb/s 24 100.3s 0.033424 0.065 48.6% 超清 19201080 3911 kb/s 24 226.4s 0.0754455 0.126 40.1% 4K 38402160 15109 kb/s 24 912s 0.30391488 0.556 45.3% 成本下降百分比 = (某云视频处理费用 - FC 转码费用)/ 云视频处理费用 某云视频处理,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即使采用 1.5 min 计算, 成本下降百分比基本在10%以内浮动 从上表可以看出, 基于函数计算 + 函数工作流的方案在计算资源成本上对于计算复杂度较高的 flv 转 mp4 还是计算复杂度较低的 mp4 转 flv, 都具有很强的成本竞争力。 根据实际经验, 往往成本下降比上表列出来的更加明显, 理由如下: 测试视频的码率较高, 实际上很多场景绝大部分都是标清或者流畅视频的转码场景, 码率也比测试视频低,这个时候计算量变小, FC 执行时间短, 费用会降低, 但是通用的云转码服务计费是不变的. 很多视频分辨率在通用的云转码服务是计费是有很大损失的, 比如转码的视频是 856480 或者 1368768, 都会进入云转码服务的下一档计费单价, 比如856480 进入 1280720 高清转码计费档,1368768 进入 19201080 超清转码计费档, 单价基本是跨越式上升, 但是实际真正的计算量增加可能还不到30%, 而函数计算则是真正能做到按计算量付费. 操作部署 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 详情见各自示例工程的 README Simple 视频处理系统示例工程地址 视频处理工作流系统示例工程地址 总结 基于函数计算 FC 和函数工作流 FnF 的弹性高可用视频处理系统天然继承了这两个产品的优点: 无需采购和管理服务器等基础设施,只需专注视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本 提供日志查询、性能监控、报警等功能快速排查故障 以事件驱动的方式触发响应用户请求 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异 成本极具竞争力 相比于通用的转码处理服务: 超强自定义,对用户透明, 基于 FFmpeg 或者其他音视频处理工具命令快速开发相应的音视频处理逻辑 原有基于 FFmpeg 自建的音视频处理服务可以一键迁移 弹性更强, 可以保证有充足的计算资源为转码服务,比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完 各种格式的音频转换或者各种采样率自定义、音频降噪等功能, 比如专业音频处理工具 aacgain 和 mp3gain 可以和 serverless 工作流完成更加复杂、自定义的任务编排,比如视频转码完成后,记录转码详情到数据库,同时自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力 更多的方式的事件驱动, 比如可以选择 OSS 自动触发(丰富的触发规则), 也可以根据业务选择 MNS 消息(支持 tag 过滤)触发 在大部分场景下具有很强的成本竞争力相比于其他自建服务: 毫秒级弹性伸缩,弹性能力超强,支持大规模资源调用,可弹性支持几万核.小时的计算力,比如 1 万节课半个小时完成转码 只需要专注业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时可以达到消息(即音视频任务)处理的优先级,可大大提高开发运维效率 函数计算采用 3AZ 部署, 安全性高,计算资源也是多 AZ 获取, 能保证每个用户需要的算力峰值 开箱即用的监控系统, 如上面 gif 动图所示,可以多维度监控函数的执行情况,根据监控快速定位问题,同时给用户提供分析能力, 比如视频的格式分布, size 分布等 在大部分场景下具有很强的成本竞争力, 因为在函数计算是真正的按量付费(计费粒度在百毫秒), 可以理解为 CPU 的利用率为 100% 最后一一回答一下之前列出的问题: Q1: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务可以轻松切换到函数计算, FFmpeg 相关命令可以直接移值到函数计算,改造成本较低, 同时天然继承了函数计算弹性高可用性特性。 Q2:您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF 等。 自己搭建成本更低。 A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。典型示例: fc-oss-ffmpeg Q3: 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如: 再增加后续流程 最开始增加 pre-process Q4: 您有并发同时处理大量视频的需求。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情可以参考 视频处理工作流系统 (FnF + FC) 压测 Q5:您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。A: 详情可以参考视频处理工作流系统 (FnF + FC) 压测, 可以通过控制分片的大小, 可以使得每个大视频都有足够多的计算资源参与转码计算, 大大提高转码速度。 Q6: 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF,后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), FnF 只负责编排调用函数, 因此只需要更新相应的处理函数即可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理 Q7: 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将他们再迁移到 OSS 上。 A: 函数计算可以挂载 NAS, 直接对 NAS 中的文件进行处理

1934890530796658 2020-03-27 18:21:36 0 浏览量 回答数 0

回答

“服务编排能力:可以将流程逻辑与任务执行分开,支持多种控制原语,比如顺序执行多个函数,根据函数执行结果选择执行其它函数,让多个函数并行处理数据,或者让一个函数并行处理一组数据等,以及上面的 Fan-In 模式。函数工作流还内置了错误重试和捕获能力,节省了编写编排代码的时间。

游客pklijor6gytpx 2019-12-02 03:23:30 0 浏览量 回答数 0

回答

整个架构图分成 2 部分内容: Web应用:模拟一个社交内容更新和数据处理的流程,Web用户通过API网关把请求转发到函数计算进行处理,函数计算把处理后的内容更新到数据库中,并更新索引,另外一个函数计算把索引更新推送的搜索引擎供给外部客户进行检索,完成整个数据闭环处理。 智能设备:通过IoT网关把设备状态推送到函数计算处理,函数计算通过API接口把消息通过移动推送服务,推送给移动端进行状态确认和管理。 在智能设备状态处理的场景中,同样也会碰到几个核心技术问题要解决。当海量设备把状态发送到IoT平台后,如何设计一套高效非轮询的技术框架来处理设备状态数据;如何把处理后的数据高效透传其他产品,例如写数据库或者推送给移动端。 IoT设备状态场景常规做法: 设置消息通道接收事件,并编写业务代码。 购买服务器资源做后端数据处理。 开通多个产品,并调用SDK代码来完成业务交互。 维护相关硬件软件环境。 函数计算解法: 定制IoT平台的事件通知,直接把业务代码写到函数计算中。 不需要维护运行环境,用完即可释放。 控制台配置,就可以把信息透传给相关产品。 通过 2 种方式的对比,能看出函数计算的解法更具备通用性,可以大量减少维护工作。

游客pklijor6gytpx 2019-12-02 03:24:01 0 浏览量 回答数 0

回答

Python 事件函数 在函数计算服务中使用 Python 编程,需要定义一个函数作为入口函数,本文介绍了Python 事件函数。 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) Python HTTP 函数 本文介绍了 Python HTTP 函数,为函数设置 HTTP 触发器后,可以方便处理发来的 HTTP 请求,方便搭建 Web 应用。 Python Initializer 函数 Initializer 函数是实例的初始化函数,保证同一实例成功且仅成功执行一次。本文介绍了 Python Initializer 入口的结构和特点。 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) Python 运行环境 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) 本文介绍了 Python 运行环境的以下内容: 打印日志 错误处理 使用内置模块 使用自定义模块 调用外部命令

1934890530796658 2020-03-27 16:24:59 0 浏览量 回答数 0

回答

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { 对运算符的重载处理 } 不是必须的有&是引用,调用;有可能改变其后变量的值;无&,其后的变量仅仅参与运算,不会改变其值 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { 对运算符的重载处理 }不是必须的有&是引用,调用;有可能改变其后变量的值;无&,其后的变量仅仅参与运算,不会改变其值

xumaojun 2019-12-02 01:59:33 0 浏览量 回答数 0

回答

session中保存的值可能是字符串、数组、类等各种数据类型,就算是单一数据类型,它表示的意义也存在多种可能,如一本书信息,一个用户信息,一个销量排行等,除此之外,返回一个默认值还有可能要处理一些逻辑、事务等等,在这种情况下,将处理逻辑作为参数传入方法,可以方便的解决这类问题。class Session { public static function get(String $key, Closure $func) { // 取key的value,如果为空则调用匿名函数 return $func(); // 只专注于自己的业务(k-v),其它业务委托匿名函数处理。 } }匿名函数是不需要定义函数名的,可以作为参数传递给其他函数, 通常用于回调函数。

落地花开啦 2019-12-02 02:42:49 0 浏览量 回答数 0

回答

函数重载主要是为了解决两个问题。 1。可变参数类型。 2。可变参数个数。 另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。 那么对于情况 1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。 那么对于情况 2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。 鉴于情况 1 跟 情况 2 都有了解决方案,python 自然就不需要函数重载了。

珍宝珠 2019-12-02 03:12:47 0 浏览量 回答数 0

问题

什么是函数计算

boxti 2019-12-01 21:47:55 948 浏览量 回答数 0

问题

PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)

珍宝珠 2019-12-01 21:59:14 30 浏览量 回答数 1

回答

可以绑定多个事件,以及对应的处理函数。甚至可以对同一DOM元素多次绑定相同的事件,形成一个事件处理函数队列,然后事件触发时,按照事件处理函数队列,依次执行。

小旋风柴进 2019-12-02 02:28:29 0 浏览量 回答数 0

回答

本文简要介绍使用函数计算的流程。函数计算帮助您无需管理服务器(Serverless),仅专注于函数代码就能快速搭建应用。函数计算能够弹性地伸缩,您只需要按使用量付费。 开发者工具 您可以使用 fcli 或者控制台搭建服务和查询日志等。更多详情,请参阅 命令行工具fcli、命令行工具fun 和 可视化界面控制台。 使用简介 使用函数计算前,您需要在 产品详情页 开通服务。以下流程图包含了使用函数计算搭建服务的必要步骤: Flowchart 创建服务。 创建函数,编写代码,将应用部署到函数中。 以事件源触发函数。 查看执行日志。 查看服务的监控。 创建服务 服务(Service)是管理函数计算的基本资源单位。您可以在服务级别上授权、配置日志和创建函数等。 有关服务的更多信息请参阅 服务简介 。 有关服务操作的更多信息请参阅 服务的增删改查。 创建函数 函数(Function)是调度与运行的基本单位,更是一段代码的处理逻辑。您需要根据函数计算提供的函数接口形式编写代码,并将代码以函数的形式部署到函数计算。函数计算中的服务对应于软件应用架构领域中的微服务。在函数计算平台构建应用时,首先根据需求将业务逻辑抽象为微服务,然后再实现为函数计算中的服务。 一个服务下可以创建多个函数,每个函数可以设置不同的内存规格、环境变量等属性,并可以结合用户的实际业务场景来决定是否开启 Initializer 功能。这种服务或者函数层次化的抽象,在系统抽象和实现灵活度上能够取得很好的平衡。例如,实现一个微服务,调用阿里云语音合成服务,将文字转成语音,再把这段语音和一系列图片组合为视频。其中文字转语音函数是调用其他服务,可以设置很小的内存规格。而视频合成函数是计算密集型,需要更大的内存。因此您可以组合多个不同规格的函数实现微服务,优化成本。 有关函数的更多信息请参阅 函数简介。 有关函数操作的更多信息请参阅 函数的增删改查。 触发函数 函数计算支持事件触发,即当某个事件发生时触发函数的执行。例如配置 OSS 触发器后,当 OSS 对应 Bucket 中有对象新增或删除后都会触发函数的执行,方便您处理上传的对象。配置日志服务触发器,当日志服务对应 Logstore 中有新日志写入后可以触发函数的执行,方便您处理写入的日志。您需要设置触发器来设置事件触发的方式。 函数计算目前支持的触发器请参考 触发器列表 。 有关触发器的更多信息请参阅 触发器简介。 有关触发器操作的更多信息请参阅 触发器的增删改查。 如果不配置触发器,您也可以使用控制台、命令行工具 fcli 或者 SDK 等方式直接调用函数执行。 查看执行日志 查看日志是帮助您调试的一个重要环节。关于使用函数计算配置日志并查看日志,请参阅 函数日志。 查看服务监控 您可以在函数计算 控制台 上查看服务监控。 关于监控指标的更多信息,请参阅 监控指标参考手册。 关于监控数据访问的更多信息,请参阅 监控数据访问指南。

1934890530796658 2020-03-27 16:03:17 0 浏览量 回答数 0

问题

关于主线程收不到信号的问题

a123456678 2019-12-01 19:46:18 910 浏览量 回答数 1

回答

函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功能。 借助函数计算,您可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费。 工作流程 函数计算工作流程如下图所示: 数据流向 编号说明 ①. 开发者使用编程语言编写应用和服务。函数计算支持的开发语言请参考 开发语言列表。 ②. 开发者上传应用到函数计算。上传途径包括 函数计算控制台(推荐)、命令行工具 Fun(推荐)、API/SDK 以及 命令行工具 fcli。 ③. 触发函数执行。触发方式包括 OSS、API 网关、日志服务、表格存储以及函数计算 API/SDK 等。 ④. 动态扩容以响应请求。函数计算可以根据用户请求量自动扩容,该过程对您和您的用户均透明无感知。 ⑤. 根据函数的实际执行时间按量计费。函数执行结束后,可以通过账单来查看执行费用,收费粒度精确到 100 ms。更多详情,请参阅 计费方式。 集成服务 函数计算以事件驱动的方式连接其他服务。借助这些方式,您可以构建弹性的、可靠的以及安全的应用和服务,甚至在数天内就能完成一套多媒体数据处理后端服务。当事件源触发事件时,我们会自动调用关联的函数处理事件。例如,对象存储(OSS)在新对象创建 / 删除事件(ObjectCreated/ObjectRemoved)时会自动触发函数处理。或者 API 网关在收到 HTTP 请求时自动触发函数处理请求。此外,函数还可以由 日志服务 或者 表格存储 等其他阿里云服务触发。 函数计算支持的事件源类型请参考文章 触发器列表。 无服务器架构 假设您计划采购服务器开发一款短视频社交应用,那么您需要考虑很多的问题,例如: 如何构建和运维一套弹性的稳定的视频处理后端服务? 需要采购多少台服务器? 服务器采用什么规格? 如何配置网络和操作系统? 如何部署环境? 如何负载均衡? 如何动态伸缩? 如何升级配置? 如何应对服务器宕机? 如何应对用户请求峰值? 如何应对系统监控报警? …… 可喜的是,基础设施的云化,使您能快速调动和使用海量计算资源,无需担心如何短时间内获取合适规格的服务器。但当前云计算的抽象粒度大多在机器级别,要管理和使用这些计算资源仍然有不小的门槛和成本。阿里云函数计算为解决计算成本和效率问题而生,将计算服务的抽象粒度提高到了函数级别,打造无服务器概念的应用设计模式。 使用函数计算,你无需管理底层的基础设施,只需要将您的代码部署到函数计算,并以事件驱动的方式触发函数执行,服务就可以平稳运行。您无需再为环境部署、服务器扩容、服务器宕机等问题烦恼,函数计算提供弹性的扩容机制,并按量计费。此外,函数计算提供日志查询、性能监控和报警等功能,帮助您快速定位问题、排查故障。 产品优势 因此,函数计算主要具备以下优势: 您无需采购和管理服务器等基础设施,运维成本低。 您只需专注业务逻辑的开发,使用函数计算支持的 开发语言 设计、优化、测试、审核以及上传自己的应用代码。 以事件驱动的方式触发应用响应用户请求。与阿里云 对象存储OSS、API 网关、日志服务 和 表格存储 等服务无缝对接,帮助您快速构建应用。例如,通过 OSS 解决图片和视频的存储问题,当有新数据写入您的 OSS 资源时,自动触发函数处理数据。 提供日志查询、性能监控和报警等功能快速排查故障。 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力。 按需付费,支持百毫秒级别收费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景。更多详情,请参阅 计费方式。 学习路径 您可以通过 函数计算学习路径图 快速了解产品,由浅入深学习使用和运维函数计算。

1934890530796658 2020-03-27 16:02:38 0 浏览量 回答数 0

问题

如何自定义ETL?

轩墨 2019-12-01 21:55:51 1872 浏览量 回答数 0

问题

函数计算

黄一刀 2020-04-04 03:07:45 80 浏览量 回答数 1

回答

5、6、7行实现了对一个int数组A的折半的处理。类似折半查找的思路。maxsubsum是一个通用的处理int数组的函数,参数中数组起、止下标。在函数中通过计算起、止下标的一半将数组分成左右两部分,再递归调用maxsubsum函数,继续对左右两半进行拆分处理,直到拆分为单个int值再进行计算后逐级递归返回,就能或者处理结果了

美人迟暮 2019-12-02 01:25:17 0 浏览量 回答数 0

回答

在React中,如果是由React引发的事件处理(比如通过onClick引发的事件处理),调用setState不会同步更新this.state,除此之外的setState调用会同步执行this.state 。所谓“除此之外”,指的是绕过React通过addEventListener直接添加的事件处理函数,还有通过setTimeout/setInterval产生的异步调用。 原因: 在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新this.state还是放到队列中回头再说,而isBatchingUpdates默认是false,也就表示setState会同步更新this.state,但是,有一个函数batchedUpdates,这个函数会把isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会调用这个batchedUpdates,造成的后果,就是由React控制的事件处理过程setState不会同步更新this.state。 注意: setState的“异步”并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形式了所谓的“异步”,当然可以通过第二个参数 setState(partialState, callback) 中的callback拿到更新后的结果。

九旬 2020-05-24 12:32:07 0 浏览量 回答数 0

回答

Node.js 事件函数 在函数计算服务使用 Node.js 编程,需要定义一个 Node.js 函数作为入口。本文介绍了 Node.js 事件函数的结构和特点。 Node.js HTTP 函数 在函数计算服务使用 Node.js 编程,需要定义一个函数作为入口函数。 本文介绍了 Node.js HTTP 函数,为函数设置 HTTP 触发器后,可以直接处理发来的 HTTP 请求,方便搭建 Web 应用。 Node.js Initializer 函数 Initializer 函数 是实例的初始化函数,保证同一实例成功且仅成功执行一次。 本文介绍了 Node.js Initializer 函数的结构。 Node.js 运行环境 函数计算目前支持 Node.js 6.10(runtime = nodejs6)、Node.js 8.9.0(runtime = nodejs8)和 Node.js 10.15.3(runtime = nodejs10)运行环境。本文介绍了 Node.js 运行环境的以下内容:

1934890530796658 2020-03-27 16:23:19 0 浏览量 回答数 0

回答

由于安全审计问题,您需要从OSS(多个地域)过去一年的数据(1 个小时一个文件)中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云函数计算,您将高峰期每 2 小时的访问日志,或者低谷期每 4 小时的访问日志交给一个计算函数处理,并将处理结果存到RDS中。使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。 这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同地域无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,您的VPC使用了24位掩码)。 下面结合阿里云的函数计算产品来讲解各个应用场景中地架构以及如何解决场景中的痛点。阿里云的函数计算是基于Serverless这种架构实现的一个全托管产品,用户只需要上传核心代码到函数计算,就可以通过事件源或者SDK&API来运行代码。函数计算会准备好运行环境,并根据请求峰值来动态扩容运行环境。函数计算是按照执行时间来计费,请求处理完成后,计费停止,对于有业务请求有明显高峰和低谷的应用来说,相对节省成本。 下图是函数计算的一个开发者试用操作流程: 开发者编写代码,目前支持的语言Java、NodeJS、Python等语言。 把代码上传到函数计算上,上传的方式有通过API或者SDK上传,也可以通过控制台页面上传上传,还可以通过命令行工具Fcli上传。 通过API&SDK来触发函数计算执行,同样也可以通过云产品的事件源来触发函数计算执行。 函数计算在执行过程中,会根据用户请请求量动态扩容函数计算来保证请求峰值的执行,这个过程对用户是透明无感知的。 函数执行结束后,可以通过账单来查看执行费用,根据函数的实际执行时间按量计费,收费粒度精确到100ms。

游客pklijor6gytpx 2019-12-02 03:24:00 0 浏览量 回答数 0

问题

redis 回调函数在哪里执行?

落地花开啦 2019-12-01 20:00:26 1117 浏览量 回答数 1

回答

要设置为外部中断,第一步首先应该要确定该外部中断的中断号,确定中断号,可以通过插芯片资料,或者是通过gpio_to_irq函数,获取该GPIO所对应的中断号。第二步:找到中断号之后,就应该使用irq_request函数申请中断,在申请中断时候需要上一步所得到的中断号、中断触发方式(高电平触发、上升沿触发等)等参数。第三步:就是编写中断处理函数了,编写中断处理函数需要注意的是,在里面不能使用一些延时,或者可能导致进程休眠的操作。这样容易导致系统死机。第四步:当然是注销该中断函数了。

云栖技术 2019-12-02 02:36:37 0 浏览量 回答数 0

回答

window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()是 DOM 结构绘制完毕后就执行,不必等到加载完毕。 /* * 传递函数给whenReady() * 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用 */ var whenReady = (function() { //这个函数返回whenReady()函数 var funcs = []; //当获得事件时,要运行的函数 var ready = false; //当触发事件处理程序时,切换为true //当文档就绪时,调用事件处理程序 function handler(e) { if (ready) return; //确保事件处理程序只完整运行一次 //如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好 if (e.type === "onreadystatechange" && document.readyState !== "complete") { return; } //运行所有注册函数 //注意每次都要计算funcs.length //以防这些函数的调用可能会导致注册更多的函数 for (var i = 0; i < funcs.length; i++) { funcs[i].call(document); } //事件处理函数完整执行,切换ready状态, 并移除所有函数 ready = true; funcs = null; } //为接收到的任何事件注册处理程序 if (document.addEventListener) { document.addEventListener("DOMContentLoaded", handler, false); document.addEventListener("readystatechange", handler, false); //IE9+ window.addEventListener("load", handler, false); } else if (document.attachEvent) { document.attachEvent("onreadystatechange", handler); window.attachEvent("onload", handler); } //返回whenReady()函数 return function whenReady(fn) { if (ready) { fn.call(document); } else { funcs.push(fn); } }; })(); 如果上述代码十分难懂,下面这个简化版: function ready(fn) { if (document.addEventListener) { //标准浏览器 document.addEventListener( "DOMContentLoaded", function() { //注销事件, 避免反复触发 document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); fn(); //执行函数 }, false ); } else if (document.attachEvent) { //IE document.attachEvent("onreadystatechange", function() { if (document.readyState == "complete") { document.detachEvent("onreadystatechange", arguments.callee); fn(); //函数执行 } }); } }

kun坤 2019-12-02 03:23:18 0 浏览量 回答数 0

问题

java 主函数中启动第二个线程,然后主函数继续向下执行

51干警网 2019-12-01 19:41:23 966 浏览量 回答数 1

问题

弱问谭浩强版c++异常处理

a123456678 2019-12-01 20:07:42 789 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站