diff --git a/core/modules/path/src/PathAliasComputed.php b/core/modules/path/src/PathAliasComputed.php
new file mode 100644
index 0000000000..25e1869b23
--- /dev/null
+++ b/core/modules/path/src/PathAliasComputed.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\path;
+
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\TypedData\TypedData;
+
+/**
+ * A computed property for path aliases.
+ */
+class PathAliasComputed extends TypedData {
+
+  /**
+   * Cached path alias.
+   *
+   * @var string|null
+   */
+  protected $alias = NULL;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getValue($langcode = NULL) {
+    if ($this->alias !== NULL) {
+      return $this->alias;
+    }
+
+    /** @var \Drupal\Core\Field\FieldItemInterface $field_item */
+    /** @var \Drupal\Core\Entity\EntityInterface $entity */
+    if (($field_item = $this->getParent()) && ($entity = $field_item->getEntity()) && $entity->id()) {
+
+      $possible_langcodes = [];
+      $possible_langcodes[] = $langcode;
+      if ($field_item->getLangcode() !== LanguageInterface::LANGCODE_NOT_SPECIFIED) {
+        $possible_langcodes[] = $field_item->getLangcode();
+      }
+      $possible_langcodes[] = $entity->getLangcode();
+      $possible_langcodes[] = LanguageInterface::LANGCODE_NOT_SPECIFIED;
+
+      $alias = NULL;
+      foreach ($possible_langcodes as $possible_langcode) {
+        $alias = $this->getAliasStorage()->lookupPathAlias('/' . $entity->toUrl()->getInternalPath(), $possible_langcode);
+        if ($alias !== FALSE) {
+          break;
+        }
+      }
+
+
+      // Mimic the field structure that would be returned if this field
+      // contained any items.
+      $this->alias = $alias;
+    }
+    return $this->alias;
+  }
+
+  /**
+   * The path alias storage.
+   *
+   * @return \Drupal\Core\Path\AliasStorageInterface
+   */
+  protected function getAliasStorage() {
+    return \Drupal::service('path.alias_storage');
+  }
+
+}
diff --git a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
index 239588fd51..5b5f2cec36 100644
--- a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
+++ b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FieldItemBase;
 use Drupal\Core\TypedData\DataDefinition;
+use Drupal\path\PathAliasComputed;
 
 /**
  * Defines the 'path' entity field type.
@@ -27,6 +28,8 @@ class PathItem extends FieldItemBase {
    */
   public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
     $properties['alias'] = DataDefinition::create('string')
+      ->setComputed(TRUE)
+      ->setClass(PathAliasComputed::class)
       ->setLabel(t('Path alias'));
     $properties['pid'] = DataDefinition::create('integer')
       ->setLabel(t('Path id'));
diff --git a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
index 366db885a6..c3001c1fb9 100644
--- a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
+++ b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
@@ -28,14 +28,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     $entity = $items->getEntity();
     $path = array();
     if (!$entity->isNew()) {
-      $conditions = array('source' => '/' . $entity->urlInfo()->getInternalPath());
-      if ($items->getLangcode() != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-        $conditions['langcode'] = $items->getLangcode();
-      }
-      $path = \Drupal::service('path.alias_storage')->load($conditions);
-      if ($path === FALSE) {
-        $path = array();
-      }
+      $path = $items->first()->get('alias') ?: [];
     }
     $path += array(
       'pid' => NULL,
