日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三分钟学会如何在函数计算中使用 puppeteer

發(fā)布時(shí)間:2024/8/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三分钟学会如何在函数计算中使用 puppeteer 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:?使用 puppeteer 結(jié)合函數(shù)計(jì)算,可以快速的構(gòu)建彈性的服務(wù)完成各種功能,包括:生成網(wǎng)頁截圖或者 PDF、高級(jí)爬蟲,可以爬取大量異步渲染內(nèi)容的網(wǎng)頁、模擬鍵盤輸入、表單自動(dòng)提交、登錄網(wǎng)頁等,實(shí)現(xiàn) UI 自動(dòng)化測(cè)試和捕獲站點(diǎn)的時(shí)間線,以便追蹤你的網(wǎng)站,幫助分析網(wǎng)站性能問題

簡(jiǎn)介

使用 puppeteer 結(jié)合函數(shù)計(jì)算,可以快速的構(gòu)建彈性的服務(wù)完成各種功能,包括:

  • 生成網(wǎng)頁截圖或者 PDF
  • 高級(jí)爬蟲,可以爬取大量異步渲染內(nèi)容的網(wǎng)頁
  • 模擬鍵盤輸入、表單自動(dòng)提交、登錄網(wǎng)頁等,實(shí)現(xiàn) UI 自動(dòng)化測(cè)試
  • 捕獲站點(diǎn)的時(shí)間線,以便追蹤你的網(wǎng)站,幫助分析網(wǎng)站性能問題

接下來,將基于一個(gè)腳手架項(xiàng)目開發(fā)我們自己 puppeteer 項(xiàng)目。

下載項(xiàng)目

>>> git clone -o starter-kit https://github.com/awesome-fc/puppeteer-fc-starter-kit.git your_project_name

項(xiàng)目結(jié)構(gòu)

├── lib ? ? ? ? ? ? ? ? ? ? ? ? chrome headless 依賴的共享庫(kù),打包的時(shí)候,拷貝到打包項(xiàng)目的根目錄下 ├── chrome │ ├── buildChrome.sh ? ?編譯 chrome headless shell 腳本,基于它,可以編譯最新的版本 │ └── headless_shell.tar.gz ? 編譯后的 chrome headless 二進(jìn)制打包文件 ├── src │ ├── index.js ? ?函數(shù)調(diào)用入口文件,函數(shù) handler 為 index.handler,您的業(yè)務(wù)代碼寫在這里 │ └── starter-kit │ ├── config.js ? ?通過環(huán)境變量,獲取相關(guān)配置屬性,如:chrome 執(zhí)行目錄和安裝目錄等配置 │ ├── local.js 本地測(cè)試操作 chrome headless 的 API 是否正確,通過執(zhí)行命令:npm run local │ └── setup.js 安裝 chrome headless 相關(guān)邏輯代碼,如:基于 OSS 安裝或者本地目錄安裝 ├── package.json └── package.zip ? ? 輸出函數(shù)計(jì)算打包文件,通過命令:npm run package 或 npm run package-nochrome

如何寫業(yè)務(wù)代碼

index.js 文件

const setup = require('./starter-kit/setup');exports.handler = async (event, context, callback) => {const browser = await setup.getBrowser(context);exports.run(browser).then((result) => callback(null, result)).catch((err) => callback(err)); };exports.run = async (browser) => {// 實(shí)現(xiàn)您自己的業(yè)務(wù)代碼// 下面是一個(gè)示例代碼,需要替換成您自己的業(yè)務(wù)代碼// 示例實(shí)現(xiàn)了對(duì)固定網(wǎng)頁截圖并返回圖片的功能const page = await browser.newPage();await page.goto('https://fc.console.aliyun.com');return page.screenshot({clip: {x: 200,y: 60,width: 780,height: 450,},}); };

本地測(cè)試

執(zhí)行命令:?npm run local?。測(cè)試您操作 chrome headless 的相關(guān) api 是否正確運(yùn)行。

編譯打包

包含 chrome headless

執(zhí)行命令:npm run package?。命令會(huì)將 chrome headless 文件一起打包進(jìn)項(xiàng)目,放在項(xiàng)目根目錄,函數(shù)執(zhí)行的時(shí)候,默認(rèn)將 chrome headless 安裝到?/tmp?目錄。

不包含 chrome headless

執(zhí)行命令:npm run package-nochrome?。命令不會(huì)將 chrome headless 文件一起打包進(jìn)項(xiàng)目,你需要額外將 chrome-headless 上傳到 OSS,通過環(huán)境變量告訴函數(shù)如何從 OSS 下載并安裝,默認(rèn)將 chrome headless 安裝到?/tmp?目錄。為函數(shù)計(jì)算設(shè)置環(huán)境變量:

  • CHROME_BUCKET(必填): chrome headless 上傳到 OSS 的 bucket
  • CHROME_REGION(必填): chrome headless 上傳到 OSS 的 region
  • CHROME_KEY(必填): chrome headless 上傳到 OSS 的 key。 默認(rèn)值:?headless_shell.tar.gz

部署

編譯打包輸出的文件:package.zip,通過函數(shù)計(jì)算控制臺(tái)或者 fcli 命令工具上傳已打包文件。fcli 上傳已打包文件命令:

# 在相應(yīng) service 目錄下 >>> mkf myFunction -h index.handler -f package.zip -t nodejs8 # 代碼在本地的 package.zip 中

為什么要使用函數(shù)計(jì)算

函數(shù)計(jì)算是一個(gè)相對(duì)較新的事物,可能大部分開發(fā)人員或架構(gòu)師對(duì)它很陌生。微服務(wù)架構(gòu)是當(dāng)下很流行的一種系統(tǒng)架構(gòu),微服務(wù)架構(gòu)有沒有不夠完美的地方?答案是肯定的?;谖⒎?wù)架構(gòu),我們需要考慮使用什么微服務(wù)框架來架構(gòu)系統(tǒng)、需要多少臺(tái)服務(wù)器、如何有效減輕運(yùn)維負(fù)擔(dān)等一些列問題。另外,按照《福布斯》雜志的統(tǒng)計(jì),在商業(yè)和企業(yè)數(shù)據(jù)中心的典型服務(wù)器僅提供 5%~15% 的平均最大處理能力的輸出。這無疑是一種資源的巨大浪費(fèi)。

有沒有辦法解決上面的不足?答案也是肯定的,阿里云函數(shù)計(jì)算就是在這樣的背景下應(yīng)運(yùn)而生的。如果把云計(jì)算理解成一個(gè)執(zhí)行環(huán)境,那么,在這個(gè)環(huán)境里,函數(shù)(即業(yè)務(wù)邏輯的載體)+ 數(shù)據(jù)(即跟業(yè)務(wù)相關(guān)的輸入與輸出)就是應(yīng)用的核心,有了函數(shù)、數(shù)據(jù)、事件這三者,其它任何代碼和框架,無非是整個(gè)應(yīng)用的膠水和UI罷了。那么,最理想的情況就是用最少的時(shí)間寫膠水,將更多的時(shí)間投入到核心應(yīng)用的開發(fā)中,甚至,徹底實(shí)現(xiàn)整個(gè)軟件棧的微服務(wù)化。函數(shù)計(jì)算就是這里的膠水。

開發(fā)效率

項(xiàng)目開發(fā)效率傳統(tǒng)微服務(wù)方式函數(shù)計(jì)算方式
采購(gòu)服務(wù)器等基礎(chǔ)設(shè)施需要不需要
管理服務(wù)器等基礎(chǔ)設(shè)施需要不需要
開發(fā)業(yè)務(wù)服務(wù)模塊需要需要
部署業(yè)務(wù)服務(wù)模塊需要需要,但是很簡(jiǎn)單,提供了很多工具
通過 nginx 搭建反向代理、https 和負(fù)載均衡需要不需要,通過阿里云 API 網(wǎng)關(guān)或函數(shù) HTTP 觸發(fā)器可以實(shí)現(xiàn)
搭建相關(guān)日志服務(wù)需要不需要,通過日志開關(guān)開啟日志服務(wù)
配置安全訪問規(guī)則需要不需要,自帶基礎(chǔ)安全訪問配置,API 網(wǎng)關(guān)提供更多的配置
運(yùn)維負(fù)擔(dān)
開發(fā)效率高,通常幾天就能完成

可靠性

項(xiàng)目可靠性傳統(tǒng)微服務(wù)方式函數(shù)計(jì)算方式
峰值壓力當(dāng)峰值壓力突增時(shí),計(jì)算資源擴(kuò)容不及時(shí)容易導(dǎo)致服務(wù)過載彈性伸縮,面對(duì)峰值壓力
錯(cuò)誤處理需要自行處理服務(wù)器宕機(jī),進(jìn)程崩潰等問題無需處理服務(wù)器等故障,函數(shù)計(jì)算實(shí)現(xiàn)基礎(chǔ)設(shè)施的容錯(cuò)
項(xiàng)目架構(gòu)基礎(chǔ)設(shè)施管理比較復(fù)雜系統(tǒng)架構(gòu)經(jīng)過大量項(xiàng)目的驗(yàn)證和長(zhǎng)時(shí)間的打磨,相對(duì)穩(wěn)定可靠很多

