我对 Twitter 前 10 行源代码的理解

本文最初发布于 CSS-Tricks 博客,由 InfoQ 中文站翻译并分享。

过去几周,我一直在为我的家具租赁公司Pabio招聘一名高级全栈JavaScript 工程师。由于是一个远程团队,面试是在 Zoom 上进行的。根据我的观察,部分开发人员不擅长现场编码或白板面试,即使他们对这项工作很在行。所以取而代之,我们会进行一小时的技术讨论,我会问他们关于 Web Vitals、可访问性、浏览器战争以及其他类似 Web 话题的问题。我很喜欢问的一个问题是:“解释一下 Twitter 源代码的前十几行”。

我认为这是一个很简单的测试,可以借此了解应聘者对前端基础知识的掌握程度。本文列出了这个问题的最佳答案。

我打开 Twitter.com,点击查看源代码并分享我的屏幕,然后要求他们逐行进行解释,他们想说多少就说多少。我放大了文本,使其更加清晰,所以你看不到整行的内容,不过可以大概有个了解,如下所示:

注意,既然我们的技术讨论是一种谈话,所以我并不期望任何人能给出完美答案。只要听到一些正确的关键词,我就知道应聘者了解这个概念,我就会试着把他们引向正确的方向。

每个源代码文档的第一行都非常适合这个面试,因为应聘者对DOCTYPE声明的了解程度与他们的工作年限密切相关。我仍然记得,在 Dreamweaver 时代,XHTML DOCTYPE 行很长,就像 2009 年 Chris 在文章“常见DOCTYPE”中所写的那样。

最佳答案:这是文档类型(doc-type)声明,我们总是把它放在 HTML 文件的第一行。你可能认为这些信息是多余的,因为浏览器已经知道响应的 MIME 类型是text/html;但在Netscape/Internet Explorer时代,浏览器要从多个相互竞争的版本中找出要使用哪个 HTML 标准来渲染页面,这是一项困难的任务。

这一点尤其令人讨厌,因为每个标准都会产生不同的布局,所以采用这个标签是为了让浏览器更容易判断。以前,DOCTYPE标签很长,甚至包括规范链接(有点像现在的 SVG),但幸运的是,<!doctype html>在 HTML5 中得到了标准化,延续了下来。

也可接受:DOCTYPE标签告诉浏览器这是一个 HTML5 页面,应该这样渲染。

这一行代码可以告诉我应聘者是否了解可访问性和本地化的问题。令人惊讶的是,在我的面试中,只有少数人知道dir属性,但这是讨论屏幕阅读器的一个很好的切入点。几乎每个人都能说清楚lang=\”en\”属性,即使他们以前没有用过。

最佳答案:这是 HTML 文档的根元素,其他所有元素都包在这个元素里。它有两个属性:方向和语言。方向属性的值是从左到右,它告诉浏览器代理内容方向;另一个值是从右到左,适用于阿拉伯语等语言,或者是auto,让浏览器自己来决定。

语言属性告诉我们,这个标签里的所有内容都是英文的;你可以把这个值设置为任何语言,甚至可以区分en-usen-gb。这对屏幕阅读器来说也很有用,可以知道用哪种语言来播音。

最佳答案:源代码中的元标签用来提供关于这个文件的元数据。字符集(char-set)属性告诉浏览器要使用哪种字符编码,而 Twitter 使用的是标准的 UTF-8 编码。UTF-8 很好,因为它有很多字符代码点,所以你可以在源代码中使用各种符号和表情。把这个标签放在代码开头附近,这很重要,这样浏览器就不会在遇到这一行之前解析太多的文本;我觉得可以定个这样的规则,就是把它放在文档的前 1000 个字节里,但我认为最好的做法是把它放在<head>的正上方。

顺便提一下,Twitter 似乎是出于性能方面的考虑(加载的代码较少)省略了<head>标签,但我还是喜欢明确定义,因为它是所有元数据、样式等的大本营。

