Brendan Eich, a programmer
who
worked for Netscape
Communications
Corporation, created JavaScript
in
1995. It took him only 10
days to
develop
JavaScript
, which then
went under the
name Mocha
.
According to Axel Rauschmayer in his book Speaking JavaScript: An In-Depth Guide for Programmers,
Knowing why and how JavaScript was created helps us understand why it is the way it is.
Read a snippet from
his
book to give you a bit of
history behind the language
from a
different, deeper,
and more professional perspective
. It goes into
why
JavaScript was originally
created. Very
interesting and worth the read!
JavaScript is a scripting
or programming
language that
allows you to
create complex
features
on web
pages. Whenever a
page displays
dynamic content you know that
JavaScript is probably
behind it. With
JavaScript, you
can display
content updates, animated 2D/3D graphics,
scrolling video jukeboxes, image slide shows,
video
players, audio
players, etc.
In simpler and more direct terms,
JavaScript
is a
language
that the
browser
reads
and does stuff
with.
JavaScript is no longer just for the
browser
anymore.
Today, there is Node.js,
an open-source, cross-platform, JavaScript runtime environment
that
executes
JavaScript code
outside
of a browser
,
and MongoDB, an Open Source database written
in C++. BUT
what is great about MongoDB
for
JavaScript
Developers, is that it supports Server-Side JavaScript
execution
. This allows a
JavaScript developer
to use a single
programming language
for both client and server
side
code. AND
MongoDB
is
a
document oriented
database
. Node.js was
released in
June, 2011
, and
MongoDB was
released on February
11,
2009
.
The Document Object Model
, or the DOM
, is a platform
and
language
neutral
interface that
allows
programs and scripts
to dynamically
access and update
the content
, structure
and
style
of documents.
The DOM is the DATA REPRESENTATION
of the objects
that
comprise the
structure
and
content
of a
document on the web.
According to the WHATWG (Web Hypertext Application Technology Group ),
The DOM Standard defines the core infrastructure used to define the web.and
The DOM defines a platform-neutral model for events, aborting activities, and node trees.
The standardization of the DOM
was first
handled by the
World Wide Web
Consortium (W3C)
, which last
developed a
recommendation
in 2004.
Subsequently, WHATWG
took over the
development of the
Standard
, publishing it as a
living document
.
living document
?According to the Wikipedia article on the WHATWG,
The WHATWG specification for HTML is a living document that will have continuous changes as necessary.[17] It includes the core markup language for the web, HTML, as well as numerous APIs like WebSocket, web worker, Web storage, etc.
The DOM
is NOT a programming language
, but without
it,
Javascript
would not have any
model
or concept
of
web pages, HTML
documents, XML documents, and their parts
(elements
). Every element
in a
document
, the document
as a
whole, the head
,
the body
, the footer
, p tags
, header tags
,
sections
,
articles
, navs
, ul
tags
, li tags
,
the tables
within
the document
,
table headers
, text
within the table
cells
, is
part of the
DOM
for that
document
. They all can be
accessed and
manipulated using the DOM
and Javascript
.
How a browser goes from a source HTML
document to
displaying a styled
and
interactive page
in the
viewport is called the Critical
Rendering Path.
The viewport
is the part of the web
page
that the viewer can
see. Scrollbars
move the
viewport
to
show other parts of the page.
The viewport
differs with different devices
, i.e.
mobile
phone, iPad, tablet, laptop, or
desktop,
etc.
The Critical Rendering Path
is the sequence of
steps the
browser
goes through to convert
HTML
, CSS
,
and JavaScript
into pixels on the screen
.
Optimizing the critical rendering
path
optimizes
render performance
.
It includes the DOM
, the CSS Object Model
(CSSOM
), render
tree
, layout
, and
paint
.
In order for the browser
to render
content on the page
, it
has to go
through the five steps mentioned
in the previous slide:
The DOM, the CSS Object Model (CSSOM), the render tree, layout, and paint.
To process an HTML
file, and get to
the DOM
, the browser has
to go through
four steps
:
Convert bytes to characters, identify tokens, convert tokens to nodes, build the DOM tree
Just as the DOM
contains all
page
content
, the CSS Object
Model
contains
all the info on how to style
the DOM
. CSSOM
is similar to the
DOM
but
different. The building of the
DOM
is bit by
bit, and CSSOM
is render blocking. What does this mean? The
browser
blocks the page
from
rendering until it
receives and processes all the CSS
. CSS
is render
blocking because
rules
can be
overwritten in the
CSS
, so content
can't be
rendered until the
CSSOM
is complete.
CSS
rules "cascade down" (Cascading Style Sheet
). In the
stylesheet
itself, you
could have one rule
state one thing higher up
the page,
and as you go down
the
page, the same
rule could state
something
else. The rule
lower down the
page is
the rule
that is then
recognized, and it overwrites
the
previous rule
. In the html page,
things "cascade down" as well.
Everything
in the head
and then
between the body
tags has to
render
first, and then the
script
tags render
afterwards. That's why it
is important, to usually have your
JavaScript
script tags
at the
bottom of the
page. You want everything
else to render
BEFORE the JavaScript is
rendered. In essence, the
JavaScript
DEPENDS on the CSS
.
Order
is important.
Basically, it is the HTML
parser,
i.e.
implemented by the
browser
, that
composes encoding
,
pre-parsing
, tokenization
, and tree formation
.
Tokenization
is the first half of parsing
HTML
.
It means
turning the
HTML
markup into individual tokens such as
"begin tag"
or
"opening tag"
, "end
tag"
, etc.
Once the Render Tree
is built,
establishment of the
Layout
becomes
possible.
Layout
is dependent on the size of the
screen.Layout
step determines
where and how the elements
are
positioned on the
page, determining the width
and
height
of each
element
, and where they
are in relation to each
other.Block level elements
, such as imgs
, have a
default width of
100%
of the width of their
parent
.
element
with a width of 75%
, will be
three quarters of
the width
of its parent.
body
will have a
default width of
100%
. This means that it will
fill 100%
of the width of
the viewport
.device
impacts
Layout
.The viewport
meta tag defines
the
width of the
layout
viewport
, impacting the Layout
.
Without it, the
browser
uses
the default viewport
width,
which on by-default
full-screen browsers
is 960px.
On by-default browsers
, i.e., your iPhone
or
tablet
, if you
set the
viewport
meta tag to:
then the
width
will be the width
of the
device
instead of the default viewport width
.
initial-scale=1.0"
sets the initial zoom level
when the page
is first loaded by the
browser
.
The last step
in the critical rendering
path is PAINT,
as in painting
pixels to the screen.
Onload
, the entire screen is painted
.modified
, will be
repainted.Browsers
are
optimized to
repaint the minimum
required.
True
to a
certain extent.
Depends on how much is going
on with your
JavaScript
AND CSS
at
any
given time
.
Paint time
depends on what updates
are being
applied to the
render tree
.
Painting in of itself is fast, and
not the most impactful
in improving performance
of your app
, but
one does have to take into consideration
LAYOUT and
REPAINT when measuring
how long
an animation frame
may take to render/re-render
, for example.
Styles applied to each node
increase paint
time
, but one
should not just
remove styles to improve
performance. One has to consider whether the
potentially incremental (very
small) performance
improvement
outweighs the experience
it
provides
to the
visitor
.
The DOM
is essential to making websites
interactive.
JavaScript is the client-side
scripting language
that connects
to the DOM
and directly manipulates it in the
browser
.
Understanding the DOM
means a better
understanding of
JavaScript
and how it
works. For those of you who want to further your
understanding of
JavaScript
, or want to
go on to using libraries
such as React
or
frameworks
such as
Vue.js
, Angular.js
, Nuxt.js
, or Next.js
, for
example,
understanding the DOM
is crucial.