• .some方法、vh、多列布局、DNS域名解析过程、空页面文字内容渲染


    nodeEndTime.some((time) => !!time)
    这个方法主要用来判断nodeEndTime这个数组中是否有至少一个非假值的元素。它会遍历 nodeEndTime 数组中的每个元素,如果至少有一个元素是真值(不是 nullundefined0false 或空字符串等假值),则 .some() 方法会返回 true,否则返回 false


    多列布局:

    1. column-count
    2. 列数
    3. div {
    4.   column-count: 3; // 将元素中的文本均分3
    5. }
    6. column-gap
    7. 列间隙
    8. div{
    9.   column-gap: 40px; // 列间隙为40px
    10. }
    11. column-rule
    12. 列之间的分隔线样式,类似border,是column-rule-stylecolumn-rule-widthcolumn-rule-color的合写
    13. div {
    14.   column-count: 3;
    15.   column-gap: 20px;
    16.   column-rule: 2px solid red; //  列间以实线分隔
    17. }
    18.  column-span
    19. 规定元素应跨越多少列
    20. div {
    21.   column-count: 3;
    22.   column-gap: 20px;
    23.   column-rule: 2px solid red; 
    24. }
    25. h2{
    26.   column-span: 3 | all;  // h2标题横跨3列或者全列
    27. }

    空页面

    1. export default function EmptyPage(props: Props) {
    2. const { children, className = '', content, flexBox, showPicture = true, style } = props;
    3. //这部分函数主要展示图片下方的文字内容
    4. const renderChildrenView: (children: any) => any = (children) => {
    5. // 使用 Children.map 遍历子元素
    6. return Children.map(children, (child) => {
    7. // 如果子元素的类型是布尔值、数字、字符串、或者未定义,或者是 null,则直接返回该子元素
    8. if (['boolean', 'number', 'string', 'undefined'].includes(typeof child) || child === null) {
    9. return child;
    10. }
    11. // 如果子元素的类型是 'a' 或者具有 type 属性为 'link',则添加样式 'performance-empty-page__link'
    12. if (child.type === 'a' || child.props.type === 'link') {
    13. let className = 'performance-empty-page__link';
    14. // 如果子元素已经有 className 属性,将 'performance-empty-page__link' 添加到已有的类名中
    15. if ('className' in child.props) {
    16. className = child.props.className + ' ' + className;
    17. }
    18. // 使用 React.cloneElement 复制子元素,并设置新的 className 属性
    19. return React.cloneElement(child, { className });
    20. }
    21. // 如果子元素有子元素(嵌套结构),递归调用 renderChildrenView 处理子元素的子元素
    22. if (child.props.children) {
    23. return React.cloneElement(child, {}, renderChildrenView(child.props.children));
    24. }
    25. // 如果以上条件都不满足,直接返回子元素
    26. return child;
    27. });
    28. };
    29. return (
    30. <div
    31. className={classNames('performance-empty-page', className, {
    32. flex: flexBox,
    33. })}
    34. style={style}
    35. >
    36. {showPicture && (
    37. <img
    38. className="performance-empty-page__picture"
    39. src={require('./empty-page-bg.png')}
    40. alt={getLocale('Pro_Butt_Nodata')}
    41. />
    42. )}
    43. //如果||后面直接用children,则不会渲染a标签,只是正常输出文字。
    44. <div className="performance-empty-page__contnet">{content || renderChildrenView(children)}div>
    45. div>
    46. );
    47. }

    DNS域名解析过程:

     这部分内容总结自     http://t.csdnimg.cn/oMBfL  

    1.浏览器客户端检查自身有没有该域名的缓存,如果自身有缓存,直接返回该域名对应的IP地址,解析结束。如果浏览器没有缓存,浏览器会去检查操作系统缓存中有没有对应的已解析过的结果。

    2.如果浏览器和操作系统都没有缓存,那么会请求 本地域名服务器(LDNS)来解析这个域名,这台服务器一般在距离你的主机比较近的位置,一般情况都会缓存着你要解析域名的结果,大多数的域名在这里就能解析完成了。

    3.如果本地域名服务器仍然没有解析这个域名,就直接跳到Root Server( 根域名服务器 )请求解析。

    4.根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)的地址;

    5.此时LDNS再发送请求给上一步返回的gTLD Server主域名服务器

    6.接受请求的gTLD查找并返回给LDNS注册这个域名时候的Name Server (注册该域名的服务器) 的地址;

    7.LDNS再向Name Server发起解析请求,Name Server会根据映射关系表直接找到目标ip,返回给LDNS

    8.LDNS会缓存这个域名和对应的ip,然后把解析的结果返回给用户;

    9.用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束;

    极端情况下,LDNS扮演者核心中转角色,与ROOT DNS Server 根域名服务器,

    gTLD Server .xxx对应的主域名服务器 ,Name Server 注册待解析域名的服务器 进行了三次一去一回的循环式交付,最终拿到结果。

  • 相关阅读:
    设计模式复习
    fdbus之CBaseClient类和CBaseServer类
    【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)
    electron 基础(2)
    hadoop 日志聚集功能配置 hadoop(十一)
    警惕 有种过敏叫“牛奶蛋白过敏”
    【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成
    Android Activity 重载 onConfigurationCangerd之屏幕方向改变
    .NET 7 的 AOT 到底能不能扛反编译?
    Apache Ranger 的架构是怎样的?
  • 原文地址:https://blog.csdn.net/qq_56918166/article/details/133637935