首页 文章 精选 留言 我的

精选列表

搜索[明略科技],共10000篇文章
优秀的个人博客,低调大师

前端黑科技:美团网页首帧优化实践

前言 自JavaScript诞生以来,前端技术发展非常迅速。移动端白屏优化是前端界面体验的一个重要优化方向,Web 前端诞生了 SSR 、CSR、预渲染等技术。在美团支付的前端技术体系里,通过预渲染提升网页首帧优化,从而优化了白屏问题,提升用户体验,并形成了最佳实践。 在前端渲染领域,主要有以下几种方式可供选择: CSR 预渲染 SSR 同构 优点 不依赖数据FP 时间最快客户端用户体验好内存数据共享 不依赖数据FCP 时间比 CSR 快客户端用户体验好内存数据共享 SEO 友好首屏性能高,FMP 比 CSR 和预渲染快 SEO 友好首屏性能高,FMP 比 CSR 和预渲染快客户端用户体验好内存数据共享客户端与服务端代码公用,开发效率高 缺点 SEO 不友好FCP 、FMP 慢 SEO 不友好FMP 慢 客户端数据共享成本高模板维护成本高 Node 容易形成性能瓶颈 通过对比,同构方案集合 CSR 与 SSR 的优点,可以适用于大部分业务场景。但由于在同构的系统架构中,连接前后端的 Node 中间层处于核心链路,系统可用性的瓶颈就依赖于 Node ,一旦作为短板的 Node 挂了,整个服务都不可用。 结合到我们团队负责的支付业务场景里,由于支付业务追求极致的系统稳定性,服务不可用直接影响到客诉和资损,因此我们采用浏览器端渲染的架构。在保证系统稳定性的前提下,还需要保障用户体验,所以采用了预渲染的方式。 那么究竟什么是预渲染呢?什么是 FCP/FMP 呢?我们先从最常见的 CSR 开始说起。 以 Vue 举例,常见的 CSR 形式如下: 一切看似很美好。然而,作为以用户体验为首要目标的我们发现了一个体验问题:首屏白屏问题。 为什么会首屏白屏 浏览器渲染包含 HTML 解析、DOM 树构建、CSSOM 构建、JavaScript 解析、布局、绘制等等,大致如下图所示: 要搞清楚为什么会有白屏,就需要利用这个理论基础来对实际项目进行具体分析。通过 DevTools 进行分析: 等待 HTML 文档返回,此时处于白屏状态。 对 HTML 文档解析完成后进行首屏渲染,因为项目中对 id="app加了灰色的背景色,因此呈现出灰屏。 进行文件加载、JS 解析等过程,导致界面长时间出于灰屏中。 当 Vue 实例触发了 mounted 后,界面显示出大体框架。 调用 API 获取到时机业务数据后才能展示出最终的页面内容。 由此得出结论,因为要等待文件加载、CSSOM 构建、JS 解析等过程,而这些过程比较耗时,导致用户会长时间出于不可交互的首屏灰白屏状态,从而给用户一种网页很“慢”的感觉。那么一个网页太“慢”,会造成什么影响呢? “慢”的影响 Global Web Performance Matters for ecommerce的报告中指出: 57%的用户更在乎网页在3秒内是否完成加载。 52%的在线用户认为网页打开速度影响到他们对网站的忠实度。 每慢1秒造成页面 PV 降低11%,用户满意度也随之降低降低16%。 近半数移动用户因为在10秒内仍未打开页面从而放弃。 我们团队主要负责美团支付相关的业务,如果网站太慢会影响用户的支付体验,会造成客诉或资损。既然网站太“慢”会造成如此重要的影响,那要如何优化呢? 优化思路 在User-centric Performance Metrics一文中,共提到了4个页面渲染的关键指标: 基于这个理论基础,再回过头来看看之前项目的实际表现: 可见在 FP 的灰白屏界面停留了很长时间,用户不清楚网站是否有在正常加载,用户体验很差。 试想:如果我们可以将 FCP 或 FMP 完整的 HTML 文档提前到 FP 时机预渲染,用户看到页面框架,能感受到页面正在加载而不是冷冰冰的灰白屏,那么用户更愿意等待页面加载完成,从而降低了流失率。并且这种改观在弱网环境下更明显。 通过对比 FP、FCP、FMP 这三个时期 DOM 的差异,发现区别在于: FP:仅有一个 div 根节点。 FCP:包含页面的基本框架,但没有数据内容。 FMP:包含页面所有元素及数据。 仍然以 Vue 为例, 在其生命周期中,mounted 对应的是 FCP,updated 对应的是 FMP。那么具体应该使用哪个生命周期的 HTML 结构呢? mounted (FCP) updated (FMP) 缺点 只是视觉体验将 FCP 提前,实际的 TTI 时间变化不大 构建时需要获取数据,编译速度慢构建时与运行时的数据存在差异性有复杂交互的页面,仍需等待,实际的 TTI 时间变化不大 优点 不受数据影响,编译速度快 首屏体验好对于纯展示类型的页面,FP 与 TTI 时间近乎一致 通过以上的对比,最终选择在 mounted 时触发构建时预渲染。由于我们采用的是 CSR 的架构,没有 Node 作为中间层,因此要实现 DOM 内容的预渲染,就需要在项目构建编译时完成对原始模板的更新替换。 至此,我们明确了构建时预渲染的大体方案。 构建时预渲染方案 构建时预渲染流程: 配置读取 由于 SPA 可以由多个路由构成,需要根据业务场景决定哪些路由需要用到预渲染。因此这里的配置文件主要是用于告知编译器需要进行预渲染的路由。 在我们的系统架构里,脚手架是基于 Webpack 自研的,在此基础上可以自定义自动化构建任务和配置。 触发构建 项目中主要是使用 TypeScript,利用 TS 的装饰器,我们封装了统一的预渲染构建的钩子方法,从而只用一行代码即可完成构建时预渲染的触发。 装饰器: 使用: 构建编译 从流程图上,需要在发布机上启动模拟的浏览器环境,并通过预渲染的事件钩子获取当前的页面内容,生成最终的 HTML 文件。 由于我们在预渲染上的尝试比较早,当时还没有 Headless Chrome 、 Puppeteer、Prerender SPA Plugin等,因此在选型上使用的是 phantomjs-prebuilt(Prerender SPA Plugin 早期版本也是基于 phantomjs-prebuilt 实现的)。 通过 phantom 提供的 API 可获得当前 HTML,示例如下: 为了提高构建效率,并行对配置的多个页面或路由进行预渲染构建,保证在 5S 内即可完成构建,流程图如下: 方案优化 理想很丰满,现实很骨感。在实际投产中,构建时预渲染方案遇到了一个问题。 我们梳理一下简化后的项目上线过程: 开发 -> 编译 -> 上线 假设本次修改了静态文件中的一个 JS 文件,这个文件会通过 CDN 方式在 HTML 里引用,那么最终在 HTML 文档中的引用方式是 <script src="http://cdn.com/index.js"></script>。然而由于项目还没有上线,所以其实通过完整 URL 的方式是获取不到这个文件的;而预渲染的构建又是在上线动作之前,所以问题就产生了: 构建时预渲染无法正常获取文件,导致编译报错 怎么办? 请求劫持 因为在做预渲染时,我们使用启动了一个模拟的浏览器环境,根据 phantom 提供的 API,可以对发出的请求加以劫持,将获取 CDN 文件的请求劫持到本地,从而在根本上解决了这个问题。示例代码如下: 构建时预渲染研发流程及效果 最终,构建时预渲染研发流程如下: 开发阶段: 通过 TypeScript 的装饰器单行引入预渲染构建触发的方法。 发布前修改编译构建的配置文件。 发布阶段: 先进行常规的项目构建。 若有预渲染相关配置,则触发预渲染构建。 通过预渲染得到最终的文件,并完成发布上线动作。 完整的用户请求路径如下: 通过构建时预渲染在项目中的使用,FCP 的时间相比之前减少了 75%。 作者简介 寒阳,美团资深研发工程师,多年前端研发经历,负责美团支付钱包团队和美团支付前端基础技术。 招聘信息 我们美团金融服务平台大前端研发组在高速成长中,我们欢迎更多优秀的 Web 前端研发工程师加入,感兴趣的朋友可以将简历发送到邮箱:shanghanyang@meituan.com。

优秀的个人博客,低调大师

Python | 四种运行其他程序的黑科技

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码。 为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数. 【方式一】使用os.system()函数运行其他程序 os模块中的system()函数可以方便地运行其他程序或者脚本,模式如下: os.system(command) command: 要执行的命令,如果要向脚本传递参数,可以使用空格分割程序及多个参数。 示例如下: 【方式二】使用ShellExecute函数运行其他程序 除了使用os.system()函数外,还可以使用win32api模块中的ShellExecute()函数来运行其他程序,格式如下: ShellExecute(hwnd, op, file, args, dir, show) hwnd: 父窗口的句柄,如果没有父窗口,则为0 op: 要运行的操作,为open,print或者为空 file: 要运行的程序,或者打开的脚本 args: 要向程序传递的参数,如果打开的是文件则为空 dir: 程序初始化的目录 show: 是否显示窗口 示例如下: 使用ShellExecute函数,就相当于在资源管理器中双击文件图标,系统会打开相应程序运行。 NOTE: win32api安装 http://sourceforge.net/projects/pywin32/files/pywin32/ 因我的是64的操作系统,所以下载了这个:pywin32-216.win-amd64-py2.7 【方式三】使用ShellExecute函数运行其他程序 创建进程: 为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建 一个运行相应程序的进程。其函数格式为: CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr) appName 可执行文件名 cmdLine 命令行参数 procAttr 进程安全属性 threadAttr 线程安全属性 InheritHandle 继承标志 CreationFlags 创建标志 currentDir 进程的当前目录 Attr 创建程序的属性 示例如下: 结束进程: 可以使用win32process.TerminateProcess函数来结束已创建的进程, 函数格式如下: TerminateProcess(handle, exitCode) handle 要操作的进程句柄 exitCode 进程退出代码 或者使用win32event.WaitForSingleObject等待创建的线程结束,函数格式如下: WaitForSingleObject(handle, milisecond) handle : 要操作的进程句柄 milisecond: 等待的时间,如果为-1,则一直等待. 示例如下: 【方式四】使用ctypes调用kernel32.dll中的函数 使用ctypes模块可以让Python调用位于动态链接库的函数。 ctypes模块为Python提供了调用动态链接库中函数的功能。使用ctypes模块可以方便地调用由C语言编写的动态链接库,并向其传递参数。 ctypes模块定义了C语言中的基本数据类型,并且可以实现C语言中的结构体和联合体。ctypes模块可以工作在Windows,Linux,Mac OS等多种操作系统,基本上实现了跨平台。 示例: Windows下调用user32.dll中的MessageBoxA函数。 ctype模块中含有的基本类型与C语言类似,下面是几个基本的数据类型的对照: 原文发布时间为:2018-10-9 本文作者:MayMatrix 本文来自云栖社区合作伙伴“Python专栏”,了解相关信息可以关注“Python专栏”。