成本

項(xiàng)目成本傳統(tǒng)微服務(wù)方式函數(shù)計(jì)算方式
采購(gòu)服務(wù)器等基礎(chǔ)設(shè)施成本成本高,利用率低
代碼開發(fā)成本成本高,包含基礎(chǔ)架構(gòu)代碼和業(yè)務(wù)代碼成本低,只需關(guān)注業(yè)務(wù)代碼開發(fā)
函數(shù)計(jì)算成本成本低,按需付費(fèi),每月還有一定免額
運(yùn)維成本成本高,難度大成本低,難度很小,甚至可以不需要專門的運(yùn)維人員
集成阿里云其他產(chǎn)品成本,如 OSS 和RDS 等成本高成本低,提供對(duì)阿里云其他產(chǎn)品無縫集成

安全

項(xiàng)目安全傳統(tǒng)微服務(wù)方式函數(shù)計(jì)算方式
身份認(rèn)證和訪問控制需自行實(shí)現(xiàn)除非您顯式的允許匿名調(diào)用函數(shù),函數(shù)計(jì)算將對(duì)每一個(gè) API 調(diào)用進(jìn)行身份驗(yàn)證。只有獲得您的顯式授權(quán)(借助于阿里云訪問控制服務(wù),RAM),您的函數(shù)才可以訪問其他云服務(wù)資源或者被其他用戶/云服務(wù)調(diào)用。借助阿里云 API 網(wǎng)關(guān),您也可以使用 OpenID 等機(jī)制對(duì)函數(shù)調(diào)用進(jìn)行身份驗(yàn)證
操作追蹤和審計(jì)需自行實(shí)現(xiàn)需自行實(shí)現(xiàn)
數(shù)據(jù)安全需自行實(shí)現(xiàn)通過使用訪問控制授權(quán)和函數(shù)計(jì)算環(huán)境變量等功能,您不必再將訪問憑證等敏感信息保存在代碼中。所有您借助函數(shù)計(jì)算服務(wù)持久化保存的數(shù)據(jù),包括代碼、環(huán)境變量等等,都被加密存儲(chǔ)。系統(tǒng)在運(yùn)行代碼之前,將對(duì)代碼進(jìn)行完整性檢測(cè)
運(yùn)行時(shí)安全需自行實(shí)現(xiàn)每個(gè)函數(shù)都在獨(dú)立的、隔離的環(huán)境中被執(zhí)行。函數(shù)計(jì)算提供與阿里云彈性計(jì)算(ECS)相同的隔離強(qiáng)度。函數(shù)計(jì)算會(huì)周期性的重置運(yùn)行時(shí)環(huán)境,并自動(dòng)更新操作系統(tǒng)以及運(yùn)行時(shí)依賴軟件的安全補(bǔ)丁
異常響應(yīng)需自行實(shí)現(xiàn)函數(shù)計(jì)算允許您設(shè)置資源使用的上限,確保您的費(fèi)用消耗可控。同時(shí),函數(shù)計(jì)算提供函數(shù)調(diào)用次數(shù),流控次數(shù),錯(cuò)誤率等指標(biāo)。借助云監(jiān)控,您可以為相關(guān)指標(biāo)設(shè)置監(jiān)控報(bào)警,快速響應(yīng)異常情況

總結(jié)

函數(shù)計(jì)算有如下優(yōu)勢(shì):

  • 無需采購(gòu)和管理服務(wù)器等基礎(chǔ)設(shè)施
  • 專注業(yè)務(wù)邏輯的開發(fā)
  • 提供日志查詢、性能監(jiān)控、報(bào)警等功能快速排查故障
  • 以事件驅(qū)動(dòng)的方式觸發(fā)應(yīng)用響應(yīng)用戶請(qǐng)求
  • 毫秒級(jí)別彈性伸縮,快速實(shí)現(xiàn)底層擴(kuò)容以應(yīng)對(duì)峰值壓力

  • 按需付費(fèi)。只需為實(shí)際使用的計(jì)算資源付費(fèi),適合有明顯波峰波谷的用戶訪問場(chǎng)景

原文鏈接

本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。


總結(jié)

以上是生活随笔為你收集整理的三分钟学会如何在函数计算中使用 puppeteer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。