最佳答案:源代码中的这个元标签是为了在小屏幕上(比如智能手机)可以适当调整网页的大小。如果你还记得最早的 iPhone 主题演讲,史蒂夫·乔布斯在那个 4.5 英寸的小屏幕上展示了整个《纽约时报》的网站;在那时,这是一个了不起的功能,你必须捏住放大才能阅读。

现在,网站的设计是响应式的,width=device-width告诉浏览器使用设备的整个宽度作为视口,所以没有水平滚动条,但你甚至可以使用具体的像素值指定宽度。通常,最佳的做法是将初始缩放比例设置为1,宽度设置为device-width,这让人们仍然可以根据自己的需要进行缩放。

还有些值源代码截图中没有显示出来,但你最好也了解下:Twitter 还应用了user-scalable=0,顾名思义,就是禁用了缩放功能。这对可访问性没什么好处,但使网页感觉更像一个本地应用程序。出于同样的原因,它还设置了maximum-scale=1(你可以使用最小和最大缩放比例,并使用两者之间的值限制缩放能力)。一般来说,设置全宽和初始缩放比例就足够了。

大约 50%的应聘者知道 Open Graph 标签,如果他们这个问题回答得比较好,就表明他们了解 SEO。

最佳答案:这个标签是网站名称 Twitter 的 Open Graph(OG)元标签。Open Graph协议是由 Facebook 制定的,目的是使链接更容易打开,并在一个漂亮的卡片布局中显示预览;开发者可以添加各种著作权详情和封面图片,实现花式分享。而事实上,使用 Puppeteer 之类的东西自动生成 Open Graph 图片,现在也很常见。(CSS-Tricks使用了一个WordPress插件来做到这一点。)

另外提一个比较有趣的点,元标签通常具有name属性,但 OG 使用非标准的property属性。我猜这只是 Facebook 的特色。标题、URL 和描述 Open Graph 标签有点多余,因为我们已经有了这些常规的元标签,人们添加它们只是为了安全。现在的大多数网站都搭配使用 Open Graph 和其他元标签以及页面上的内容来生成丰富多彩的预览。

大多数应聘者都不知道这个,但有经验的开发者可以谈下如何针对苹果设备优化网站,比如apple-touch-icon和 Safari 固定标签 SVG。

最佳答案:你可以将网站固定在 iPhone 主屏幕上,让它感觉像一个原生应用程序。Safari 不支持渐进式 Web 应用,你也无法在 iOS 上使用其他浏览器引擎,所以如果你想要类似于原生的体验,真的没有其他选择,当然,Twitter 是喜欢这种体验的。所以他们添加了这个,告诉 Safari 这个应用的标题是 Twitter。下一行类似,控制应用程序启动后状态栏如何显示。

最佳答案:这是一个符合 Web 标准的、相当于苹果状态栏颜色元标签的标签。它告诉浏览器周边UI使用什么主题色。Chrome on Android 和 Brave on Desktop 在这方面都做得很好。你可以把任何 CSS 颜色放在内容中,甚至可以使用media属性,只为特定的媒体查询显示这种颜色,如支持深色主题。你也可以在 Web 应用清单中定义这个及其他属性。

我面试过的人都不知道这个。我想,只有对标准化阶段发生的所有新鲜事都有深入的了解时,才会知道这个。

最佳答案:起源试验让我们可以在网站上使用实验性的新特性,跟踪用户代理反馈,并报告给 Web 标准社区,而无需用户选择加入一个特性标识。例如,Edge 有一个针对双屏和可折叠设备基元的起源试验,这非常酷,因为你可以根据可折叠手机是打开还是关闭来设置有趣的布局。

也可接受:这个我不知道。

几乎没有人知道这一行;只有了解 CSS 的边缘情况和优化时,才能看懂这一行。

最佳答案:想象一下,如果没有一个移动端响应式站点,那么当你在一个小屏幕上打开时,浏览器可能会调大字体,以方便阅读。CSS 的text-size-adjust属性可以用none值禁用,也可以指定一个百分比,允许浏览器调大字体。

在这种情况下,Twitter 设置的最大比例是100%,所以文本不会大于实际尺寸;他们这样做是因为他们的网站已经是响应式的,他们不想冒因浏览器调大字体而破坏布局的风险。它作用于根 HTML 标签,所以它作用于根标签中的所有内容。由于这是一个实验性的 CSS 属性,所以需要供应商前缀。另外,这行 CSS 代码之前少了<style>,但我猜这是在前一行去掉的,所以我们没有看到。

也可接受:我不特别了解这个属性,但-ms-webkit-是非标准属性的供应商前缀,分别针对基于 Internet Explorer 和 WebKit 的浏览器。在 CSS3 刚推出时,我们需要这些前缀,但当属性从实验变为稳定或被采纳到标准中时,这些前缀就消失了,人们转而采用标准化的属性。

Twitter 源代码中的这一行特别有趣,因为你可以跟进一个问题,即网页重置和规范化之间有什么区别。几乎每个人都有一个版本的正确答案。

最佳答案:不同浏览器有不同的默认样式(用户代理样式表),而你希望通过重置属性来覆盖它们,使得网站在不同的设备上看起来都一样。在这种情况下,Twitter 就告诉浏览器删除body标签的默认边距。这只是为了降低浏览器的不一致性,但我更喜欢将样式规范化,而不是重置它们,也就是说,在不同的浏览器上应用相同的默认值,而不是完全删除它们。人们甚至曾经使用* { margin: 0 },这完全是矫枉过正,对性能并不好,但现在,常见的方式是导入normalize.cssreset.css之类的东西(甚至是更新的东西)并在此基础上进行设计。

我一直很喜欢玩浏览器的检查器工具,看一看网站是如何制作的,我就是因为这个想出了这样的面试方法。尽管我自认为算是语义 HTML 方面的专家,但每次这样做时我都会学到一些新东西。

因为 Twitter 主要是一个客户端 React 应用,所以源代码只有几十行。即使这样还是有很多东西可以学!在 Twitter 的源代码中,还有一些更有趣的行,我留给读者做练习。你能在面试中解释其中的多少个?

…告诉浏览器用户可以将 Twitter 添加为一个搜索引擎。

…有许多有趣的属性可供讨论,尤其是nonce

…针对国际登录页。

…在不使用键盘导航时移除焦点轮廓(这里的:focus-visible选择器是 CSS 增强插件)。

了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!

软件下载好轻松 不用下载全家桶——8个极度好用的软件下载网站

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:地铁仔不知道各位是如何给自家的电脑安装软件的呢?我问了一些小伙伴,他们告诉我说,他们日常下载软件都是通过一些大型软件网站下载的。这些网站软件收录丰富,而且这些网站基本上都是通过搜索引擎输入关键字搜索后得出的。

当年这些软件下载网站很单纯,下载个软件,直接点“下载”就OK了。可现在,下载个软件就好比柯南查案一样,不细心点,真的很容易就会中了这些软件下载网站的圈套。

▲所谓的高速下载就是要你安装多一个软件,旁边的本地下载还搞成灰色,让你误以为无法点击。

▲这个高速下载更隐蔽,点击后直接给我下了另外的软件。

▲这个网站更干脆,点下载后直接给你下个不知道什么鬼的软件。

▲这个更离谱,点了高速下载居然给我下载了垃圾软件,愤怒表情包上线~~~

这种诱导下载固然恶心,作为普通用户难道就对此没有办法?除了不去这些网站下载,普通用户可以选择到绿色的网站下载软件。这里收集了8个纯净的软件下载网站,希望能帮助到各位小伙伴。

▲各大官网都会提供多种下载渠道可供选择

各大软件官网,这个是不是相当于废话呢~~~虽然这是废话,但又是大实话。就像我们都熟悉的E宝(Eqic商城)和G胖(Steam),又或者是《原神》、《LOL》这些游戏,在官网下载的速度一般都是优于第三方网站。而且官方出品,靠谱且稳定,还不用担心被套路。