优秀的个人博客,低调大师

蚂蚁金融科技:两大发布,实力开放

小蚂蚁说: 随着蚂蚁金服技术的全面开放,更多的金融机构、银行、保险、基金与证券公司可以利用支付宝等业务背后已经验证的成熟技术,进一步提升自身系统的稳定性、安全性、高可用性和强大的扩展能力,同时降低成本,用新型平台技术和数字能力拥抱金融的未来。 前言 向数字化转型的第一步应该如何迈进?这都是当今很多银行面临的实际问题。面对诸多疑惑,蚂蚁金服副总裁刘伟光做出了这样的预言: 1、到2020年,超过50%的银行会完成架构的改造和转型,迎接全面的数字金融时代。在刘伟光看来,50%也是保守的数字,当今,中国的银行业面临着线上线下业务的融合,全面向零售转型,消费信贷需求增长等多方面的需求,架构改造的背后是来自业务的驱动。 2、数字化半径等于业务迭代的半径。未来的金融机构会更加注重数字化、生态连接,场景建设,与互联网合作获得更多的场景和流量,以及自身组织架

优秀的个人博客,低调大师

语音科技圈新动态,亚马逊开放Alexa底层技术

考虑到未来最大的回报可能是来自电子商务领域的服务,亚马逊已经开始提供Alexa的独享优惠,以鼓励人们通过语音购物。 近日,为帮助开发者将Alexa的聊天功能融入他们自己的应用,让用户通过语音控制几乎所有的软件,亚马逊面向开发者开放了他们的Alexa的底层技术。 据悉,这项名为Amazon Lex的服务在去年年末就已经推出了预览版。亚马逊CTO维纳·沃格尔斯(Werner Vogels)表示,目前,亚马逊在语音识别和处理方面的能力已经足以支持用户更便捷的使用对话助手或聊天机器人了,不再像以前的工具那么繁琐难用。 将开放Alexa的底层技术作为一项服务,不仅可以通过数百万的用户,利用人们发送给应用的文本和录音来训练Lex以及Alexa,从而持续改进亚马逊的语音识别技术,还可以帮助亚马逊加快数据收集速度。 据统计,目前Echo等使用Alexa的设备销量大约为1000万台,可以预见,此次开放Alexa的底层技术,亚马逊很有可能成为语音控制计算领域的顶尖企业。 与其他云计算服务一样,亚马逊将根据Lex处理的文本和语音数量向开发者收取一定的费用。此外,考虑到未来最大的回报可能是来自电子商务领域的服务,亚马逊已经开始提供Alexa的独享优惠,以鼓励人们通过语音购物。 原文发布时间: 2017-04-20 14:28 本文作者: 伶轩 本文来自云栖社区合作伙伴镁客网,了解相关信息可以关注镁客网。

优秀的个人博客,低调大师

当当科技品类日满100减50

点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书 ——异步小编​ ​畅销图书篇 ​ ​《Python编程快速上手》 [美] Al Sweigart 斯维加特 著 点击封面购买纸书 基于Python3零基础入门学习书,美亚畅销Python编程入门书,累计销售超10万册 本书是一本面向实践的Python编程实用指南。本书的目的,不仅是介绍Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。本书的首部分介绍了基本Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。第二部分的每一章都有一些项目程序,供读者学习。每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。附录部分提供了所有习题的解答。本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。 ​《Python程序设计(第3版)》 【美】John Zelle(策勒)著 点击封面购买纸书 Python之父作序推荐 ,Python 3 编程入门经典。本书以Python语言为工具教授计算机程序设计。本书强调解决问题、设计和编程是计算机科学的核心技能。本书特色鲜明、示例生动有趣、内容易读易学,适合Python入门程序员阅读,也适合高校计算机专业的教师和学生参考。 ​《数据结构 Python语言描述》 【美】Kenneth A. Lambert(兰伯特)著 点击封面购买纸书 在计算机科学中,数据结构是一门进阶性课程,概念抽象,难度较大。Python语言的语法简单,交互性强。用Python来讲解数据结构等主题,比C语言等实现起来更为容易,更为清晰。 ​《Linux就该这么学》 刘遄著 点击封面购买纸书 双十一销售冠军,异步社区2017年度优秀原创图书,本书旨在打造最简单易学且最具实用性的Linux入门教程,其内容涵盖了最基础的Linux系统安装到各种高级服务的部署(如iptables和firewalld、SSH、Apache、vsftpd、Samba、BIND、DHCP、Postfix、Dovecot、Squid等)。本书还覆盖了红帽RHCSA+RHCE认证的考试内容。通过本书,读者可以迅速入门Linux,为Linux的进阶打好坚实的基础。 ​《深入理解Spring Cloud与微服务构建》 方志朋 著 点击封面购买纸书 谈到微服务,大家众说纷纭,但却很难有一个清晰的概念来描述。微服务不是“银弹”,我理解的微服务是一种文化,而我们要做的就是将微服务的理念运用到实际开发中。经过一系列的技术选型,最终Spring Cloud凭借其成熟的组件、完善的一站式解决方案,最终成为了我们落地微服务的选择。 本书共分16章,全面涵盖了Spring Cloud构建微服务相关的知识点。 1、2章详细介绍了微服务架构和Spring Cloud。第3、4章讲解了用Spring Cloud构建微服务的准备工作。第5~12章以案例为切入点,讲解了Spring Cloud构建微服务的基础组件,包括Eureka、Ribbon、Feign、Hystrix、Zuul、Config、Sleuth、Admint等组件。13~15章讲述了使用Spring Cloud OAuth2来保护微服务系统的相关知识。16章用一个综合案例,全面讲解了如何使用Spring Cloud构建微服务,可以作为实际开发的样例工程。 本书既适合Spring Cloud初学者入门使用,又适合正在做微服务实践的架构师或打算实施微服务的团队作为参考用书,同时也可作为高等院校计算机相关专业的师生用书和培训学校的教材。 少儿编程篇 ​ ​《教孩子学编程(Python语言版)》 【美】Bryson Payne 点击封面购买纸书 本书旨在为家长和老师提供一个叫孩子学会编程和用Python语言解决问题的的指南,书中还包括一些非常典型且实用的案例,来促进学习效果。通过一步步的指导,让学生了解计算机思维,并能够掌握变量、循环、函数等基础概念,以此来提升孩子的动脑动手能力。无论是有一定编程经验的人,还是零基础的读者,你都将成为孩子在计算机编程方面最棒的第一任老师。 ​《趣学Scratch——教孩子学编程》 高慧君著 点击封面购买纸书 Scratch是由MIT美国麻省理工学院所开发的一套图形化程序设计开发平台,采用各种积木方块,借由堆迭积木方块,让学习程序语言的初学者,能直觉性地判断程序的逻辑架构。本书使用Scratch范例学习逻辑判断,全书共分五大篇,由Scratch范例中,了解各种程序结构及运算方式,再辅以完整游戏项目实作,让初学者也能融会贯通程序设计的架构。 ​ ​《Scratch 2.0趣味编程指南》 [美] Jerry Lee Ford,Jr 李福特 著 点击封面购买纸书 少儿编程入门书 全彩色印刷十多个精彩游戏项目寓教于乐适合青少年快速上手 不可多得的亲子编程读本 激发少儿想象力,培养孩子逻辑思维。 通过Scratch 2.0,我们可以更容易、更有趣地学习计算机编程。本书中包含的精彩Scratch 2.0项目和游戏有: +Wiggly 先生的舞蹈 +Scratch 虚拟鱼缸 +家庭影集 +NBA 知识问答游戏 +猜数字游戏 +小猫追球游戏 +疯狂的8 号球游戏 +家庭照片电影 +涂鸦绘图应用程序 +小猫钓鱼应用程序 +Scratch Pong游戏 。 机器学习篇 ​ ​《文本上的算法——深入浅出自然语言处理》 路彦雄 著 点击封面购买纸书 微信整合搜索算法组组长路彦雄全新作品,深入浅出讲解自然语言处理和机器学习技术,微博总阅读量超30万次。 本书结合作者多年学习和从事自然语言处理相关工作的经验,力图用生动形象的方式深入浅出地介绍自然语言处理的理论、方法和技术。本书抛弃掉繁琐的证明,提取出算法的核心,帮助读者尽快地掌握自然语言处理所必备的知识和技能。本书适合从事自然语言处理相关研究和工作的读者参考,尤其适合想要了解和掌握机器学习或者自然语言处理技术的读者阅读。 ​《Python机器学习实践指南》 【美】Alexander T. Combs著 点击封面购买纸书 机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一。 本书结合了机器学习和Python 语言两个热门的领域,通过利用两种核心的机器学习算法来将Python 语言在数据分析方面的优势发挥到极致。全书共有10 章。第1 章讲解了Python 机器学习的生态系统,剩余9 章介绍了众多与机器学习相关的算法,包括各类分类算法、数据可视化技术、推荐引擎等,主要包括机器学习在公寓、机票、IPO 市场、新闻源、内容推广、股票市场、图像、聊天机器人和推荐引擎等方面的应用。 本书适合Python 程序员、数据分析人员、对算法感兴趣的读者、机器学习领域的从业人员及科研人员阅读。 ​《Python机器学习——预测分析核心算法》 【美】Michael Bowles(鲍尔斯)著 点击封面购买纸书 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知 所措。本书从算法和Python 语言实现的角度,帮助读者认识机器学习。 本书专注于两类核心的“算法族”,即惩罚线性回归和集成方法,并通过代码实例来 展示所讨论的算法的使用原则。全书共分为7 章,详细讨论了预测模型的两类核心算法、预测模型的构建、惩罚线性回归和集成方法的具体应用和实现。 本书主要针对想提高机器学习技能的Python 开发人员,帮助他们解决某一特定的项目或是提升相关的技能。 ​点击图片报名 今日话题 促销会让你冲动购物吗?截止时间4月6日17时,留言+转发本活动到朋友圈,小编将选出1名读者赠送异步新书1本。 ​ 延伸推荐 2018年2月新书 2018年1月重磅新书 小学生开始学Python,最接近AI的编程语言:安利一波Python书单 政策升温:大家都在学大数据,一大波好书推荐 8本新书,送出一本你喜欢的 AI经典书单| 入门人工智能该读哪些书? ​ ​长按二维码,可以关注我们哟 每天与你分享IT好文。 在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦! 点击阅读原文,直达100减50活动 阅读原文

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册