深入理解前端性能监控

页面的性能问题是前端开发中一个重要环节,但一直以来我们没有比较好的手段,来检测页面的性能。直到W3C性能小组引入的新的API window.performance,目前IE9以上的浏览器都支持。它是一个浏览器中用于记录页面加载和解析过程中关键时间点的对象。放置在global环境下,通过JavaScript可以访问到它。

使用性能API

你可以通过以下方法来探测和兼容performance:

var performance = window.performance || 
    window.msPerformance || 
    window.webkitPerformance;
if (performance) {
    // 你的代码
}
复制代码

先来了解一下performance的结构

performance.memory是显示此刻内存占用情况,它是一个动态值,其中: usedJSHeapSize表示:JS 对象(包括V8引擎内部对象)占用的内存数 totalJSHeapSize表示:可使用的内存 jsHeapSizeLimit表示:内存大小限制 通常,usedJSHeapSize不能大于totalJSHeapSize,如果大于,有可能出现了内存泄漏。

performance.navigation显示页面的来源信息,其中:

        

聊聊 Redis 使用场景

本文,是升级版,补充部分实战案例。梳理几个场景下利用 Redis 的特性可以大大提高效率。

随着数据量的增长,MySQL 已经满足不了大型互联网类应用的需求。因此,Redis 基于内存存储数据,可以极大的提高查询性能,对产品在架构上很好的补充。在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。

缓存

对于热点数据,缓存以后可能读取数十万次,因此,对于热点数据,缓存的价值非常大。例如,分类栏目更新频率不高,但是绝大多数的页面都需要访问这个数据,因此读取频率相当高,可以考虑基于 Redis 实现缓存。…

10分钟快速入门Redis

目录

如何画出一张合格的技术架构图?

摘要: 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。

image

阿里妹导读:技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。

接下来,阿里巴巴技术专家三画,将分享自己和团队在画好架构图方面的理念和经验,希望对你有所帮助。

当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况:

  • 对着画布无从下手、删了又来?
  • 如何用一张图描述我的系统,并且让产品、运营、开发都能看明白?
  • 画了一半的图还不清楚受众是谁?
  • 画出来的图到底是产品图功能图还是技术图又或是大杂烩?
  • 图上的框框有点少是不是要找点儿框框加进来?
  • 布局怎么画都不满意……

如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。

先厘清一些基础概念

1、什么是架构?

架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。

架构是结构和愿景。

系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。

做好架构是个复杂的任务,也是个很大的话题,本篇就不做深入了。有了架构之后,就需要让干系人理解、遵循相关决策。

2、什么是架构图?

系统架构图是为了抽象地表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。

3、架构图的作用

一图胜千言。要让干系人理解、遵循架构决策,就需要把架构信息传递出去。架构图就是一个很好的载体。那么,画架构图是为了:

  • 解决沟通障碍
  • 达成共识
  • 减少歧义

image

4、架构图分类

搜集了很多资料,分类有很多,有一种比较流行的是4+1视图,分别为场景视图、逻辑视图、物理视图、处理流程视图和开发视图。

场景视图

场景视图用于描述系统的参与者与功能用例间的关系,反映系统的最终需求和交互设计,通常由用例图表示。

image

逻辑视图

逻辑视图用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程,通常由UML的组件图和类图来表示。

image

物理视图

物理视图用于描述系统软件到物理硬件的映射关系,反映出系统的组件是如何部署到一组可计算机器节点上,用于指导软件系统的部署实施过程。

image

处理流程视图

处理流程视图用于描述系统软件组件之间的通信时序,数据的输入输出,反映系统的功能流程与数据流程,通常由时序图和流程图表示。

image

开发视图

开发视图用于描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。

image

以上 5

Redis基础及深入系列

Redis基础系列-0x001:安装与连接测试
Redis基础系列-0x002:KEY相关操作
Redis基础系列-0x003:String
Redis基础系列-0x004:Hash
Redis基础系列-0x005:List
Redis基础系列-0x006:Set
Redis基础系列-0x007:Sorted Set
Redis基础系列-0x008:发布订阅模式
Redis基础系列-0x009:事务
Redis深入系列-0x010:redis-cli--Redis命令行接口(上)
Redis深入系列-0x011:redis-cli--Redis命令行接口(中)
Redis深入系列-0x012:redis-cli--Redis命令行接口(下)
Redis深入系列-0x013:redis配置
Redis深入系列-0x014:Redis数据类型和概念介绍(上)
Redis深入系列-0x015:Redis数据类型和概念介绍(下)
Redis深入系列-0x017:Redis同步
Redis深入系列-0x018:Redis同步实践
Redis深入系列-0x019:Redis 持久化

通过PHP单例模式与长连接减少MySql连接数

在Mysql驱动的PHP网站中,MySql连接的一般都是利用脚本的结束来进行释放,在一些分层写的php网站中,若一个页面含有多个数据访问类,由于每个数据访问类都会有数据库的连接,导致这一个页面在脚本结束前会有多个数据库连接,在一些大型的页面连接可能多至数十上百,为此需要进行必要的控制,对于解释性的PHP语言,脚本是顺序执行的,也就是说数据库连接的利用同时只有一个,根据这个特点,可以用单例模式来进行改造。

<?php
  class ConnecToDB
  {
      private static $instance;
      private function _constuct()
      {
      } //私有构造函数,防止外界构造新对象,
      public static function GetConnec()
      {
          if (!self::$instance instanceof self) {
              self::$instance =new self;//若当前对象实例不存在
          }
          $temp=self::$instance; //获取当前单例
            return $temp::Con() ;  //调用对象私有方法连接 数据库
      }
      //连接到数据库
      private static function 
                    

PHP环境变量如何工作

介绍

Laravel,Symfony和其他现代PHP框架使用环境变量来存储从一台机器更改为下一台机器的安全凭证和配置。

最新的Laravel版本对环境变量的加载方式做了一些小改动。这一变化最终破坏了第三方图书馆Laravel本身

随后的讨论清楚地表明,许多开发人员(包括我自己)都没有意识到PHP中的复杂环境变量实际上是多少。有很多方法可以阅读它们,因为它们可以编写它们而且没有一个选项是万无一失的。

让我们分解环境变量,它们如何工作以及如何在代码中正确使用它们。…

浏览器原生的图片懒加载

在这篇文章中,我们将看看为网络loading带来原生<img><iframe>懒惰加载的新属性。对于好奇的人来说,这里有一个实际的预览:

<img src="celebration.jpg" loading="lazy" alt="..." />
<iframe src="video-player.html" loading="lazy"></iframe>

我们希望能够为loadingChic 75提供支持,并正在深入研究我们即将发布的功能。在那之前,让我们深入了解它的loading工作原理。…