ホームページ > 記事 > ウェブフロントエンド > フロントエンド最適化に関する不完全なガイド | Aotu.io "Aotu Lab"_html/css_WEB-ITnose
少し長いかもしれませんが、最初に読み方についてお話したいと思います。読んでいただく際には、私をライバルとして扱っていただければ幸いです。私を超えたいなら、私が知っていることを理解する必要がありますね? さて、読み始めてください~ ~ ははは~ ~ ~
公開するまでに 144000000 ミリ秒かかったフロントエンド最適化の章、どう思うかと聞かれたら?
それでは、ミリ秒、ロケット、最適化に関連するこれらの単語を見ると、説明できない親近感が湧きます。
この記事は主に 作業効率、速度パフォーマンス、安定性、応答性、互換性 、検索SEO、情報アクセシビリティなどについて説明します。
フロントエンドの最適化は、人々がスキルを向上できるポイントです。ここから何かを学んでいただければ幸いです。
朝から夜の8時、9時まで、プロダクトマネージャーとコミュニケーションを取ったり、部門内の新商品について雑談したりして忙しい状況に陥ることがよくありますか?ページをオンラインにするのに急いでいて、部門会議が開催できないこともあります~~~
作業効率を向上させるにはどうすればよいですか?
時間管理はすべて計画という言葉と関連付けられます。まずは他の人の月間スケジュールと週間スケジュールを見てみましょう。週間スケジュールが空になっているのは、計画を立てることから始まります:
月間スケジュール:
週間スケジュール:
もちろん、計画はあまりにも簡単なものであってはならず、あまりにも多くの時間を費やすべきではありません。適切な計画を立てることに加えて、実行プロセス中にいくつかの点に注意する必要があります。
ツールを使用する利点は何ですか?
フロントエンドエディタを選択することがより重要です。現在、sublime、webstorm、vim が比較的一般的であるため、Dreamweaver は使用しないことをお勧めします。
現時点では、BracketHighlighter ハイライト、JsFormat、Emmet HTML/CSS クイック編集、DocBlockr プラグインなどのプラグインをインストールし、jsDoc コメントなどをすばやく入力できます。コードスニペットをカスタマイズすることもできます。
どのエディタを使用する場合でも、必要なのは
このエディタに精通し、ショートカット キーに習熟することです。
1.2.2 ブラウザ開発者ツール1.2.3 その他の一般的に使用されるツール
切削ツール: photoshop cc Cutting、Smart Cutting、Cutterman
色測定および距離測定ツール: FastStone Capture 、Mark Eel - デザイン ドラフト アノテーション
画像圧縮: tinypng、スマート イメージ
スプライト画像の生成: spritebox、CSS Sprite Generator、cssgaga
デバッグ ツール: Fiddler、weinre、WeChat デバッグツール;
1.2.4 フロントエンド エンジニアリング
重複はツールを使用して自動的に完了する必要があります。
ツールはたくさんあるので、スプライト画像の自動生成やCSS圧縮、画像圧縮などを行えるツールはないだろうか、ということでフロントエンドエンジニアリングが登場しました。フロントエンド エンジニアリングは一般に 5 つのステップに分けることができます:
(1) 最初に、基本的なディレクトリ構造とスタイル ライブラリを生成します。
(2) 開発、リアルタイム プレビュー、プリコンパイル。
(3) ビルド、プリコンパイル、マージ、圧縮。
(4) 公開、構築された静的ファイルをオンラインで公開します。
(5) パッケージ化、リソースパス変換、ソースコードのパッケージ化。
フロントエンド開発における自動化ツール、パフォーマンスの最適化、モジュラーフレームワーク、開発仕様、コードのデプロイメント、開発プロセスなどの問題を解決するために推奨されるツールを紹介します。また、O2Team が開発したプロジェクト プロセス ツールである athena もあり、対応するディレクトリとコードを生成し、同時にプロジェクトをコンパイルし、一度インストールすればどこでも実行できます。
私が理解しているプログラマーは、知性と「怠惰」の精神を兼ね備えており、怠惰な開発を提唱しています。つまり、問題を明確に理解し、作成するコードが本当に実行できることを保証します。問題を解決する いわゆる「怠惰」が効率をもたらすため、これにより、将来的に無駄なコードを大量に作成することがなくなります。
私たちの経験と経験により、最適なソリューションを選択するためにコードを考える時間が大幅に向上します。そのため、コードをより速く書くことができ、コードの長さもより短くなります。この問題により、コードのデバッグが容易になり、速度も向上します。
経験や経験に基づいて、または他の人の助けを借りて、私たちはそれを整理して自分自身またはチームの標準を形成し、コーディング速度を大幅に向上させることができます。
新しいテクノロジーを使用して作業効率を向上させる方法。私たちは常に使い慣れたテクノロジーを使用して技術ソリューションを開発してきましたが、結局のところ、新しいテクノロジーの学習には依然として時間のコストがかかります。ただし、一般に、新しいテクノロジには、多くの複雑な操作をより簡単に実装し、開発者の効率を向上させるいくつかの優れた新機能が含まれています (ES6 など)。 洞察力を活用して新しいテクノロジーを蓄積すると、役立ちます。
なぜフロントエンドパフォーマンスの最適化が必要なのでしょうか?パフォーマンスを最適化するにはどのような側面から始めればよいでしょうか?
5 秒間ロードされなかったページが回転したり、ページが完全に空白になったりすると、人々は単純に気が狂ってしまいます。ユーザーエクスペリエンスの観点から、フロントエンドのパフォーマンスの最適化は非常に必要です。通常、Web ページの最大読み込み時間は 3 秒を超えることはできません。
まず、Web ページのパフォーマンス指標を決定する必要があります。定量化可能な目標と継続的に追跡される最適化データは、継続的なパフォーマンスの最適化作業を保証するものであり、モチベーションの源でもあります。例:
通常、 3 Web ページのパフォーマンスを確認するには、いくつかの方法があります。
幸いなことに、W3C は開発者のWeb サイトのパフォーマンスを正確に分析および制御し、最終的にパフォーマンスの向上を達成するプロセス。たとえば、ナビゲーション タイミングによって記録された主要な時点を使用して、ページを完了するまでにかかる時間をカウントします。 いくつかの使用方法:
var timing = window.performance.timingtiming.domLoading //浏览器开始解析 HTML 文档第一批收到的字节timing.domInteractive // 浏览器完成解析并且所有 HTML 和 DOM 构建完毕timing.domContentLoadedEventStart //DOM 解析完成后,网页内资源加载开始的时间timing.domContentLoadedEventEnd // DOM 解析完成后,网页内资源加载完成的时间(如 JS 脚本加载执行完毕)timing.domComplete //网页上所有资源(图片等)下载完成,且准备就绪的时间継続的に追跡します。パフォーマンス データを選択し、適切なものを選択すると、履歴データの参照可能性を確保するためにページ パフォーマンス測定ツールまたは API は置き換えられません。また、意識を形成し、重要なビジネスやページについては、パフォーマンスの観点から問題を検討し、フロントエンドのパフォーマンスを損なうビジネス要件や変更を合理的な証拠に基づいて拒否する必要があります。
Yahoo のルールは誰もが知っているので、スクリーンショットを撮らせてください。
以下では、サーバー、ネットワーク、クライアントの 3 つの側面から速度とパフォーマンスの向上をブレークスルーします。
2.1 何もすることがなければ気にしないでください - サーバー
を取得します。確かに、深センのユーザーが米国のリモート サーバーにアクセスするのは理想的ではありません。静的コンテンツを CDN に配布すると、ユーザーの応答時間を 20% 以上短縮できます。 2.1.2 静的リソース キャッシュ、モバイル オフライン キャッシュ
AppCache:
AppCache は主にマニフェスト テキスト ファイルを使用して、キャッシュされたコンテンツとキャッシュできないコンテンツをブラウザーに通知します。
マニフェスト ファイルは 3 つの部分に分割できます:
(1) キャッシュ マニフェスト - この見出しの下にリストされているファイルは、最初のダウンロード後にキャッシュされます。 CACHE
(2) NETWORK - この見出しの下にリストされているファイルはサーバーへの接続が必要であり、キャッシュされません
(3) FALLBACK - この見出しの下にリストされているファイルはフォールバックを指定しますページにアクセスできない場合のページ
AppCache ソリューションを使用する手順:
(1) juqery など、キャッシュする必要がある静的ファイルのリストを整理します。 jsとgb.css。
(2) サーバーのサポートを構成します。
(3) コンテンツ更新メカニズムとブラウザ互換性ソリューションを決定します。
次の方法でリクエストの数を減らすことができます:
リクエストの数を減らすことは、特にネットワーク接続が弱いユーザーにとって、速度の最適化にとって最も重要かつ効果的です。完全なリクエストは、ドメイン名解決と DNS アドレス指定のプロセスを経て、サーバーとの接続を確立し、データを送信し、サーバーの応答を待ち、データを受信する必要があります。各リクエストはデータを運ぶ必要があるため、各リクエストが占有する必要があります。帯域幅、ブラウザが実行する同時リクエスト数には上限があります。リクエストが多すぎると、Web ページの応答時間が明らかに長くなります。ページは複数のモジュールで構成されます。同じリソースが複数のモジュールで要求されると、リソースの要求が繰り返されることになります。
ドメイン名は短く、独立している必要があります。
ドメイン名が短いほど、リクエスト ヘッダーの開始行の URI も短くなるため、短くするとヘッダーのオーバーヘッドが削減されます。独立性が必要な理由は、独立したドメイン名がメイン ドメインの Cookie を共有しないため、この戦略は一般に Cookie フリー ドメインと呼ばれ、もう 1 つの理由はブラウザーが同時接続の数を制限するためです。通常、同じドメイン名に対して 6 ~ 8 の同時接続が許可されるため、各ドメイン名の最初の接続には一定の時間がかかります。ドメイン名の使用を 2 ~ 4 の範囲内で制御します。また、同じ静的リソースが異なるページの異なるサブドメインにハッシュされるため、HTTP キャッシュを利用できなくなることに注意してください。
HTTP 1.1 と比較した HTTP 2 の更新点は主に次の点に焦点を当てています。
HTTP/2 では、各データ ストリームはメッセージの形式で送信され、メッセージは 1 つ以上のフレームで構成されます。複数のフレームは、フレーム ヘッダー内のストリーム識別子に基づいて再組み立てできるため、順序を間違えて送信することができます。
2 番目に注意すべきことは、ページがダウンした場合に回復にどのくらいの時間がかかるか、また、ページがダウンしている期間に静的ページ処理が使用できるかどうかです。ページがダウンしています。
ページの安定性は実はフロントエンドのセキュリティに関係しており、たとえページが公開できたとしてもハッキングされないという保証はありません。安全。
XSS (Cross Site Script) ,跨站脚本攻击,往Web页面里插入恶意html代码。特点是攻击者的代码必须能获取用户浏览器端的执行权限,要杜绝此类攻击出现可以在入口和出口进行严格的过滤。
三种类型:
(1) 反射型XSS:一次性;将包含注入脚本的恶意链接发送给受害者。
(2) 持久型XSS:用户输入的数据“存储”在服务器端,比如一条包含XSS代码的留言。
(3) DOM XSS:使用一些eval等有输出的语句意味着多了一份被XSS的风险。
应对策略:
CSRF(Cross Site Request Forgery),跨站点伪造请求,通过伪造连接请求在用户不知情的情况下,让用户以自己的身份来完成攻击者需要达到的一些目的。
cookie劫持,通过获取页面的权限,在页面中写一个简单的到恶意站点的请求,并获取用户的cookie登录某些站点。
对于crsf 和cookie 劫持的策略:
国内的众多网站都没有实现全站HTTPS。这是目前为止最重要的一步,所有的数据在发送之前就会被加密,攻击者无法查看或篡改数据包的内容。HTTPS可以理解为HTTP+SSL/TLS,通过数据加密、校验数据完整性和身份认证三种机制来保障安全。HTTPS的缺点是网站在加上TLS证书时,可能导致RTT往返时延增加,并且 HTTPS通信过程的非对称和对称加解密计算会产生更多的服务器性能和时间上的消耗,但是这是可以优化的,这里就不细说了。
首先了解一下同源策略:
不建议使用JSONP,因为JSONP通常在脚本中写一个回调函数,然后把回调函数的名字写在请求的URL中,因此如果请求数据的服务器被黑了,那么黑客就能在返回的数据中植入恶意代码,从而窃取用户的隐私信息。
跨域资源共享CORS允许资源提供方在响应头中加入一个特殊的标记,使你能通过XHR来获取、解析并验证数据。这样就能避免恶意代码在你的应用中执行。在响应头中加入的标记如下:
Access-Control-Allow-Origin: allowed origins
如果对Access–Control-Allow-Origin设置为*其实是比较危险的,如果没有携带会话认证意味着信息被公开在全网,建议设置具体的域名,而且跨域的时候记得带上session id;严格审查请求信息,比如请求参数,还有http头信息,因为 http头可以伪造。
CSP指定网站上所有脚本和图片等资源的源站点,也能阻止所有内联(inline)的脚本和样式。即使有人在页面评论或者留言中嵌入了脚本标签,这些脚本代码也不会被执行。可通过两种方式设置,如果 HTTP 头与 Meta 定义同时存在,则优先采用 HTTP 头中的定义:
通过HTML的Meta标签,比如只允许脚本从本源加载:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
其他策略:
缺点:
默认情况下,所有的内联JavaScript脚本都不会被执行,因为浏览器无法区分自己的内联脚本和黑客注入的脚本。
CSP还会默认阻止所有eval()风格的代码的执行,包括setInterval/setTimeout中的字符串和类似于new Function(‘return false’)之类的代码。
利用iframe进行跨源:HTML5为iframe提供了安全属性 sandbox,iframe的能力将会被限制。
Secure能确保cookie的内容只能通过SSL连接进行传输。Secure和HttpOnly属性告诉浏览器cookie的内容只能分别通过HTTP(S)协议进行访问,从而避免了被轻易窃取,比如禁止从JavaScript中的document.cookie访问,因此cookie在浏览器document中不可见了。如果单独使用的话,无法全面抵御跨站点脚本攻击,通常和其他技术组合使用。使用方法如下:
Set-Cookie: <name>=<value>[; <name>=<value>] [; expires=<date>][; domain=<domain_name>][; path=<some_path>][; secure][; HttpOnly]
X-Content-Type-Options 告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。
HPKP(Public Key Pinning) Public Key Pinning 是一个response 头,用来检测一个证书的公钥是否发生了改变,防止中间人攻击。
HSTS (HTTP Strict-Transport-Security) 强制使用TSL作为数据通道。
html5有很多新的特性能力,然而能力越大,被攻破后的危险就越大。HTML5 对xss的影响主要体现在:
比如localstorage只能通过js设置和获取,导致的结果是不能像cookie一样设置httponly等属性,所以localstorage中不能存放敏感信息,最好能够在服务端进行加密,可以配合CORS来获取网站的localstorage的信息。
响应式布局简而言之,就是一个网站能够兼容多个终端,可以为不同终端的用户提供更加舒适的界面和更好的用户体验。
比如凹凸实验室博客页面在PC端、iPad、手机端的排版:
PC端:
iPad:
手机端:
估计很多人对这句话都有体会:IE虐我千百遍,我待IE如初恋。当然,除了 IE 上有兼容性问题,其他浏览器比如 Android 上的低版本浏览器也有较多问题。是否继续保持对低端浏览器的兼容性,我们可以用数据跟产品经理或者老板说话,减少我们的工作量,最好在项目之前就定下来支持最低支持的版本是什么,然后设计一个对应兼容方案。以下是百度统计的2015年的浏览器市场份额数据:
兼容性的原则: 渐进增强与平稳退化 。就是说,在低级浏览器能够保证其可用性和可访问性;渐进增强,在保证代码、页面在低级浏览器中的可用性及可访问性的基础上,逐步增加功能及用户体验。
互換性の問題が発生した場合の対処方法:
淘宝網のホームページは、互換性において小さな革新をもたらしました。HTML フックにより、オペレーティング システム、ブラウザ カーネル、ブラウザの種類、CSS3 アニメーションのサポート、および IE バージョンが HTML に追加されるという利点があります。
淘宝網ホームページの HTML フック:
互換性の問題は、チームが協力してバグ互換性の蓄積ドキュメントを作成するのが最も効果的です。これ以上に素晴らしいことはありません。
Web サイトには、適切なナビゲーションが必要であり、ルート ディレクトリと各サブディレクトリのキーを制御する必要があります。サイトマップは、Web サイトの所有者が Web サイトの構造を理解するのに役立ちます。また、検索エンジンがサイト全体を含めやすくなります。
情報アクセシビリティは通常、次の点から開始できます。
詳細については、アクセシブルな読書を参照してください。
次のようなフロントエンド アニメーション テクノロジを使用してページを最適化します。
requireJs フレームワークの機能:
シナリオは次のとおりです:
ページ 1: Web サイトにアクセスして何かを購入し、ログインせずにホームページ;
ページ 2: 次に、新しいウィンドウで任意のページを開き、ログインして正常に戻ります。
もう一度ページ 1 にアクセスすると、ページがまだログインしていないことがわかります。実際、ユーザーはすでにログインしています。このエクスペリエンスは非常に悪いです。マルチタグステータスの同期を実現する方法はありますか?はい、ページ可視性を使用します: