タグ

ブックマーク / numb86-tech.hatenablog.com (9)

  • 動的コンテンツのキャッシュを最適化するプッシュ型アーキテクチャ - 30歳からのプログラミング

    エッジサーバからのレスポンスは速い。 コンテンツを CDN のエッジサーバにキャッシュしてそれを返すようにするだけで、ウェブサイトの速度は目に見えて改善される。 特に、リクエストの度にサーバで動的に生成されるコンテンツの場合、キャッシュを利用することで大きな恩恵を受けられる。パフォーマンスが改善されるだけでなく、オリジンサーバの負荷軽減にもつながる。 しかしコンテンツを動的に生成するということは、リクエストの度に生成されるコンテンツが変わる可能性があるということであり、キャッシュを利用するのが難しい。全てのリクエストに対して同じコンテンツが生成されるのであれば、わざわざリクエストの度に生成する必要はないからだ。事前にコンテンツを用意しておいてそれを返せばよい。ビルド時にコンテンツを生成する SSG(Static Site Generation)などがその一例。 リクエストの度にコンテンツが

    動的コンテンツのキャッシュを最適化するプッシュ型アーキテクチャ - 30歳からのプログラミング
    efcl
    efcl 2021/09/21
    clouldflare workerのcache
  • フロントエンドのパフォーマンスチューニングを俯瞰する - 30歳からのプログラミング

    去年からフロントエンドのパフォーマンスについて断続的に学んでいるが、自分の頭のなかにある知識はどれも断片的で、まとまりを欠いているような感覚があった。 知識と知識がつながっておらず、各施策が何のために行われるのかも、必ずしも自明ではなかった。何となく「パフォーマンスに効果がある」と言ってしまうが、それが何を指しているのかは実は曖昧だった。 このような状態では新しい知識を得ていくのが難しいというか、効率的に行えないように思えた。議論の背景が分からないし、文脈や問題意識を上手く掴めないから。何の話をしているのかよく分からない、という状態になりがち。書かれてあることの意味は分かっても論旨を掴めているわけではないから、自分のなかに定着しない。 そこで、現時点で自分が知っていることを整理して、自分なりに分類しておくことにした。 当たり前だが、どのテクニックがどの程度有効なのかは、状況によって違う。

    フロントエンドのパフォーマンスチューニングを俯瞰する - 30歳からのプログラミング
    efcl
    efcl 2021/05/20
    パフォーマンス改善での良く見るポイント
  • ブラウザにおける ES Modules の利用とパフォーマンスについて - 30歳からのプログラミング

    現代の主要なブラウザでは、ES Modules(以下、ESM)を利用することができる。 つまり、import文やexport文を使った JavaScript ファイルを、トランスパイルすることなくそのまま使えるということである。 モジュールシステムをそのまま使えるので、複数のファイルをバンドルする必要もない。 この記事ではまず、ブラウザで ESM を使う方法について説明していく。 その後、処理の流れを詳しく確認していく。これを理解していないと、パフォーマンスが非常に悪いページになってしまう恐れがある。 動作確認は Google Chrome の84.0.4147.105で行っている。 ESM 利用の基 まずは検証用にサーバを立てる。 以下のコードを Deno(バージョンは1.2.2)で実行する。 そうすると、http://localhost:8080/にアクセスしたときにindex.ht

    ブラウザにおける ES Modules の利用とパフォーマンスについて - 30歳からのプログラミング
    efcl
    efcl 2020/08/29
    esmの挙動について。 defer属性をつけたのと同じ、パース処理について
  • TypeScript における変性(variance)について - 30歳からのプログラミング

    プログラミングの型システムに関する記事を読んでいると、共変や反変といった用語が出てくることがある。 TypeScript や Flow についての記事でも、見かけることがある。 それらは TypeScript を使う上で必須の知識ではないが、把握しておくに越したことはない。 この記事では、TypeScript を題材にして、変性について説明していく。 TypeScript に関する議論を理解できるようになることがこの記事の目的であり、より詳細な、学術的、数学的な内容には踏み込まない。 この記事の内容は、TypeScript のv3.9.5で動作確認している。 変性 変性(variance)とは、任意の型Tに対してどのような性質を持つのか示したものであり、以下の 4 種類がある。 不変性(invariance) Tそのものが必要 共変性(covariance) Tそのものか、そのサブタイプが

    TypeScript における変性(variance)について - 30歳からのプログラミング
    efcl
    efcl 2020/07/06
    TypeScriptの型の性質の話
  • package.json やロックファイルによるパッケージの依存関係の管理 - 30歳からのプログラミング

    この記事では、npm installやnpm ciを実行したときにどのようにパッケージがインストールされるのか、依存パッケージにバージョンのコンフリクトが発生した際にどのように処理されるのか、などを見ていく。必要に応じて Yarn での挙動にも触れる。 動作確認に使った npm のバージョンは6.14.5。Yarn は1.22.4。 特に npm はバージョンによって動作が大きく異なるので、注意する。 package-lock.json によるバージョンの固定 package.jsonだけではインストールするパッケージのバージョンを固定できず、package-lock.json(Yarn の場合はyarn.lock)によってバージョンを固定する。 多くの人が知っている話ではあるが、重要な機能なので改めて触れておく。 package.jsonのdependenciesやdevDependen

    package.json やロックファイルによるパッケージの依存関係の管理 - 30歳からのプログラミング
    efcl
    efcl 2020/05/29
    packge-lock.jsonの役割、dedupeの動作について
  • useEffect の概要と async function を使う際の注意点 - 30歳からのプログラミング

    使用している React のバージョンは16.8.4。 レンダー後の処理を指定するための仕組み React Hooks の一つであるuseEffectは、レンダー後に実行したい処理を React に伝えるための仕組み。 useEffect(fn)と記述すると、DOMの更新が終わったあとにfnを実行する。 useEffectはレンダー後に必ず実行される。最初にレンダーした際もそうだし、propsやstateに変更があってレンダーし直した際もそう。そこに区別はない。 以下の例では、このコンポーネントが表示された際にeffect!というログが流れる。 そしてボタンを押下した際にも、その都度effect!というログが流れる。 import React, {useState, useEffect} from 'react'; const App = () => { const [state, set

    useEffect の概要と async function を使う際の注意点 - 30歳からのプログラミング
    efcl
    efcl 2020/02/23
    "副作用関数のなかで非同期処理を行う際の注意点"
  • Cookie 概説 - 30歳からのプログラミング

    Cookie とは、HTTP でステートフルなやり取りを実現するために、ブラウザとサーバ間で情報を送受信する仕組みである。 HTTP は来ステートレスなプロトコルである。そのため、同一のユーザーが連続でリクエストを行っても、それぞれ独立したリクエストであり、「同じユーザーからのリクエストである」とサーバが認識することはできない。 これは例えば、ログイン状態の管理で問題となる。ID とパスワードで認証を行っている場合、リクエストの度に ID とパスワードを送信しなければならない。 Cookie を使うことで、このような事態を解決できる。 まず、サーバがブラウザに対して、Cookie としてどのような情報を保存するのか指示する。具体的には、レスポンスヘッダにSet-Cookieフィールドを含め、そこに Cookie として保存させたい情報を設定する。ログイン状態を管理したい場合は、セッション

    Cookie 概説 - 30歳からのプログラミング
    efcl
    efcl 2020/01/21
    ブラウザとexpressを使ったCookieの設定と属性などのCookieの仕組みについての解説記事。 Expires、Max-Age、Domain、Path,Secure属性、HttpOnly属性、SameSite属性についての解説
  • React.memo を使ったパフォーマンス最適化について - 30歳からのプログラミング

    パフォーマンス・チューニングには、「こうすれば必ず上手くいく」という方法論や銀の弾丸はなく、地道に試行と計測を繰り返すしかない。 しかしだからこそ、基的な考え方や仕組みを理解することが大切であり、それがなければ、どのように対処していけばいいのか見当をつけることすら出来ず、的外れな対応をすることにもなりかねない。 React.memoを使った処理の最適化は、React アプリのパフォーマンス改善のための、基となるテクニックのひとつである。 この記事のコードは React のv16.10.2で動作確認している。 メモ化という概念 React アプリのパフォーマンス最適化を理解するためにはまず、メモ化(Memoization)という概念を把握しておく必要がある。 大雑把に言ってしまうとメモ化とは、何らかの計算によって得られた値を記録しておき、その値が再度必要になったときに、再計算することなく

    React.memo を使ったパフォーマンス最適化について - 30歳からのプログラミング
    efcl
    efcl 2019/12/30
    `React.memo`と`useCallback`を使ったメモ化とパフォーマンスの最適化についての記事
  • Promiseによる非同期処理の書き方 - 30歳からのプログラミング

    JavaScriptは基的に逐次処理、同期処理であり、上から順番にプログラムが実行されていく。 x行目の処理が終わってからx+1行目の処理を行う、という具合に、一つ一つ実行していく。 非同期処理を行うための方法も以前から用意されていたが、ES2015で導入されたPromiseによって、より簡便に実装できるようになった。 なお、ここに書かれているものは全て、v6.4.0のNode.jsで実行した結果である。他の環境だと、ログの内容が異なるかもしれない。 Promiseの基 new Promise()でPromiseのインスタンスを作り、それを操作することで非同期処理を管理していく。 new Promiseの引数には関数を渡す。 そしてその関数の第一引数としてresolveを、第二引数としてrejectを設定し、処理が上手くいったら前者を、失敗したら後者を実行する。 不要であれば、reje

    Promiseによる非同期処理の書き方 - 30歳からのプログラミング
    efcl
    efcl 2018/07/29
    Promiseについて
  • 1