全球最大的绿色无公害软件下载中心,累计已超过十亿次下载。没看错,是十亿次。网站收集了400+款(总容量超过45G)真实的便携式软件(Real PortableApps),最关键一点,这个网站里面的软件都是绿色,不捆绑其他软件的。这算是软件下载业界的一股清流。

比较赞的是,这个网站一直在不断更新,不断收集最新的绿色软件。但美中不足的是,这个网站虽然有中文版,但中文版都是基于英文版机翻的,阅读起来有点别扭。

PortableApps提供一个类似软件中心的软件可供下载使用,but这个软件很多时候都无法连接至网站进行更新。

个人建议直接登录网站,搜索你需要的。日常我们接触比较多的例如Google Chrome、firefox、 PotPlayer等等都有收录。需要提醒一下的是,PortableApps主要是外国的软件收录为主,国内的诸如QQ、微信都没有收录,难道这说明QQ是…….O(∩_∩)O

PortableApps比较赞的软件推荐:GIMP Portable(一款轻量级图片编辑软件)、 7-Zip(轻量级压缩软件,无广告植入)、CopyQ(增强版复制粘贴)、 Everything(功能炒鸡强大的搜索软件)、 Rufus(简单好用的系统启动盘制作软件)、 Autoruns(启动项目管理工具)。

GitHub或许大家都有所耳闻。作为全球最大的源代码托管网站,GitHub上有很多优秀的开源软件可供下载。可这些开源软件星罗棋布,要想找到合适自己的还真不容易。Windows绝妙项目的GitBook是一个将GitHub上很多优秀的开源软件收集起来的网站。

根据这个网站的官方介绍,此网站是受 GitHub 项目 Awesome Windows 启发而建立的。该网站不会收录修改版或破解版,例如无广告版,尽管这些软件可能体验良好,但还是不会收集。而对于符合开源协议的修改版除外。同时,一些以攻击和入侵为主要目的软件,纯粹的网页功能封装以及仅兼容32bit操作系统的,也不会收录。

这个网站对收录的开源软件都会贴上对应的标签,如收费的,跨平台的等等。比较赞的是,对于一些恶意或者是被用户投诉的开源软件,网站还会将其收录至黑名单,提醒用户下载时要注意。

网站号称是正版软件的搬运工。等等,正版软件岂不是又是收费吗?对于经常薅羊毛的我,这事不能接受的。别急,虽然这个网站是正版软件的搬运工,可网站还是会提供不少免费软件给我们下载的。

比较赞的是,这个网站也有不少限免活动(就是那种限时免费拿,过期就收费那种),譬如这个AOMEI Partition Assistant Pro-专业磁盘分区管理软件,原价要49美刀,限免领取。一经入库即可永久使用。

划重点——要想拿到限免软件激活码,需要注册会员。第一次注册会员可以获得50金币,每次获取限免软件序列号要扣除相应金币(基本是个位数,相当于首次注册后,至少可以获得十个左右的序列号)。金币可以通过发表文章、评论、签到等方式获得。个人建议,合理发表评论是最快获得足额金币的最佳方法。

PS.虽然限免挺香,但限免也有一些限制,如限免版本不支持重装、不支持升级、部分软件无中文版等等。总的来说,限免版的限制还是有不少,有需要的小伙伴请自行索要即可。

这是一个非常纯净的操作系统及操作系统必备资源的网站,建站已有十四年。最新版网站需要注册才可以访问,各位萌新要注意咯。

▲这是旧版本

▲这个是新版。访问旧版网址会弹出提示,按提示操作即可

我告诉你网内置的操作系统镜像都是基于官方镜像,纯净无杂质,且下载速度快。据说就连微软内部人士也喜欢用这个网站的操作系统镜像。

Microsoft Store是微软在 Windows10操作系统添加的一款集成了多款应用的软件下载中心(最新的Windows11也有的),可以看成是类似于大家熟悉的App Store和应用市场。

从 Microsoft Store 下载的软件格式为 UWP,这样可以最大限度保证从Microsoft Store下载软件不包含捆绑或软件全家桶,且卸载后不会在硬盘及注册表残留垃圾。

除了常用的软件可通过 Microsoft Store 下载外, Microsoft Store 推荐下载的软件有这些——画图3D、简影(类似豆瓣)、QuickLook(快速预览文件内容)、 ShareX(比操作系统内置截图更好用的截图软件)。

PS..很多时候在操作系统中打开 Microsoft Store 总是会提示无法连接的错误信息,这里给两个解决方法——可以直接访问 Microsoft Store的官网https://www.microsoft.com/store/apps,或者是去微软技术社区论坛https://answers.microsoft.com进行提问。

Fosshub是一个专门提供免费开源软件的网站,没有恶意软件,没有捆绑,而且软件质量还都挺高的。但有两点不足,其一,这个网站仅有英文,没有中文。但可以利用浏览器的翻译功能,直接翻译成中文。至于翻译质量,只能说凑合着用还是可以的。

第二,就是这个网站的软件数量不太多。虽然数量不多,但里面的软件都是比较优质的,如Everything、CopyQ这类软件都有收录。内置的软件更新也比较及时,只要有新版本发布,网站都是及时跟进。

这是一个不断更新294个便携软件的网站,没看错,这个网站仅针对其管理的294个软件进行更新,不会多也不会少。这294个便携软件算是网站优中选优的,很多我们耳熟能详的软件也有收录,如Firefox、uTorrent、CrystalDiskMark等等。这个网站跟Fosshub网站一样,不提供中文,需要中文的小伙伴请自行使用翻译工具翻译后使用。

好了,以上就是我的个人分享,希望能对各位有所帮助。如有疑问或者是不明白的,欢迎在评论区给我留言。谢谢收看。

作者声明本文无利益相关,欢迎值友理流,和谐讨论~

免费php网站源码分享

当需要编写一个PHP网站的源码时,需要考虑您的具体需求和网站的功能。以下是一个简单的PHP网站源码示例,演示了一个基本的登录系统和显示用户信息的功能。

<!DOCTYPE html>

<html>

<head>

<title>简单的PHP网站</title>

</head>

<body>

<?php

//检查用户是否已登录

session_start();

if(isset($_SESSION[\’user_id\’])){

//如果已登录,显示用户信息

echo\'<h1>欢迎您,\’.$_SESSION[\’username\’].\'</h1>\’;

echo\'<p><a href=\”logout.php\”>注销</a></p>\’;

}else{

//如果未登录,显示登录表单

if($_SERVER[\’REQUEST_METHOD\’]==\’POST\’){

//处理登录表单提交

$username=$_POST[\’username\’];

$password=$_POST[\’password\’];

//假设这里有一个用户数据库,检查用户名和密码是否匹配

//这里应该包括数据库连接和查询逻辑

if($username===\’user\’&&$password===\’password\’){

//登录成功,设置会话变量

$_SESSION[\’user_id\’]=1;

$_SESSION[\’username\’]=$username;

echo\'<h1>欢迎您,\’.$username.\'</h1>\’;

}else{

//登录失败,显示错误消息

echo\'<p>登录失败,请重试。</p>\’;

}

}else{

//显示登录表单

echo\’

<h1>登录</h1>

<form method=\”post\”action=\”\”>

<label for=\”username\”>用户名:</label>

<input type=\”text\”id=\”username\”name=\”username\”required><br>

<label for=\”password\”>密码:</label>

<input type=\”password\”id=\”password\”name=\”password\”required><br>

<input type=\”submit\”value=\”登录\”>

</form>

\’;

}

}

?>

</body>

</html>

这只是一个非常简单的示例,用于演示基本的登录功能。实际的网站源码可能会更复杂,并包括数据库连接、用户注册、会话管理、安全性考虑等。此示例中的用户名和密码存储在代码中,实际应用中应该使用数据库来存储用户信息并进行安全性验证。

以上内容由【免费】提供企业【网站源码】的【名扬银河企业网站系统】原创发布,

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。